Неофициальный полный русский перевод ECMA-376, часть 3, 5-е издание (2015). Первоисточник: Ecma International. Официальная английская версия имеет преимущественную силу.

ECMA-376-3, 5-е издание

Форматы файлов Office Open XML — совместимость разметки и расширяемость

Декабрь 2015 г.

ecma INTERNATIONAL является зарегистрированным товарным знаком Ecma International.

ДОКУМЕНТ, ЗАЩИЩЁННЫЙ АВТОРСКИМ ПРАВОМ

© Ecma International 2015

Содержание

iii

Содержание

ECMA-376, часть 3

iv

Предисловие

v

Предисловие

Изменения по сравнению с 4-м изданием были внесены, чтобы привести настоящее 5-е издание стандарта в соответствие с ISO/IEC 29500-3:2015. И настоящее 5-е издание, и ISO/IEC 29500-3:2015 ссылаются на 1-е издание. Таким образом, настоящее 5-е издание не отменяет и не заменяет 1-е издание. Однако настоящее 5-е издание отменяет и заменяет 4-е издание.

ECMA-376 состоит из следующих частей:

Приложения A и B предназначены исключительно для информации.

vi

Введение

ECMA-376 определяет семейство XML-схем, совместно именуемое Office Open XML, которые определяют XML-словари для офисных документов текстовой обработки, электронных таблиц и презентаций, а также упаковку офисных документов, соответствующих этим схемам.

Цель состоит в том, чтобы обеспечить реализацию форматов Office Open XML максимально широким набором средств и платформ, способствуя взаимодействию между приложениями офисной производительности и системами автоматизации основной деятельности, а также поддерживать и укреплять архивирование и сохранение документов — и всё это способом, полностью совместимым с существующим массивом документов Microsoft® Office.

© Ecma International 2015

vii

«УВЕДОМЛЕНИЕ ОБ АВТОРСКОМ ПРАВЕ

© 2015 Ecma International

Этот документ может копироваться, публиковаться и распространяться среди других лиц, а некоторые его производные работы могут подготавливаться, копироваться, публиковаться и распространяться полностью или частично при условии, что приведённое выше уведомление об авторском праве и настоящие Лицензия об авторском праве и отказ от ответственности включены во все такие копии и производные работы. Единственными производными работами, допускаемыми согласно настоящим Лицензии об авторском праве и отказу от ответственности, являются:

Однако содержимое самого этого документа не может быть изменено каким-либо образом, включая удаление уведомления об авторском праве или ссылок на Ecma International, за исключением случаев, когда это необходимо для его перевода на языки, отличные от английского, или в другой формат.

Официальной версией документа Ecma International является англоязычная версия на веб-сайте Ecma International. При расхождениях между переведённой версией и официальной версией официальная версия ДОЛЖНА (SHALL) иметь преимущественную силу.

Предоставленные выше ограниченные разрешения являются бессрочными и не будут отозваны Ecma International, её правопреемниками или лицами, которым переданы права.

Этот документ и содержащаяся в нём информация предоставляются по принципу «КАК ЕСТЬ», и ECMA INTERNATIONAL ОТКАЗЫВАЕТСЯ ОТ ВСЕХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ЛЮБУЮ ГАРАНТИЮ ТОГО, ЧТО ИСПОЛЬЗОВАНИЕ СОДЕРЖАЩЕЙСЯ ЗДЕСЬ ИНФОРМАЦИИ НЕ НАРУШИТ КАКИХ-ЛИБО ПРАВ СОБСТВЕННОСТИ, А ТАКЖЕ ОТ ЛЮБЫХ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ ТОВАРНОЙ ПРИГОДНОСТИ ИЛИ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ.»

viii

1. Область применения

1 Область применения

Настоящая часть ECMA-376 определяет набор соглашений для обеспечения прямой совместимости спецификаций разметки, применимых не только к спецификациям Office Open XML, описанным в частях 1 и 4 настоящего стандарта, но и к другим спецификациям разметки. Эти соглашения позволяют приложениям более ранних версий обрабатывать XML-документы, созданные приложениями более поздних версий или расширениями.

ECMA-376, часть 3

2 Нормативные ссылки

Следующие ссылочные стандарты являются необходимыми для применения настоящего стандарта. Для датированных ссылок применяется только указанное издание. Для недатированных ссылок применяется последнее издание ссылочного стандарта (включая любые поправки).

XML, Tim Bray, Jean Paoli, Eve Maler, C. M. Sperberg-McQueen и François Yergeau (редакторы). Extensible Markup Language (XML) 1.0, Fifth Edition. World Wide Web Consortium. 2008. http://www.w3.org/TR/2008/PER-xml-20080205/. [Примечание: Реализации настоящей части ECMA-376 не обязаны поддерживать возможности XML, введённые пятым изданием. конец примечания]

XML Base, Marsh, Jonathan. XML Base. World Wide Web Consortium. 2009. http://www.w3.org/TR/2009/REC-xmlbase-20090128/

XML Information Set, John Cowan и Richard Tobin (редакторы). XML Information Set (Second Edition), 4 February 2004. World Wide Web Consortium. http://www.w3.org/TR/2004/REC-xml-infoset-20040204/

XML Namespaces, Tim Bray, Dave Hollander, Andrew Layman и Richard Tobin (редакторы). Namespaces in XML 1.0 (Third Edition), 8 December 2009. World Wide Web Consortium. http://www.w3.org/TR/2009/REC-xml-names-20091208/

3. Термины и определения

3 Термины и определения

Для целей настоящего стандарта применяются следующие термины и определения:

3.1
конфигурация приложения
набор имён понимаемых пространств имён
3.2
определяемый приложением элемент расширения
элемент, определённый спецификацией разметки, атрибуты и содержимое которого не должны обрабатываться процессором MCE
3.3
конфигурация разметки
набор расширенных имён определяемых приложением элементов расширения
3.4
спецификация разметки
спецификация формата на основе XML, допускающая использование элементов и атрибутов в пространстве имён MCE
3.5
процессор MCE
программное обеспечение, используемое для обработки XML-документов, содержащих элементы и атрибуты MCE
3.6
несоответствие
несовместимость между ограничениями, заданными элементами и атрибутами MCE, и пространствами имён, заданными конфигурацией приложения
3.7
понимаемое пространство имён
пространство имён, элементы и атрибуты которого потребляющее приложение способно обработать

ECMA-376, часть 3

4 Условные обозначения

В ECMA-376 используются следующие типографические соглашения:

  1. Первое употребление нового термина пишется курсивом. [Пример: Текст ECMA-376 разделён на нормативные и информационные категории. конец примера]
  2. Имя тега элемента XML записывается с использованием отличающихся стиля и гарнитуры. [Пример: Элементы bookmarkStart и bookmarkEnd определяют … конец примера]
  3. Имя атрибута XML записывается с использованием отличающихся стиля и гарнитуры. [Пример: Атрибут dropCap определяет … конец примера]
  4. Значение атрибута XML записывается моноширинным стилем. [Пример: Значение атрибута auto определяет … конец примера]

За исключением целых пунктов или приложений, обозначенных как информационные, информационный текст, содержащийся в нормативном тексте, обозначается следующими способами:

  1. [Пример: фрагмент кода, возможно с некоторым повествовательным текстом … конец примера]
  2. [Примечание: повествовательный текст … конец примечания]
  3. [Обоснование: повествовательный текст … конец обоснования]
  4. [Руководство: повествовательный текст … конец руководства]

5. Общее описание

5 Общее описание

Настоящий пункт является информационным

Настоящая часть ECMA-376 подразделяется следующим образом:

Примеры приводятся для иллюстрации возможных форм описываемых конструкций. Ссылки используются для отсылки к связанным пунктам. Примечания приводятся для предоставления советов или рекомендаций реализаторам или программистам.

Нормативными частями настоящей части ECMA-376 являются:

Информационными частями настоящей части ECMA-376 являются:

Конец информационного текста

ECMA-376, часть 3 стандарта

6 Обзор

Настоящий раздел носит информационный характер

В этой части стандарта ECMA-376 описывается набор XML-элементов и атрибутов, называемых элементами и атрибутами MCE, назначение которых состоит в том, чтобы позволить создающим приложениям направлять потребляющие приложения при обработке ими любых XML-элементов и атрибутов в пространствах имён, не понимаемых потребляющими приложениями.

Элементы и атрибуты MCE предназначены для того, чтобы позволить создающим приложениям использовать возможности, добавленные в новых версиях или расширениях спецификации разметки, при создании новых документов, которые при этом остаются интероперабельными с потребляющими приложениями, не понимающими эти возможности. Создающее приложение включает элементы и атрибуты MCE в документы, чтобы указать потребляющему приложению, каким образом оно может скорректировать содержимое документа для исключения тех возможностей, которые несовместимы с понимаемой им версией спецификации разметки, одновременно позволяя потребляющим приложениям, понимающим эти возможности, в полной мере их использовать.

Элементы и атрибуты MCE определяют отдельные типы конструкций совместимости и расширений, кратко изложенные ниже:

Концептуально потребляющее приложение не обрабатывает непосредственно входные документы, содержащие элементы и атрибуты MCE, а использует процессор MCE для создания выходного документа, понимаемого потребляющим приложением.

6

Примеры входных документов, использующих элементы и атрибуты MCE, и выходных документов, которые были бы созданы процессором MCE, приведены в приложении A.

Конец информационного текста

7

ECMA-376, часть 3 стандарта

8

7 Элементы и атрибуты MCE

7.1 Введение

В этом подразделе определяются синтаксические определения всех элементов и атрибутов MCE, которые ДОЛЖНЫ (shall) находиться в пространстве имён совместимости разметки:

http://schemas.openxmlformats.org/markup-compatibility/2006

[Руководство: Внешним подмножествам DTD НЕ СЛЕДУЕТ (should) указывать значения по умолчанию для атрибутов в пространстве имён совместимости разметки, поскольку некоторые непроверяющие XML-процессоры не используют такие значения по умолчанию. конец руководства]

Атрибуты в пространстве имён совместимости разметки МОГУТ (may) встречаться в любом XML-элементе, включая элементы совместимости разметки.

Элементы в пространстве имён совместимости разметки НЕ ДОЛЖНЫ (shall not) содержать атрибуты в пространстве имён XML

http://www.w3.org/XML/1998/namespace.

7.2 Атрибут Ignorable

Атрибут Ignorable ДОЛЖЕН (shall) быть атрибутом в пространстве имён совместимости разметки с локальным именем «Ignorable». Его значением ДОЛЖЕН (shall) быть разделённый пробельными символами список из нуля или более префиксов пространств имён, необязательно содержащий начальные и/или конечные пробельные символы. Для каждого префикса пространства имён в списке ДОЛЖНО (shall) существовать находящееся в области действия пространство имён, с которым связан этот префикс, и оно НЕ ДОЛЖНО (shall not) быть пространством имён совместимости разметки. Считается, что это находящееся в области действия пространство имён объявлено игнорируемым данным атрибутом Ignorable.

[Пример:


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006"> 
  <foo mce:Ignorable="i1" 
      xmlns:i1="http://www.example.com/i1" 
      xmlns:i2="http://www.example.com/i2"> 
    <bar mce:Ignorable="i2">…</bar> 
  </foo> 
</example> 

Элементы foo и bar имеют по атрибуту Ignorable. Атрибут Ignorable элемента foo задаёт префикс «i1», который связан с находящимся в области действия пространством имён «http://www.example.com/i1». Атрибут Ignorable элемента bar задаёт префикс «i2», который связан с находящимся в области действия пространством имён «http://www.example.com/i2». Таким образом, эти пространства имён объявлены игнорируемыми. конец примера]

7. Элементы и атрибуты MCE

9

ECMA-376, часть 3 стандарта

10

7.3 Атрибут ProcessContent

Атрибут ProcessContent ДОЛЖЕН (shall) быть атрибутом в пространстве имён совместимости разметки с локальным именем «ProcessContent». Его значением ДОЛЖЕН (shall) быть разделённый пробельными символами список из нуля или более токенов, необязательно содержащий начальные и/или конечные пробельные символы. Каждый токен ДОЛЖЕН (shall) быть префиксом пространства имён, за которым следует «:», а затем локальное имя или «*». Для каждого токена в списке ДОЛЖНО (shall) существовать находящееся в области действия пространство имён, с которым связана часть токена, являющаяся префиксом пространства имён. Это находящееся в области действия пространство имён НЕ ДОЛЖНО (shall not) быть пространством имён совместимости разметки и ДОЛЖНО (shall) быть объявлено игнорируемым атрибутом Ignorable у того же элемента либо у элемента-предка. Считается, что пара из этого находящегося в области действия пространства имён и локальной части или «*» в данном токене объявлена данным атрибутом ProcessContent как пара имён обрабатываемого содержимого.

Если (n1, l1) является парой «имя пространства имён — локальное имя» элемента, этот элемент соответствует паре имён обрабатываемого содержимого (n2, l2), если

  1. n1 и n2 являются одной и той же последовательностью символов; и
  2. либо

[Пример:


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006"> 
  <foo1 mce:Ignorable="i1" 
      mce:ProcessContent="i1:bar1" 
      xmlns:i1="http://www.example.com/i1" 
      xmlns:i2="http://www.example.com/i2"> 
    <foo2 mce:Ignorable="i2" 
      mce:ProcessContent="i2:*">…</foo2> 
    <foo3 mce:ProcessContent="i1:bar2">…</foo3> 
  </foo1> 
</example> 

Элементы foo1, foo2 и foo3 имеют атрибуты ProcessContent. Атрибут элемента foo1 содержит токен "i1:bar1", где "i1" является префиксом пространства имён, связанным с находящимся в области действия пространством имён "http://www.example.com/i1", которое объявлено игнорируемым у данного элемента. Атрибут элемента foo2 содержит токен "i2:*", где i2 является префиксом пространства имён, связанным с находящимся в области действия пространством имён "http://www.example.com/i2", которое объявлено игнорируемым у данного элемента. Атрибут элемента foo3 содержит токен "i1:bar2", где i1 является префиксом пространства имён, связанным с находящимся в области действия пространством имён "http://www.example.com/i1", которое объявлено игнорируемым у родительского элемента foo1. конец примера]

7.4 Атрибут MustUnderstand

Атрибут MustUnderstand ДОЛЖЕН (shall) быть атрибутом в пространстве имён совместимости разметки с локальным именем «MustUnderstand». Его значением ДОЛЖЕН (shall) быть разделённый пробельными символами список из нуля или более префиксов пространств имён

7. Элементы и атрибуты MCE

11

необязательно содержащий начальные и/или конечные пробельные символы. Для каждого префикса пространства имён в списке ДОЛЖНО (shall) существовать находящееся в области действия имя пространства имён, с которым связан этот префикс, и это пространство имён НЕ ДОЛЖНО (shall not) быть пространством имён совместимости разметки. Считается, что это находящееся в области действия пространство имён объявлено данным атрибутом MustUnderstand как пространство имён, которое необходимо понимать.

[Пример:


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:n1="http://www.example.com/n1" 
    mce:MustUnderstand="n1"> 
</example> 

В этом примере корневой элемент имеет атрибут MustUnderstand. Значение содержит

n1

, который связан с находящимся в области действия именем пространства имён "http://www.example.com/n1". конец примера]

7.5 Элемент AlternateContent

Элемент AlternateContent ДОЛЖЕН (shall) быть элементом в пространстве имён совместимости разметки с локальным именем «AlternateContent». Элемент AlternateContent НЕ ДОЛЖЕН (shall not) иметь неквалифицированных атрибутов, но МОЖЕТ (may) иметь квалифицированные атрибуты. Пространством имён каждого квалифицированного атрибута ДОЛЖНО (shall) быть либо пространство имён совместимости разметки, либо пространство имён, объявленное игнорируемым атрибутом Ignorable данного элемента AlternateContent или одного из его предков.

Элемент AlternateContent ДОЛЖЕН (shall) содержать один или более дочерних элементов Choice, за которыми необязательно может следовать один дочерний элемент Fallback. Никакие другие элементы в пространстве имён совместимости разметки НЕ ДОЛЖНЫ (shall) появляться как дочерние элементы. Элементы из других пространств имён МОГУТ (may) появляться как предшествующие, промежуточные или последующие дочерние элементы, но пространство имён такого дочернего элемента ДОЛЖНО (shall) быть объявлено игнорируемым.

[Примечание: Игнорируемые элементы разрешены в качестве дочерних элементов AlternateContent, чтобы обеспечить будущие расширения этой конструкции. Если бы для AlternateContent было задано, что он содержит только элементы Choice и Fallback из пространства имён совместимости разметки (§7.5), это предотвратило бы использование других элементов совместимости разметки, которые позволили бы расширить AlternateContent в будущих версиях MCE. Любой процессор MCE, который встречает дочерний элемент AlternateContent, находящийся в пространстве имён предполагаемого будущего расширения MCE, не потерпит неудачу при обработке документа при условии, что пространство имён этого дочернего элемента является игнорируемым, поскольку перед выбором между оставшимися элементами Choice и Fallback он отбросит все элементы в игнорируемых пространствах имён, которые не понимает. конец примечания]

[Примечание: Элемент AlternateContent может появляться в качестве корневого элемента документа разметки. конец примечания]

[Пример:


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:n1="http://www.example.com/n1" 
    xmlns:n2="http://www.example.com/n2"> 

ECMA-376, часть 3 стандарта

12


  <mce:AlternateContent mce:MustUnderstand="n1"> 
    <mce:Choice Requires="n2">…</mce:Choice> 
    <mce:Fallback>…</mce:Fallback> 
  </mce:AlternateContent> 
</example> 

В этом примере элемент AlternateContent имеет атрибут MustUnderstand и не имеет других атрибутов. Элемент AlternateContent имеет элемент Choice, за которым следует элемент Fallback. конец примера]

7.6 Элемент Choice

Элемент Choice ДОЛЖЕН (shall) быть элементом в пространстве имён совместимости разметки с локальным именем «Choice». Родительскими элементами элементов Choice ДОЛЖНЫ (shall) быть элементы AlternateContent. Элемент Choice ДОЛЖЕН (shall) иметь неквалифицированный атрибут с локальным именем «Requires» и НЕ ДОЛЖЕН (shall) иметь других неквалифицированных атрибутов. Значением атрибута Requires ДОЛЖЕН (shall) быть разделённый пробельными символами список из одного или более префиксов пространств имён, необязательно содержащий начальные и/или конечные пробельные символы.

[Примечание: За исключением пустых списков, синтаксические ограничения, связанные с атрибутом Requires, совпадают с ограничениями, связанными с атрибутом MustUnderstand. конец примечания]

Элемент Choice МОЖЕТ (may) иметь квалифицированные атрибуты. Пространством имён каждого квалифицированного атрибута ДОЛЖНО (shall) быть либо пространство имён совместимости разметки, либо пространство имён, объявленное игнорируемым.

[Пример:


<example xmlns="http://www.example.com" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:i1="http://www.example.com/i1" 
    xmlns:n1="http://www.example.com/n1"> 
  <mce:AlternateContent mce:Ignorable="i1" > 
    <mce:Choice Requires="n1" i1:foo="">…</mce:Choice> 
  </mce:AlternateContent> 
</example> 

В этом примере элемент Choice задаёт атрибут i1:foo. Пространство имён этого атрибута объявлено игнорируемым у родительского элемента AlternateContent. Этот документ является соответствующим, но был бы несоответствующим, если бы пространство имён i1 не было игнорируемым. конец примера]

7.7 Элемент Fallback

Элемент Fallback ДОЛЖЕН (shall) быть элементом в пространстве имён совместимости разметки с локальным именем «Fallback». Родительскими элементами элементов Fallback ДОЛЖНЫ (shall) быть элементы AlternateContent.

Элемент Fallback НЕ ДОЛЖЕН (shall not) иметь неквалифицированных атрибутов. Элемент Fallback МОЖЕТ (may) иметь квалифицированные атрибуты. Пространством имён каждого квалифицированного атрибута ДОЛЖНО (shall) быть либо пространство имён совместимости разметки, либо пространство имён, объявленное игнорируемым.

7. Элементы и атрибуты MCE

13

[Пример:


<example xmlns="http://www.example.com" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:i1="http://www.example.com/i1" 
    xmlns:n1="http://www.example.com/n1"> 
  <mce:AlternateContent mce:Ignorable="i1" > 
    <mce:Choice Requires="n1" >…</mce:Choice> 
    <mce:Fallback i1:foo="">…</mce:Fallback> 
  </mce:AlternateContent> 
</example> 

В этом примере элемент Fallback задаёт атрибут i1:foo. Пространство имён этого атрибута объявлено игнорируемым у родительского элемента AlternateContent. Этот документ является соответствующим, но был бы несоответствующим, если бы пространство имён i1 не было игнорируемым. конец примера]

8 Определяемые приложением элементы расширения

Спецификация разметки, использующая элементы и атрибуты MCE, может обозначать один или несколько элементов в определяемых ею пространствах имён как определяемые приложением элементы расширения. Как описано в §9, обработка MCE фактически приостанавливается в содержимом этих элементов, и они передаются в выходной документ, сформированный процессором MCE. Никакие элементы пространства имён совместимости разметки не ДОЛЖНЫ (shall) обозначаться как определяемые приложением элементы расширения.

[Обоснование: Этот механизм предназначен для использования спецификациями разметки, в частности, но не исключительно, для создания точек расширяемости в спецификации разметки. конец обоснования]

[Примечание: Если спецификация разметки включает схему, схема может ограничивать элемент расширения так, что он допускается только в определённых контекстах разметки. конец примечания]

[Примечание: Содержимое определяемого приложением элемента расширения может содержать разметку, использующую элементы и атрибуты MCE. Потребляющее приложение может вызвать процессор MCE для обработки содержимого определяемых приложением элементов расширения, содержащихся в выходном документе, сформированном процессором MCE. конец примечания]

[Пример:


<example xmlns="http://www.example.com" 
    xmlns:n1="http://www.example.com/n1" 
    xmlns:unknown="http://www.example.com/unknown"> 
  <n1:extensionElement> 
    <unknown:foo/> 
  </n1:extensionElement> 
</example> 

В этом примере элемент extensionElement содержит элемент unknown:foo. Предположим, что конфигурация разметки процессора MCE содержит расширенное имя ("http://www.example.com/n1", "extensionElement"), а его конфигурация приложения не содержит "http://www.example.com/unknown". Тогда элемент n1:extensionElement является определяемым приложением элементом расширения. Хотя элемент unknown:foo не принадлежит понимаемому или игнорируемому пространству имён, согласно семантическим определениям в §9 процессор MCE не сообщает о наличии этого элемента как об ошибке. конец примера]

[Пример:


<example xmlns="http://www.example.com" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:i1="http://www.example.com/i1" 
    xmlns:n1="http://www.example.com/n1"> 
  <extensionElement> 

    <foo1 mce:Ignorable="i1" 
        mce:ProcessContent="i1:bar1" 
        mce:MustUnderstand="n1"> 
    </foo1> 
    <mce:AlternateContent mce:Ignorable="i1" > 
      <mce:Choice Requires="n1" >
…
</mce:Choice> 
      <mce:Fallback i1:foo="">
…
</mce:Fallback> 
    </mce:AlternateContent> 
  </extensionElement> 
</example> 

В этом примере элементы и атрибуты MCE встречаются внутри элемента extensionElement, который является единственным дочерним элементом корневого элемента example. Предположим, что процессор MCE настроен на сохранение элементов расширения с расширенным именем ("http://www.example.com/n1", "extensionElement"). Тогда процессор MCE сохраняет элемент extensionElement. Следовательно, содержащиеся в нём элементы и атрибуты MCE — mce:Ignorable="i1", mce:ProcessContent="i1:bar1", mce:MustUnderstand="n1", mce:AlternateContent, mce:Choice и mce:Fallback — присутствуют в выходном документе. конец примера]

9 Семантические определения и эталонная модель обработки

9.1 Обзор

Этот раздел определяет выходной документ, который ДОЛЖЕН (SHALL) быть создан процессором MCE при заданных входном документе, конфигурации разметки и конфигурации приложения. Процессор MCE инициализируется конфигурациями разметки и приложения. Конфигурация разметки представляет набор расширенных имён, которые должны рассматриваться как имена определяемых приложением элементов расширения. Конфигурация приложения представляет набор пространств имён, которые должны рассматриваться как понимаемые.

Этот раздел также определяет условия несоответствия между заданными входным документом, конфигурацией разметки и конфигурацией приложения, о которых ДОЛЖЕН (SHALL) сигнализировать процессор MCE; однако он не определяет точно, когда или каким образом следует сигнализировать о таких несоответствиях. Если процессор MCE обнаруживает несоответствие, он ДОЛЖЕН (SHALL) сообщить об этом несоответствии потребляющему приложению и МОЖЕТ (MAY) продолжить обычную обработку MCE. [Примечание: Если потребляющее приложение способно обрабатывать элементы и атрибуты, не принадлежащие никакому пространству имён, это ДОЛЖНО (must) быть задано конфигурацией приложения. Реализаторам напоминается, что для элементов и атрибутов, не принадлежащих никакому пространству имён, не существует имени пространства имён, и СЛЕДУЕТ (should) учитывать это при проектировании процессоров MCE. конец примечания]

Этот раздел определяет семантику посредством описания абстрактной модели обработки, включающей следующие три шага:

  1. Шаг 1 определяет, какие элементы и атрибуты помечаются как игнорируемые или разворачиваемые. Это определение учитывает атрибуты Ignorable и ProcessContent, но не учитывает атрибуты MustUnderstand или элементы AlternateContent, Choice либо Fallback. Элементы или атрибуты внутри определяемых приложением элементов расширения не помечаются как игнорируемые или разворачиваемые.
  2. Шаг 2 определяет семантику элементов AlternateContent. Он задаёт, какой элемент Choice или Fallback каждого элемента AlternateContent выбран. Это определение учитывает элементы AlternateContent, Choice и Fallback, но не учитывает атрибуты Ignorable, ProcessContent или MustUnderstand. Элементы Choice или Fallback внутри определяемых приложением элементов расширения не помечаются как выбранные.
  3. Шаг 3 применяет результаты шагов 1 и 2 для построения выходного документа, а также проверяет атрибуты MustUnderstand, если они не находятся внутри определяемых приложением элементов расширения.

Однако процессоры MCE не обязаны выполнять эти шаги. Процессоры MCE соответствуют требованиям, если выходные документы, созданные, и несоответствия, о которых сообщено для заданных входных документов, конфигураций разметки и конфигураций приложения, согласуются с документами, созданными, и несоответствиями, о которых сообщено при выполнении этих шагов.

[Примечание: Поскольку обработка совместимости разметки не выполняется внутри определяемых приложением элементов расширения, выходной документ может по-прежнему содержать элементы и атрибуты в пространстве имён совместимости разметки после применения обработки совместимости разметки. конец примечания]

Если процессор MCE обнаруживает, что документ не соответствует требованиям, процессору MCE СЛЕДУЕТ (SHOULD) указать на это несоответствие потребляющему приложению.

9.2 Шаг 1: Обработка атрибутов Ignorable и ProcessContent

Элемент ДОЛЖЕН (SHALL) быть помечен как игнорируемый, если выполнены все следующие условия:

  1. Пространство имён этого элемента объявлено игнорируемым атрибутом Ignorable данного элемента или предкового элемента;
  2. Пространство имён этого элемента не включено в заданную конфигурацию приложения;
  3. Этот элемент не соответствует ни одной паре имён обрабатываемого содержимого, объявленной этим элементом или некоторым предком; и
  4. Этот элемент не является ни определяемым приложением элементом расширения, ни потомком определяемого приложением элемента расширения.

Атрибут ДОЛЖЕН (SHALL) быть помечен как игнорируемый, если выполнены все следующие условия:

  1. Пространство имён этого атрибута объявлено игнорируемым атрибутом Ignorable элемента, имеющего данный атрибут, или предкового элемента;
  2. Пространство имён этого атрибута не включено в заданную конфигурацию приложения; и
  3. Этот атрибут не принадлежит определяемому приложением элементу расширения или потомку определяемого приложением элемента расширения.

Элемент ДОЛЖЕН (SHALL) быть помечен как разворачиваемый, если выполнены все следующие условия:

  1. Пространство имён этого элемента объявлено игнорируемым атрибутом Ignorable данного элемента или некоторого предкового элемента;
  2. Пространство имён этого элемента не включено в заданную конфигурацию приложения;
  3. Этот элемент соответствует паре имён обрабатываемого содержимого, объявленной этим элементом или некоторым предком; и
  4. Этот элемент не является ни определяемым приложением элементом расширения, ни потомком определяемого приложением элемента расширения.

Элемент, помеченный как разворачиваемый, НЕ ДОЛЖЕН (SHALL NOT) иметь атрибут xml:base, xml:lang или xml:space.

[Пример:


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:i1="http://www.example.com/i1" 
    mce:Ignorable="i1" 
    mce:ProcessContent="i1:bar" 
    i1:foo=""> 

  <i1:foo><fooChild/></i1:foo> 
  <i1:bar><barChild/></i1:bar> 
  <i1:baz i1:baz=""><i1:bazChild/></i1:baz> 
</example> 

Пространство имён "http://www.example.com/i1" объявлено игнорируемым. Пара ("http://www.example.com/i1", bar) объявлена парой имён обрабатываемого содержимого. Предположим, что заданная конфигурация разметки является одноэлементным множеством, содержащим ("http://www.example.com/i1", baz), и что заданная конфигурация приложения не содержит "http://www.example.com/i1". Тогда атрибут i1:foo и элемент i1:foo помечаются как игнорируемые, а элемент i1:bar помечается как разворачиваемый. Однако элемент i1:baz не помечается ни как игнорируемый, ни как разворачиваемый, поскольку он является определяемым приложением элементом расширения. Аналогично, не помечаются ни атрибут i1:baz, ни элемент i1:bazChild. Ни fooChild, ни barChild не помечаются как игнорируемыми или разворачиваемыми, хотя их родительские элементы помечены как игнорируемые или разворачиваемые. конец примера]

9.3 Шаг 2: Обработка элементов AlternateContent, Choice и Fallback

Элемент Choice ДОЛЖЕН (SHALL) быть помечен как выбранный, если выполнены следующие условия:

  1. Каждое из пространств имён, заданных атрибутом Requires этого элемента, включено в заданную конфигурацию приложения;
  2. Ни один предшествующий одноуровневый элемент Choice не помечен как выбранный; и
  3. Элемент не является потомком определяемого приложением элемента расширения.

Элемент Fallback ДОЛЖЕН (SHALL) быть помечен как выбранный, если выполнены следующие условия:

  1. Ни один предшествующий одноуровневый элемент Choice не помечен как выбранный; и
  2. Элемент не является потомком определяемого приложением элемента расширения.

[Пример:


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:n1="http://www.example.com/n1" 
    xmlns:n2="http://www.example.com/n2" 
    xmlns:n3="http://www.example.com/n3"> 
  <mce:AlternateContent> 
    <mce:Choice Requires="n1 n2">                      <!-- Choice #1 --> 
      <mce:AlternateContent> 
        <mce:Choice Requires="n3">...</mce:Choice>       <!-- Choice #1-1 --> 
        <mce:Fallback>...</mce:Fallback>                 <!-- Fallback #1-1 --> 
      </mce:AlternateContent> 
    </mce:Choice> 
    <mce:Choice Requires="n1">                         <!-- Choice #2 --> 
      <mce:AlternateContent> 
        <mce:Choice Requires="n3">...</mce:Choice>       <!-- Choice #2-1 --> 

        <mce:Fallback>...</mce:Fallback>                 <!-- Fallback #2-1 --> 
      </mce:AlternateContent> 
    </mce:Choice> 
    <mce:Fallback>...</mce:Fallback>                   <!-- Fallback #1 --> 
  </mce:AlternateContent> 
</example> 

Дочерний элемент корневого элемента является элементом AlternateContent. Предположим, что конфигурация приложения содержит три пространства имён: “http://www.example.com/n1”, “http://www.example.com/n2” и http://www.example.com/n3. Тогда Choice № 1, Choice № 1-1 и Choice № 2-1 помечаются как выбранные, а Choice № 2, Fallback № 1, Fallback № 1-1 и Fallback № 2-1 — нет. Обратите внимание, что Choice № 2-1, помеченный как выбранный, находится внутри Choice № 2, который не помечен как выбранный.

Предположим, что конфигурация приложения содержит два пространства имён: “http://www.example.com/n1” и “http://www.example.com/n2”, но не “http://www.example.com/n3”. Тогда Choice № 1, Fallback № 1-1 и Fallback № 2-1 помечаются как выбранные. конец примера]

9.4 Шаг 3: Обработка атрибута MustUnderstand и создание выходного документа

Выходной документ ДОЛЖЕН (SHALL) быть построен путём изменения входного документа согласно следующей процедуре, начиная с корневого элемента.

Для каждого элемента во входном документе, если элемент:

  1. Помечен как игнорируемый:
    а)
    Удалить этот элемент, его атрибуты и содержимое.
  2. Помечен как разворачиваемый:
    а)
    Проверить каждый атрибут MustUnderstand этого элемента. Если какое-либо из пространств имён, объявленных этим атрибутом, отсутствует в конфигурации приложения, сообщить о несоответствии.
    б)
    Заменить этот элемент содержимым данного элемента. [Примечание: Атрибуты данного элемента будут утрачены. конец примечания.]
    в)
    Рекурсивно применить процедуру шага 3 к каждому дочернему элементу данного элемента.
  3. Является элементом AlternateContent, не являющимся потомком определяемого приложением элемента расширения:
    а)
    Если какой-либо дочерний элемент этого элемента AlternateContent не является ни элементом Choice, ни элементом Fallback и не помечен как игнорируемый, сообщить о несоответствии.
    б)
    Если ни один из дочерних элементов Choice или Fallback не помечен как выбранный, удалить данный элемент AlternateContent и его содержимое. Если дочерний элемент Choice или Fallback помечен как выбранный, заменить этот элемент AlternateContent содержимым элемента Choice или Fallback, помеченного как выбранный.
    в)
    Проверить каждый атрибут MustUnderstand этого элемента AlternateContent и помеченного как выбранный элемента Choice или Fallback, если такой имеется. Если какое-либо из пространств имён, объявленных этими атрибутами, отсутствует в конфигурации приложения, сообщить о несоответствии.
    г)
    Рекурсивно применить процедуру шага 3 к каждому дочернему элементу помеченного как выбранный элемента Choice или Fallback, если такой имеется.
  4. Является определяемым приложением элементом расширения:
    а)
    Не вносить изменений в элемент или его содержимое и включить их в выходной документ.
  5. В остальных случаях:
    а)
    Удалить атрибуты Ignorable, ProcessContent и MustUnderstand, а также атрибуты, помеченные как игнорируемые.
    б)
    Рекурсивно применить процедуру шага 3 к каждому дочернему элементу данного элемента.

[Примечание: Содержимое выбранного элемента Choice или Fallback не появляется в выходном документе, если какой-либо предок данного элемента игнорируется либо какой-либо предковый элемент Choice или Fallback не выбран. конец примечания]

[Примечание: Выходные документы могут содержать атрибуты или элементы в пространствах имён, не содержащихся в конфигурации приложения. конец примечания]

[Примечание: За исключением находящихся внутри определяемых приложением элементов расширения, элементы и атрибуты в пространстве имён совместимости разметки не появляются в выходном документе. конец примечания]

[Пример:


<example xmlns="http://www.example.com" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:foo="http://www.example.com/foo" 
    xmlns:bar="http://www.example.com/bar" 
    mce:Ignorable="foo bar" 
    mce:ProcessContent="foo:unwrapped"> 
  <mce:AlternateContent> 
    <mce:Choice Requires="foo">             <!-- Choice #1 --> 
      <foo:foo/>                            <!-- Foo #1 --> 
      <bar:bar>                             <!-- Bar #1 --> 
        <mce:AlternateContent> 
          <mce:Choice Requires="bar">       <!-- Choice #1-1 --> 
            <Choice1-1/> 
          </mce:Choice> 
          <mce:Fallback>                    <!-- Fallback #1-1 --> 
            <Fallback1-1/> 
          </mce:Fallback> 
        </mce:AlternateContent> 
      </bar:bar> 

    </mce:Choice> 
    <mce:Choice Requires="bar">             <!-- Choice #2 --> 
      <bar:bar/>                            <!-- Bar #2 --> 
      <foo:unwrapped>                       <!-- Foo #2 --> 
        <mce:AlternateContent> 
          <mce:Choice Requires="foo">       <!-- Choice #2-1 --> 
            <Choice2-1/> 
          </mce:Choice> 
          <mce:Fallback>        <!-- Fallback #2-1 --> 
            <Fallback2-1/> 
          </mce:Fallback> 
        </mce:AlternateContent> 
      </foo:unwrapped> 
    </mce:Choice> 
  </mce:AlternateContent> 
</example> 

Предположим, что конфигурация приложения содержит пространство имён http://www.example.com/foo. На шаге 1 Bar № 1 и Bar № 2 помечаются как игнорируемые. На шаге 2 Choice № 1, Fallback № 1-1 и Choice № 2-1 помечаются как выбранные. Однако на шаге 3 содержимое Fallback № 1-1 отбрасывается, поскольку Bar № 1 помечен как игнорируемый. Аналогично, содержимое Choice № 2-1 отбрасывается, поскольку Choice № 2 не помечен как выбранный. На шаге 3 Bar № 1 и его содержимое, включая Fallback № 1-1, отбрасываются. Таким образом, строится следующий выходной документ.


<example xmlns="http://www.example.com" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:foo="http://www.example.com/foo" 
    xmlns:bar="http://www.example.com/bar"> 
  <foo:foo/> 
</example> 

Предположим, что конфигурация приложения содержит пространство имён http://www.example.com/bar. На шаге 1 Foo № 1 помечается как игнорируемый, а Foo № 2 помечается как разворачиваемый. На шаге 2 Choice № 1-1, Choice № 2 и Fallback № 2-1 помечаются как выбранные. Однако на шаге 3 содержимое Choice № 1-1 отбрасывается, поскольку Choice № 1 не помечен как выбранный. Поскольку Foo № 2 помечен как разворачиваемый, содержимое Fallback № 2-1 не отбрасывается. Таким образом, строится следующий выходной документ.


<example xmlns="http://www.example.com" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:foo="http://www.example.com/foo" 
    xmlns:bar="http://www.example.com/bar"> 
  <bar:bar/> 
  <Fallback2-1/> 
</example> 

Предположим, что конфигурация приложения содержит два пространства имён: http://www.example.com/foo и http://www.example.com/bar. На шаге 1 ни элементы, ни атрибуты не помечаются как игнорируемые или разворачиваемые. На шаге 2 Choice № 1, Choice № 1-1 и Choice № 2-1 помечаются как выбранные. Однако на шаге 3 содержимое Choice № 2-1 отбрасывается, поскольку Choice № 2 не помечен как выбранный. Таким образом, строится следующий выходной документ.


<example xmlns="http://www.example.com" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:foo="http://www.example.com/foo" 
    xmlns:bar="http://www.example.com/bar"> 
  <foo:foo/> 
  <bar:bar> 
    <Choice1-1/> 
  </bar:bar> 
</example> 

конец примера]

Приложение A
(информативное)
Примеры

Настоящее приложение является информативным.

A.1 Синтаксические примеры

A.1.1 Общие положения

В настоящем разделе приведены примеры, дополнительно демонстрирующие синтаксис элементов и атрибутов MCE.

A.1.2 Атрибут Ignorable: несколько префиксов, связанных с пространством имён


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006"> 
  <foo mce:Ignorable="i1" 
      xmlns:i1="http://www.example.com/i1" 
      xmlns:i2="http://www.example.com/i2"> 
    <bar mce:Ignorable="i2">…</bar> 
    <bar mce:Ignorable="i1 i2">…</bar> 
    <bar mce:Ignorable="i1alias i2" 
        xmlns:i1alias="http://www.example.com/i1">…</bar> 
  </foo> 
</example> 

Атрибут Ignorable первого элемента bar объявляет пространство имён «http://www.example.com/i2» игнорируемым. Атрибут Ignorable второго элемента bar объявляет игнорируемыми как «http://www.example.com/i1», так и «http://www.example.com/i2», однако первое из них уже объявлено атрибутом Ignorable родительского элемента foo. Атрибут Ignorable третьего элемента bar также объявляет эти два пространства имён игнорируемыми, хотя префиксом пространства имён является i1alias, а не i1. Поэтому, хотя лексические значения различаются, эти три атрибута Ignorable приводят к одинаковой обработке содержимого каждого элемента bar в части обработки MCE.

A.1.3 Атрибут Ignorable: несоответствующее использование


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006"> 
  <foo1 mce:Ignorable="i1"> 
    <foo2 xmlns:i1="http://www.example.com/i1">…</foo2> 
  </foo1> 

  <foo3 mce:Ignorable="i2">…</foo3> 
  <foo4 xmlns:i2="http://www.example.com/i2"/> 
</example> 

Этот документ не соответствует требованиям по двум причинам. Во-первых, элемент foo1 имеет атрибут Ignorable, но значение i1 не связано с находящимся в области действия пространством имён. Во-вторых, элемент foo3 также имеет атрибут Ignorable, но значение i2 также не связано с находящимся в области действия пространством имён.

A.1.4 Атрибут ProcessContent: несколько префиксов, связанных с пространством имён


<example xmlns=http://www.example.com 
    xmlns:mce=http://schemas.openxmlformats.org/markup-compatibility/2006 
    xmlns:n1="http://www.example.com/n1" 
    xmlns:n1alias=http://www.example.com/n1 
    mc:Ignorable="n1alias" 
    mc:ProcessContent="n1:foo" > 
  <n1alias:foo> 
    <bar/> 
  </n1alias:foo> 
</example> 

Пространство имён "http://www.example.com/n1" объявлено игнорируемым. Пара из этого пространства имён и локального имени foo объявлена атрибутом ProcessContent парой имён обрабатываемого содержимого. Элемент n1alias:foo соответствует этой паре, поскольку n1 и n1alias совместно используют одно и то же имя пространства имён.

A.1.5 Атрибут ProcessContent: несоответствующее использование


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006"> 
  <foo1 xmlns:i2="http://www.example.com/i2"> 
    <foo2 mce:ProcessContent="i2:*">…</foo2> 
  </foo1> 
</example> 

Элемент foo2 имеет атрибут ProcessContent. Его значением является токен "i2:*", в котором i2 — префикс пространства имён, связанный с находящимся в области действия пространством имён "http://www.example.com/i2". Однако это пространство имён не объявлено игнорируемым. Следовательно, этот пример не соответствует требованиям.

A.1.6 Атрибут MustUnderstand: несоответствующее использование


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:n1="http://www.example.com/n1"> 
  <foo mce:MustUnderstand="n1 n2"/> 
</example> 

Атрибут MustUnderstand элемента foo содержит n1 и n2. Хотя n1 связано с находящимся в области действия именем пространства имён "http://www.example.com/n1", n2 не связано. Следовательно, этот документ не соответствует требованиям.

A.1.7 Элемент AlternateContent: расширяемость в будущем


<example xmlns="http://www.example.com/" 
    xmlns:mce="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:mce2="http://www.example.com/markup-compatibility/v2" 
    xmlns:n1="http://www.example.com/n1"> 
  <mce:AlternateContent mce:Ignorable="mce2" mce2:foo=""> 
    <mce2:NewChoice … />…</mce2:NewChoice> 
    <mce:Choice Requires="n1">…</mce:Choice> 
    <mce:Fallback>…</mce:Fallback> 
  </mce:AlternateContent> 
</example> 

Элемент AlternateContent имеет атрибут Ignorable. Дочерними элементами элемента AlternateContent являются элементы Choice и Fallback из одного пространства имён, а также элемент NewChoice из другого пространства имён. Поскольку пространство имён элемента NewChoice, которое могло бы быть частью гипотетической будущей версии совместимости разметки и расширяемости, объявлено игнорируемым, этот документ соответствует требованиям. Если бы пространство имён элемента NewChoice не было объявлено Ignorable, документ не соответствовал бы требованиям.

A.2 Семантические примеры

A.2.1 Общие положения

В настоящем разделе приведены примеры обработки входных документов в спецификации разметки, поддерживающей использование MCE, и соответствующих выходных документов, создаваемых процессором MCE при различных конфигурациях разметки и конфигурациях приложения.

A.2.2 Атрибут Ignorable

Этот пример показывает, как использовать атрибут Ignorable для определения игнорируемых пространств имён и как процессоры MCE с различными конфигурациями приложения обрабатывают пример входного документа.

Входной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2" 
    xmlns:v3="http://www.example.com/Circles/v3" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="v2 v3"> 
  <Circle Center="0,0" Radius="20" Color="Blue" v2:Opacity="0.5" 
      v3:Luminance="13"/> 
<Circles> 

Три пространства имён в этом документе — «http://www.example.com/Circles/v1», «http://www.example.com/Circles/v2» и «http://www.example.com/Circles/v3» — представляют три версии спецификации разметки. Версия 1 вводит элементы Circle пространства имён версии 1. Версия 2 вводит атрибут Opacity пространства имён версии 2. Версия 3 вводит атрибут Luminance пространства имён версии 3. В этом документе как пространство имён версии 2, так и пространство имён версии 3 объявлены игнорируемыми.

Во-первых, предположим, что конфигурация приложения содержит пространства имён версий 1, 2 и 3. Тогда выходной документ содержит атрибуты Opacity и Luminance.

Выходной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2" 
    xmlns:v3="http://www.example.com/Circles/v3"> 
  <Circle Center="0,0" Radius="20" Color="Blue" v2:Opacity="0.5" 
      v3:Luminance="13"/> 
</Circles> 

Во-вторых, предположим, что конфигурация приложения содержит пространства имён версий 1 и 2, но не версии 3. Тогда выходной документ содержит атрибут Opacity, но не содержит атрибут Luminance.

Выходной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2"> 
  <Circle Center="0,0" Radius="20" Color="Blue" v2:Opacity="0.5"/> 
</Circles> 

В-третьих, предположим, что конфигурация приложения содержит пространство имён версии 1, но не пространств имён версий 2 или 3. В этом случае выходной документ не содержит ни атрибута Opacity, ни атрибута Luminance.

Выходной документ:


<Circles xmlns="http://www.example.com/Circles/v1"> 
  <Circle Center="0,0" Radius="20" Color="Blue"/> 
</Circles> 

A.2.3 Атрибуты Ignorable и ProcessContent

Этот пример показывает, как использовать атрибут ProcessContent для обработки дочерних элементов внутри игнорируемых элементов и как процессоры MCE с различными конфигурациями приложения обрабатывают пример входного документа.

Входной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="v2" 
    mc:ProcessContent="v2:Blink"> 
  <v2:Watermark Opacity="v0.1"> 
    <Circle Center="0,0" Radius="20" Color="Blue"/> 
  </v2:Watermark> 
  <v2:Blink> 
    <Circle Center="13,0" Radius="20" Color="Yellow"/> 
  </v2:Blink> 
</Circles> 

Два пространства имён в этом документе — «http://www.example.com/Circles/v1» и «http://www.example.com/Circles/v2» — представляют две версии спецификации разметки. Версия 1 вводит элементы Circles и Circle пространства имён версии 1. Версия 2 вводит элементы Watermark и Blink пространства имён версии 2. Пространство имён версии 2 объявлено игнорируемым, а элемент Blink соответствует паре имён обрабатываемого содержимого («http://www.example.com/Circles/v2», Blink), объявленной в корневом элементе.

Во-первых, предположим, что конфигурация приложения содержит пространства имён версий 1 и 2. Тогда выходной документ содержит все элементы входного документа.

Выходной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2"> 
  <v2:Watermark Opacity="v0.1"> 
    <Circle Center="0,0" Radius="20" Color="Blue"/> 
  </v2:Watermark> 
  <v2:Blink> 
    <Circle Center="13,0" Radius="20" Color="Yellow"/> 
  </v2:Blink> 
</Circles> 

Во-вторых, предположим, что конфигурация приложения содержит пространство имён версии 1, но не версии 2. Тогда выходной документ не содержит элементы Watermark и Blink, которые относятся к пространству имён версии 2. Однако содержимое элемента Blink сохраняется, поскольку этот элемент соответствует объявленной паре имён обрабатываемого содержимого.

Выходной документ:

<Circles xmlns="http://www.example.com/Circles/v1">

  <Circle Center="13,0" Radius="20" Color="Yellow"/> 
</Circles> 

A.2.4 Неигнорируемое и непонимаемое пространство имён

Этот пример показывает базовую обработку пространств имён процессорами MCE с различными конфигурациями.

Входной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> 
  <Circle Center="0,0" Radius="20" Color="Blue" v2:Opacity="0.5" /> 
</Circles> 

Два пространства имён в этом документе — «http://www.example.com/Circles/v1» и «http://www.example.com/Circles/v2» — представляют две версии спецификации разметки. Версия 1 вводит элементы Circles и Circle пространства имён версии 1. Версия 2 вводит атрибут Opacity пространства имён версии 2.

Во-первых, предположим, что конфигурация приложения содержит пространства имён версий 1 и 2. Тогда выходной документ идентичен входному документу, за возможным исключением пропуска объявления пространства имён совместимости разметки.

Во-вторых, предположим, что конфигурация приложения содержит пространство имён версии 1, но не версии 2. Тогда процессор MCE сообщит о несоответствии при рассмотрении атрибута Opacity на шаге 3 (§9.4).

A.2.5 Атрибут MustUnderstand

Этот пример показывает, как использовать атрибут MustUnderstand, чтобы требовать обработки пространств имён, и как процессоры MCE с различными конфигурациями приложения обрабатывают пример входного документа.

Входной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:MustUnderstand="v2"> 
  <Circle Center="0,0" Radius="20" Color="Blue" v2:Opacity="0.5" /> 
</Circles> 

Этот документ подобен предыдущему примеру. Единственное отличие состоит в добавлении атрибута MustUnderstand в корневой элемент.

Процессор MCE ведёт себя так же, за исключением того, что о несоответствии сигнализируется, если конфигурация приложения не содержит пространство имён "http://www.example.com/Circles/v2".

A.2.6 Элемент AlternateContent

Этот пример показывает, как использовать элементы AlternateContent, Choice и Fallback для задания альтернативных представлений содержимого и как процессоры MCE с различными конфигурациями приложения обрабатывают пример входного документа.

Входной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2" 
    xmlns:v3="http://www.example.com/Circles/v3" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="v2 v3"> 
  <mc:AlternateContent> 
    <mc:Choice Requires="v3"> 
      <v3:Circle Center="0,0" Radius="20" Color="Blue" Opacity="0.5" 
          Luminance="13"/> 
    </mc:Choice> 
    <mc:Fallback> 
      <LuminanceFilter Luminance="13"> 
         <Circle Center="0,0" Radius="20" Color="Blue" v2:Opacity="0.5"/> 
       </LuminanceFilter> 
     </mc:Fallback> 
  </mc:AlternateContent> 
</Circles> 

Три пространства имён в этом документе — «http://www.example.com/Circles/v1», «http://www.example.com/Circles/v2» и «http://www.example.com/Circles/v3» — представляют три версии спецификации разметки. Версия 1 вводит элементы LuminanceFilter и Circle пространства имён версии 1. Версия 2 вводит атрибут Opacity пространства имён версии 2. Версия 3 вводит элементы Circle пространства имён версии 3. Как пространство имён версии 2, так и пространство имён версии 3 объявлены игнорируемыми.

Во-первых, предположим, что конфигурация приложения содержит пространства имён версий 1, 2 и 3. Тогда, поскольку выбран элемент Choice, выходной документ содержит элементы Circle пространства имён версии 3, но не содержит элемент LuminanceFilter.

Выходной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2" 
    xmlns:v3="http://www.example.com/Circles/v3" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="v2 v3"> 
  <v3:Circle Center="0,0" Radius="20" Color="Blue" Opacity="0.5" 

      Luminance="13"/> 
</Circles> 

Во-вторых, предположим, что конфигурация приложения содержит пространства имён версий 1 и 2, но не версии 3. Тогда, поскольку выбран элемент Fallback, выходной документ содержит элементы LuminanceFilter и Circle пространства имён версии 1, но не содержит элементы Circle пространства имён версии 3. Атрибут Opacity не удаляется, поскольку конфигурация приложения содержит пространство имён версии 2.

Выходной документ:


<Circles xmlns="http://www.example.com/Circles/v1" 
    xmlns:v2="http://www.example.com/Circles/v2"> 
    <LuminanceFilter Luminance="13"> 
      <Circle Center="0,0" Radius="20" Color="Blue" v2:Opacity="0.5"/> 
    </LuminanceFilter> 
</Circles> 

В-третьих, предположим, что конфигурация приложения содержит пространство имён версии 1, но не пространств имён версий 2 или 3. Тогда, поскольку выбран элемент Fallback, выходной документ содержит элемент LuminanceFilter и элементы Circle пространства имён версии 1, но не содержит элементы Circle пространства имён версии 3. Кроме того, поскольку конфигурация приложения не содержит пространство имён версии 2, атрибут Opacity удаляется.

Выходной документ:


<Circles xmlns="http://www.example.com/Circles/v1"> 
    <LuminanceFilter Luminance="13"> 
      <Circle Center="0,0" Radius="20" Color="Blue"/> 
    </LuminanceFilter> 
</Circles> 

A.2.7 Игнорируемое содержимое внутри определяемых приложением элементов расширения

Этот пример показывает, как использовать игнорируемое содержимое в определяемых приложением элементах расширения, чтобы дополнительно расширить существующее расширение.

ChrisOffice v1 — гипотетическая реализация ECMA-376, позволяющая применять звуковые эффекты к существующему условному форматированию SpreadsheetML. Эти данные хранятся внутри определяемых приложением элементов расширения, чтобы другие соответствующие ECMA-376 приложения могли выполнять их круговое преобразование; при этом в SpreadsheetML определяемый приложением элемент расширения (extLst) уже определён под элементом conditionalFormattingElements.

ChrisOffice v2 добавляет возможность использовать видео наряду с аудио. Чтобы ChrisOffice v1 мог понимать всё, кроме видео, необходимо использовать другое пространство имён, чтобы ChrisOffice не обнаруживал неизвестное содержимое в

понимаемых пространствах имён. В этом примере у ChrisOffice v1 нет собственных элементов расширения внутри элементов расширения, поэтому дополнительное содержимое является игнорируемым, чтобы ChrisOffice v1 отбрасывал его при загрузке.

Входной документ:


… 
<conditionalFormattingElements> 
  <extLst> 
    <ext uri="myurl" xmlns:co1="http://chrisoffice/v1"> 
      <co1:soundeffect mc:Ignorable="co2" xmlns:co2="http://chrisoffice/v2"> 
        <co1:sourceFile>moo.mp3</co1:sourceFile> 
        <co2:sourceVideo>cow.mpg</co2:sourceFile> 
      </co1:soundeffect> 
    </ext> 
  </extLst> 
</conditionalFormattingElements> 
… 

ChrisOffice v1 отбросит видео при чтении файла. Поскольку обработка конструкций MCE не допускается внутри определяемых приложением элементов расширения, приложения, не понимающие исходную конструкцию звукового эффекта, не будут без необходимости отбрасывать весь элемент расширения, включая новое видеосодержимое. Поскольку элемент расширения понимается ChrisOffice v1 и известно, что формат этого элемента расширения содержит дальнейшие конструкции MCE, ChrisOffice впоследствии вызовет процессор MCE для обработки содержимого этого элемента расширения и отбросит видео при чтении файла, поскольку пространство имён co2 объявлено игнорируемым.

Выходной документ (ChrisOffice v1):


… 
<conditionalFormattingElements> 
  <extLst> 
    <ext uri="myurl" xmlns:co1="http://chrisoffice/v1"> 
      <co1:soundeffect mc:Ignorable="co2" xmlns:co2="http://chrisoffice/v2"> 
        <co1:sourceFile>moo.mp3</co1:sourceFile> 
      </co1:soundeffect> 
    </ext> 
  </extLst> 
</conditionalFormattingElements> 
… 

Конец информативного текста.

Приложение B
(справочное)
Проверка с использованием NVDL

Настоящее приложение является справочным.

Язык диспетчеризации проверки на основе пространств имён (NVDL) позволяет декомпозировать документы на кандидаты для проверки, каждый из которых может быть проверен независимо.

Документ разметки может удовлетворять требованиям настоящей части, не являясь документом Office Open XML. Следующий сценарий NVDL проверяет, правильно ли данный документ использует атрибуты и элементы, определённые настоящей частью ECMA-376.

Этот сценарий NVDL сначала извлекает элементы и атрибуты в пространстве имён совместимости разметки, а затем проверяет их по соответствующим схемам RELAX NG.

Обратите внимание, что элементам AlternateContent, Choice и Fallback разрешается иметь сторонние элементы и атрибуты.


<?xml version="1.0" encoding="UTF-8"?> 
<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"> 
  <namespace match="attributes" ns="http://schemas.openxmlformats.org/markup- 
    compatibility/2006"> 
    <validate schemaType="application/relax-ng-compact-syntax"> 
      <schema> 
        namespace mc="http://schemas.openxmlformats.org/markup- 
         compatibility/2006" 
        nsList = list { xsd:NCName* } 
        qnameList = list { (xsd:QName | xsd:string {pattern = "\i\c*:\*" })*} 
        start = element * { 
          attribute mc:Ignorable { nsList }?, 
          attribute mc:ProcessContent { qnameList }?, 
          attribute mc:MustUnderstand { nsList }? 
        } 
      </schema> 
    </validate> 
  </namespace> 
  <namespace match="elements" ns="http://schemas.openxmlformats.org/markup- 
  compatibility/2006"> 
    <validate schemaType="application/relax-ng-compact-syntax"> 

      <schema> 
        default namespace ="http://schemas.openxmlformats.org/markup- 
          compatibility/2006" 
        nsList = list { xsd:NCName* } 
        qnameList = list { (xsd:QName | xsd:string {pattern = "\i\c*:\*" })*} 
        start = element AlternateContent {choice+,fallback?} 
        choice = element Choice {attribute Requires { nsList }, text} 
        fallback = element Fallback {text} 
      </schema> 
    </validate> 
  </namespace> 
  <namespace ns="" match="attributes"> 
    <attach/> 
  </namespace> 
  <anyNamespace match="elements attributes"> 
    <allow/> 
  </anyNamespace> 
</rules> 

Две схемы RELAX NG, встроенные в приведённый выше сценарий NVDL, могут быть переписаны в аналогичной форме XML Schema.

Конец справочного текста.

Библиография

В дополнение к нормативным ссылкам ниже приведены полезные ссылки для разработчиков и пользователей настоящего Международного стандарта:

ECMA-376-1:2012, Information technology — Document description and processing languages — Office Open XML File Formats, Part 1: Fundamentals and Markup Language Reference.

ECMA-376-4:2012, Information technology — Document description and processing languages — Office Open XML File Formats, Part 4: Transitional Migration Features.

ISO/IEC 19757-2:2008, Information technology — Document Schema Definition Language (DSDL) — Part 2: Regular-grammar-based validation — RELAX NG

ISO/IEC 19757-4:2006, Information technology — Document Schema Definition Languages (DSDL) — Part 4: Namespace-based Validation Dispatching Language (NVDL).

XML Schema Part 0: Primer (Second Edition), рекомендация W3C от 28 октября 2004 г.,
http://www.w3.org/TR/xmlschema-0/

XML Schema Part 1: Structures (Second Edition), рекомендация W3C от 28 октября 2004 г.,
http://www.w3.org/TR/xmlschema-1/

XML Schema Part 2: Datatypes (Second Edition), рекомендация W3C от 28 октября 2004 г.,
http://www.w3.org/TR/xmlschema-2/

Уведомление об авторских правах и лицензия Ecma (оригинал)

 
© Ecma International 2015  vii i 
 
 
"COPYRIGHT NOTICE 
© 2015 Ecma International 
This document may be copied, published and distributed to others, and certain derivative works of it 
may be prepared, copied, published, and distributed, in whole or in part, provided that the above 
copyright notice and this Copyright License and Disclaimer are included on all such copies and 
derivative works. The only derivative works that are permissible under this Copyright License and 
Disclaimer are:  
(i) works which incorporate all or portion of this document for the purpose of providing commentary or 
explanation (such as an annotated version of the document), 
(ii) works which incorporate all or portion of this document for the purpose of incorporating features 
that provide accessibility, 
(iii) translations of this document into languages other than English and into different formats and  
(iv) works by making use of this specification in standard conformant products by implementing (e.g. 
by copy and paste wholly or partly) the functionality therein. 
However, the content of this document itself may not be modified in any way, including by removing the 
copyright notice or references to Ecma International, except as required to translate it into languages 
other than English or into a different format. 
The official version of an Ecma International document is the English language version on the Ecma 
International website. In the event of discrepancies between a translated version and the official 
version, the official version shall govern. 
The limited permissions granted above are perpetual and will not be revoked by Ecma International or 
its successors or assigns. 
This document and the information contained herein is provided on an "AS IS" basis and ECMA 
INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE 
ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR 
A PARTICULAR PURPOSE."