![]() |
|
Библиотека RTFM
Совпадение с объектом документа предполагает, что:
[Определение: Как следствие этого, для каждого
некорневого элемента
|
| [2] | Char |
::= | #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |
[#x10000-#x10FFFF] |
/* любой символ Unicode, исключая суррогатные блоки, FFFE и FFFF. */ |
Механизм кодирования кодовых точек символов внутри битовых последовательностей может варьироваться от экземпляра к экземпляру. Все процессоры XML обязаны принимать кодировки UTF-8 и UTF-16 из 10646. Механизм обозначения того, какая из двух кодировок используется, и подключение других кодировок обсуждается позже в разделе 4.3.3 Кодирование Символов в Экземплярах.
Этот раздел определяет некоторые символы, широко используемые в грамматике.
S (пробел) состоит из одного или более символов пробела (#x20), возврата каретки, перевода строки или табуляции.
| [3] | S |
::= | (#x20 | #x9 | #xD | #xA)+ |
Для удобства символы подразделяются на буквы, цифры и прочие символы.
Буква
представляет собой алфавитный или силлабический базовый символ или
идеографический символ.
Полные определения специфических символов каждого класса
даны в разделе
B Классы Символов.
[Определение: Name\Имя это лексическая единица,
начинающаяся буквой или одним из символов пунктуации и продолжающаяся буквами,
цифрами, дефисами, символами подчёркивания, двоеточием или full stops,
известными как символы именования.]
Имена, начинающиеся строкой "xml" или любой строкой, совпадающей с (('X'|'x') ('M'|'m') ('L'|'l')),
зарезервированы для целей стандартизации в этой или последующих версиях данной
спецификации.
Примечание:
Пространство Имён в Рекомендациях XML [XML Names] устанавливает значения именам, содержащим символы двоеточия. Следовательно, авторы не должны использовать двоеточие в именах XML, исключая использование для целей пространства имён, но процессоры XML обязаны принимать двоеточие как символ именования.
Nmtoken (лексема именования) состоит из символов именования.
| [4] | NameChar |
::= | Letter | Digit |
'.' | '-' | '_' | ':' | CombiningChar
| Extender |
| [5] | Name |
::= | (Letter |
'_' | ':') (NameChar)* |
| [6] | Names |
::= | Name (S
Name)* |
| [7] | Nmtoken |
::= | (NameChar)+ |
| [8] | Nmtokens |
::= | Nmtoken
(S Nmtoken)* |
Литерные данные это любая строка, заключённая в кавычки и не содержащая знаков кавычки, которые используются в качестве ограничителей этой строки. Литеры используются для специфицирования содержимого внутренних экземпляров/internal entities (EntityValue), значений атрибутов (AttValue) и внешних идентификаторов (SystemLiteral). Обратите внимание, что SystemLiteral может быть разобран без сканирования разметки.
| [9] | EntityValue |
::= | '"' ([^%&"] | PEReference
| Reference)*
'"' |
| "'" ([^%&'] | PEReference
| Reference)*
"'" | |||
| [10] | AttValue |
::= | '"' ([^<&"] | Reference)*
'"' |
| "'" ([^<&'] | Reference)*
"'" | |||
| [11] | SystemLiteral |
::= | ('"' [^"]* '"') | ("'" [^']* "'") |
| [12] | PubidLiteral |
::= | '"' PubidChar*
'"' | "'" (PubidChar
- "'")* "'" |
| [13] | PubidChar |
::= | #x20 | #xD | #xA | [a-zA-Z0-9]
| [-'()+,./:=?;!*#@$_%] |
Примечание:
Хотя продукт EntityValue допускает
определение экземпляра, состоящего из одиночного
< в литерале (напр., <!ENTITY mylt
"<">), настоятельно рекомендуется исключить такое использование,
поскольку любое обращение к такому экземпляру вызовет ошибку "правильности
формирования" (well-formedness).
Текст состоит из смеси
символьных данных и разметки.
[Определение: Разметка вводится в виде
стартовых тэгов, конечных тэгов,
тэгов пустых элементов, ссылок на
экземпляры, символьных мнемоник,
комментариев, ограничителей
разделов CDATA,
объявлений типа документа, инструкций
процесса, объявлений XML,
текстовых объявлений и любых пробелов в верхнем
уровне экземпляра документа (то есть вне элемента документа и не внутри другой
разметки).]
[Определение: Весь текст, не являющийся разметкой, образует символьные данные документа.]
Символ амперсанда (&) и левая угловая скобка (<) могут появляться в
своей литеральной форме только при использовании в качестве
ограничителей разметки или в комментариях,
инструкциях процесса или
разделах CDATA. Если их
необходимо использовать ещё где-нибудь, они обязаны вводиться в виде
escape-последовательности, с
использованием цифровой мнемоники или строки
"&" и "<" соответственно. Правая
угловая скобка (>) может быть представлена строкой
">" и обязана, для обеспечения
совместимости, вводиться с помощью escape-посследовательности
">" или символьной мнемоники, если появляется в строке
"]]>" внутри содержимого, и если эта строка не обозначает конец
раздела CDATA.
Символьные данные в содержимом элементов - это любая строка символов, не
содержащая начальных ограничителей или другой разметки. В разделе CDATA
символьные данные - это любая строка символов, не включающая закрывающий
ограничитель раздела CDATA - "]]>".
Для того, чтобы значения атрибутов могли содержать и одинарные, и двойные
кавычки, апостроф, или одиночная кавычка, (') может быть представлен в виде "'",
а символ двойной кавычки (") - как
""".
| [14] | CharData |
::= | [^<&]* - ([^<&]* ']]>'
[^<&]*) |
[Определение: Комментарии могут появляться в
любом месте документа вне прочей
разметки; кроме того, они могут появляться
внутри объявления типа документа в тех местах, которые допускаются грамматикой.
Они не являются частью символьных данных документа:
процессор XML может, но не должен, давать приложению возможность запрашивать
текст комментариев. Для обеспечения совместимости
строка "--"
(двойной дефис) обязана не появляться внутри комментариев.] Ссылки на экземпляры
параметров не распознаются внутри комментариев.
| [15] | Comment |
::= | '<!--' ((Char - '-')
| ('-' (Char -
'-')))* '-->' |
Пример комментария:
<!-- объявления <head> и <body> --> |
Заметьте, что грамматика не допускает заканчивать комментарии сочетанием
--->.
Следующий пример сформирован неправильно.
<!-- B+, B или B---> |
[Определение: Инструкции процесса (ИП) позволяют вводить в текст документа инструкции для приложений.]
| [16] | PI |
::= | '<?' PITarget
(S (Char* - (Char*
'?>' Char*)))?
'?>' |
| [17] | PITarget |
::= | Name - (('X'
| 'x') ('M' | 'm') ('L' | 'l')) |
ИП не являются частью
символьных
данных документа и передаются непосредственно приложению. ИП начинается
указанием на "цель" (PITarget) для
идентификации приложения, которому направляется инструкция. Имена цели, такие
как "XML", "xml" и т.д., зарезервированы для
возможности стандартизации в этой и будущих версиях данной спецификации.
Механизм XML
"Нотация"
может использоваться для формального объявления целей ИП. Ссылки на экземпляр
параметра не распознаются внутри ИП.
[Определение: Разделы CDATA
могут появляться там же, где и символьные данные; они используются для
escape-блоков текста, содержащего символы, которые иначе будут распознаваться
как разметка. Разделы CDATA начинаются строкой "<![CDATA[" и
заканчиваются строкой "]]>":]
| [18] | CDSect |
::= | CDStart
CData CDEnd |
| [19] | CDStart |
::= | '<![CDATA[' |
| [20] | CData |
::= | (Char* - (Char*
']]>' Char*))
|
| [21] | CDEnd |
::= | ']]>' |
Внутри раздела CDATA только строка CDEnd распознаётся как разметка, так что амперсанд и левая
угловая скобка могут появляться в своей литеральной форме: они не должны (и не
могут) быть указаны в escape-последовательности с использованием
"<" и "&".
Раздел CDATA не может вкладываться.
Пример раздела CDATA, где "<greeting>" и "</greeting>"
распознаются как символьные данные, а не
разметка:
<![CDATA[<greeting>Hello, world!</greeting>]]> |
[Определение: Документы XML должны начинаться объявлением XML, которое специфицирует используемую версию XML.] Например, вот полный документ XML, правильно сформированный, но не правильный:
<?xml version="1.0"?> <greeting>Hello, world!</greeting> |
также и здесь:
<greeting>Hello, world!</greeting> |
Номер версии "1.0" должен использоваться для обозначения
соответствия данной версии описываемой спецификации; ошибкой является использование в
документе значения "1.0", если он не соответствует данной версии
этой спецификации. Рабочая группа XML намерена давать последующим версиям
спецификации номера, отличные от "1.0", но это намерение не
означает принятия обязательства создавать какие-либо версии XML, ни также, если
такие версии будут созданы, использовать какую-либо конкретную схему нумерации.
Поскольку будущие версии ещё не сформированы, эта конструкция даётся как
средство предоставления возможности автоматического распознавания версии и
должна, следовательно, быть включена обязательно. Процессоры могут
сигнализировать об ошибке, если получат документ, помеченный неподдерживаемой
версией.
Функцией разметки в документе XML является обязанность описывать структуру
хранения данных и логическую структуру и ассоциировать пары атрибут-значение с
их логическими структурами. XML предоставляет механизм
объявления типа документа для определения ограничений в логической структуре
и для поддержки использования предопределённых единиц хранения.
[Определение: документ XML является правильным/valid,
если он имеет ассоциированное объявление типа документа и если документ
выполняет ограничения, выраженные в нём.]
Объявление типа документа обязано появляться перед первым элементом в документе.
| [22] | prolog |
::= | XMLDecl?
Misc* (doctypedecl
Misc*)? |
| [23] | XMLDecl |
::= | '<?xml' VersionInfo
EncodingDecl?
SDDecl?
S?
'?>' |
| [24] | VersionInfo |
::= | S
'version' Eq ("'" VersionNum
"'" | '"' VersionNum
'"')/* */ |
| [25] | Eq |
::= | S?
'=' S? |
| [26] | VersionNum |
::= | ([a-zA-Z0-9_.:] | '-')+ |
| [27] | Misc |
::= | Comment |
PI | S |
[Определение: объявление типа документа XML содержит или указывает на объявления разметки, предоставляющие грамматику для класса документов. Эта грамматика известна как определение типа документа или ОТД/DTD. Объявление типа документа может указывать на внешний поднабор (особый вид внешнего экземпляра), содержащий объявления разметки, или может непосредственно содержать объявления разметки во внутреннем поднаборе, или может иметь и то, и другое. ОТД документа состоит из обоих соединённых поднаборов.]
[Определение: объявление разметки это
объявление типа элемента,
объявление списка атрибутов и объявление экземпляра,
или объявление нотации.] Эти объявления могут
полностью или частично содержаться внутри экземпляров
параметров, как описано ниже в разделах о правильном формировании и
ограничениях правильности.
Дополнительную информацию см. в 4
Физических Структурах.
| [28] | doctypedecl |
::= | '<!DOCTYPE' S Name (S ExternalID)?
S? ('[' (markupdecl
| DeclSep)*
']' S?)?
'>' |
[ОП (ограничение правильности): тип Root Element] |
| ОПС (ограничение правильной сформированности): Внешний Поднабор] | ||||
| /* */ | ||||
| [28a] | DeclSep |
::= | PEReference
| S |
[ОПС: PE/ЭП (экземпляры параметров) между объявлениями] |
| /* */ | ||||
| [29] | markupdecl |
::= | elementdecl
| AttlistDecl
| EntityDecl
| NotationDecl
| PI | Comment
|
[ОП: соответствующее объявление/вложение ЭП] |
| [ОПС: ЭП во внутреннем поднаборе] |
Обратите внимание, что можно конструировать правильно сформированные документы, содержащие doctypedecl, которое никогда не указывает ни на внешний, ни на внутренний поднабор.
Объявления разметки могут быть выполнены полностью или частично путём замещающего текста экземпляров параметров. Далее в этой спецификации продукты отдельных нетерминалов (elementdecl, AttlistDecl и т.д.) описывают объявления после всех экземпляров параметров, которые были включены.
Ссылки на экземпляры параметров распознаются в любом месте ОТД (внешних или
внутренних поднаборах и внешних экземплярах параметров), исключая литералы,
инструкции процесса, комментарии и содержимое игнорируемых условных секций (см. 3.4
Разделы Условий).
Они распознаются также в литералах значения экземпляра. Использование
экземпляров параметров во внутреннем поднаборе ограничено так, как описано ниже.
Ограничение правильности: Тип Корневого Элемента
Имя в объявлении типа документа обязано совпадать с типом элемента корневого элемента.
Ограничение правильности: Соответствующее Объявление/Вложение ЭП
Замещающий текст экземпляра параметра обязан правильно вкладываться в объявления разметки. То есть, если первый или последний символ объявления разметки (markupdecl выше по тексту) содержится в замещающем тексте для ссылки на ЭП, то оба они обязаны содержаться в одном и том же замещающем тексте.
Ограничение правильной сформированности: ЭП во Внутреннем Поднаборе
Во внутреннем поднаборе ОТД, ссылки на ЭП могут появляться только там, где могут появляться объявления разметки, но не внутри объявлений разметки. (Это не относится к ссылкам, появляющимся во внешних ЭП, или ко внешним поднаборам.)
Ограничение правильной сформированности: Внешний Поднабор
Внешний поднабор, если он имеется, обязан совпадать с продукцией для extSubset.
Ограничение правильной сформированности: ЭП между Объявлениями
Замещающий текст ссылки ЭП в DeclSep обязан совпадать с продукцией extSubsetDecl.
Подобно внутреннему поднабору, внешний поднабор и любой внешний ЭП, на который имеется ссылка в DeclSep, обязан состоять из серии полных объявлений разметки типов, допустимых нетерминальной символьной markupdecl, перемежаемых пробелами или ссылками на ЭП. Однако части содержимого внешнего поднабора или этих внешних ЭП могут условно игнорироваться путём использования конструкций разделов условий; это не допускается во внутреннем поднаборе.
| [30] | extSubset |
::= | TextDecl?
extSubsetDecl | |
| [31] | extSubsetDecl |
::= | ( markupdecl
| conditionalSect
| DeclSep)* |
/* */ |
Внешний поднабор и внешний ЭП отличаются также от внутреннего поднабора тем, что ссылки на ЭП разрешены внутри объявлений разметки, а не только между объявлениями разметки.
Пример документа XML с объявлением типа документа:
<?xml version="1.0"?> <!DOCTYPE greeting SYSTEM "hello.dtd"> <greeting>Hello, world!</greeting> |
Системный идентификатор "hello.dtd"
задаёт адрес (ссылку URI) на ОТД для данного документа.
Объявление может быть также дано локально, как в следующем примере:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE greeting [ <!ELEMENT greeting (#PCDATA)> ]> <greeting>Hello, world!</greeting> |
Если используются и внешний, и внутренний поднаборы, то считается, что внутренний поднабор появляется перед внешним поднабором. Это приводит к тому, что экземпляр и объявления списков атрибутов внутреннего поднабора имеют приоритет перед экземпляром и объявлениями внешнего поднабора.
Объявления разметки могут влиять на содержимое документа при передаче его от
процессора XML приложению; примерами могут служить
значения атрибутов по умолчанию и объявления экземпляров. Отдельное объявление
документа,
которое может появляться как компонент объявления XML, сигнализирует о том,
имеются или нет такие объявления, которые являются внешними по отношению к
экземпляру документа или экземплярам параметров.
[Определение: внешнее объявление разметки
определено как объявление разметки, появляющееся во внешнем поднаборе или в ЭП (внешнем
или внутреннем, последний включается, поскольку от непроверяющих процессоров не
требуется читать их).]
| [32] | SDDecl |
::= | S
'standalone' Eq (("'"
('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) |
[ОП: Отдельное Объявление Документа] |
В отдельном объявлении документа значение "yes" означает отсутствие внешних объявлений разметки, влияющих на информацию, предаваемую от процессора XML приложению. Значение "no" означает, что имеются или могут быть такие внешние объявления разметки. Заметьте, что отдельное объявление документа означает лишь существование внешних объявлений. Существование в документе ссылок на внешние экземпляры, если эти экземпляры объявлены внутри, не изменяет их отдельный статус.
Если внешние объявления разметки отсутствуют, отдельное объявление документа не имеет смысла. Если имеются внешние объявления разметки, но отсутствует отдельное объявление документа, принимается значение "no".
Любой документ XML, в котором standalone="no", может быть по
алгоритму конвертирован в отдельный документ, что может быть необходимо для
некоторых приложений, работающих в сети.
Ограничение правильности: Объявление Отдельного Документа
Объявление отдельного документа обязано иметь значение "no", если любое из внешних объявлений разметки содержит объявления:
атрибутов со значениями по умолчанию, если элементы, к которым применяются эти атрибуты, появляются в документе без спецификаций значений этих атрибутов, или
экземпляров, (отличных от amp, lt, gt,
apos, quot), если
ссылки на эти экземпляры
появляются в документе, или
атрибутов со значениями, являющимися субъектами нормализации, где атрибут появляется в документе со значением, которое будет меняться в результате нормализации, или
типов элементов с содержимым элемента, если пробел появляется непосредственно внутри объекта этих типов.
Пример объявления XML с объявлением отдельного документа:
<?xml version="1.0" standalone='yes'?> |
При редактировании документов XML часто бывает удобно использовать "пробельные символы" (пробелы, табуляцию и пустые строки) для разделения разметки на блоки - для удобства чтения. Такие пробелы обычно не включаются в публикуемую версию документа. С другой стороны, "значащий" пробел, который должен быть сохранён в публикуемой версии, является обычным, например, в поэзии и исходном коде.
Процессор XML обязан всегда передавать приложению все символы в документе, не являющиеся разметкой. Проверяющий процессор XML обязан также информировать приложение о том, какие из этих символов образуют пробелы, появляющиеся в содержимом элемента.
Специальный
атрибут, называемый xml:space, может быть присоединён к
элементу для того, чтобы сигнализировать о намерении сохранить пробел в данном
элементе для использования приложением. В правильных/valid
документах этот атрибут, как и некоторые другие,
обязан быть
объявлен, если он используется. Если объявлен, он обязан быть дан как
перечисляемый тип, значения которого - одно или оба
- "default" и "preserve". Например:
<!ATTLIST poem xml:space (default|preserve) 'preserve'> <!-- --> <!ATTLIST pre xml:space (preserve) #FIXED 'preserve'> |
Значение "default" сигнализирует, что для данного элемента принимаются режимы
обработки по умолчанию пробелов в данном приложении; значение "preserve"
означает намерение сохранить в приложении все пробелы. Это объявленное намерение
учитывается для применения ко всем элементам внутри содержимого элемента там,
где оно специфицировано, если только оно не переопределяется другим экземпляром
атрибута
xml:space.
Корневой элемент любого документа считается не имеющим никаких намерений относительно обработки пробелов приложением, если только он не предоставляет значение для данного атрибута или если атрибут не объявлен внутри значения по умолчанию.
Разбираемые экземпляры XML часто хранятся в компьютерных файлах, которые, по соглашению о редактировании, организуются в строки. Эти строки обычно разделяются определёнными сочетаниями символов возврата каретки (#xD) и перевода строки (#xA).
Для упрощения задач приложения, символы, передаваемые приложению процессором XML, обязаны быть таким, как если бы процессор XML нормализовал все разрывы строк во внешних разбираемых экземплярах (включая экземпляр документа) при вводе, перед разбором, транслируя обе двухсимвольные последовательности - #xD #xA и любые #xD, после которых не идёт символ #xA, в одиночный символ #xA.
При обработке документа часто используется идентификация естественного или
формального языка, на котором написано содержимое. Специальный
атрибут,
называемый xml:lang, может быть вставлен в документ, чтобы
специфицировать язык, используемый в содержимом и значениях атрибутов любого
элемента в документе XML. В правильных документах этот атрибут, как и некоторые
другие, обязан быть
объявлен, если используется.
Значениями атрибута являются идентификаторы языка, как определено в [IETF RFC 1766],
Tags for the Identification of Languages, или его преемниках в IETF Standards Track.
Примечание:
Тэги [IETF RFC
1766] состоят из двухбуквенных кодов языка, как определено в [ISO 639], из двухбуквенных кодов страны, как определено в [ISO 3166], или из идентификаторов языка, зарегистрированных Internet Assigned Numbers
Authority [IANA-LANGCODES].
Ожидается, что преемник [IETF RFC 1766] введёт трёхбуквенные коды языка для языков,
не представленных в настоящее время в [ISO
639].
(Продукты с 33 по 38 удалены.)
Например:
<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p> <p xml:lang="en-GB">What colour is it?</p> <p xml:lang="en-US">What color is it?</p> <sp who="Faust" desc='leise' xml:lang="de"> <l>Habe nun, ach! Philosophie,</l> <l>Juristerei, und Medizin</l> <l>und leider auch Theologie</l> <l>durchaus studiert mit heißem Bemüh'n.</l> </sp> |
Цель (значение атрибута), объявленная xml:lang, предполагается к
применению во всех атрибутах и содержимом элементов там, где она специфицирована,
если только не переопределена экземпляром xml:lang другого элемента
в данном содержимом.
Простое объявление xml:lang может иметь форму
xml:lang NMTOKEN #IMPLIED |
но конкретные значения по умолчанию также могут быть заданы, если это
необходимо. В сборнике французской поэзии для английских студентов, со
справочником и примечаниями на английском, атрибут xml:lang может
быть объявлен так:
<!ATTLIST poem xml:lang NMTOKEN 'fr'> <!ATTLIST gloss xml:lang NMTOKEN 'en'> <!ATTLIST note xml:lang NMTOKEN 'en'> |
[Определение: каждый документ XML содержит один или более элементов, ограниченных либо начальными и конечными тэгами, либо -для пустых элементов - тэгами пустых элементов. Каждый элемент имеет тип, идентифицируется по имени, которое иногда называется "generic identifier" (GI) - родовой идентификатор, и может иметь набор спецификаций атрибутов.] Каждая спецификация атрибутов имеет имя и значение.
| [39] | element |
::= | EmptyElemTag |
|
| STag content
ETag |
[ОПС: Совпадение типа элемента] | |||
| [ОП: Элемент верен (правильный)] |
Данная спецификация не вводит ограничений семантики, использования или (синтаксически)
именования типов и атрибутов элементов, за исключением того, что имена
начинающиеся с (('X'|'x')('M'|'m')('L'|'l')), зарезервированы для
целей стандартизации этой и последующих версий данной спецификации.
Ограничение правильной сформированности: Соответствие Типа Элемента
Name в закрывающем тэге элемента обязано соответствовать типу элемента в начальном тэге.
Ограничение правильности: Элемент верен
Элемент является верным (правильным), если имеется объявление, соответствующее elementdecl, где Name соответствует типу элемента и выдерживается одно из следующих условий:
Объявление соответствует EMPTY, и элемент не имеет содержимого.
Объявление соответствует children, и последовательность дочерних элементов принадлежит языку, генерируемому регулярным выражением в модели содержимого, при наличии возможных пробелов (символами, соответствующими нетерминальному S) между начальным тэгом и первым дочерним элементом, между дочерними элементами или между последним дочерним элементом и конечным тэгом. Обратите внимание, что раздел CDATA, содержащий только пробелы, не соответствует нетерминальному S, и , следовательно, не может появляться в этих позициях.
Объявление соответствует Mixed, и содержимое состоит из символьных данных и дочерних элементов, чьи типы соответствуют именам в модели содержимого.
Объявление соответствует ANY (Любой), и типы каждого из дочерних элементов объявлены.
[Определение: Начало каждого непустого элемента XML обозначается начальным тэгом.]
| [40] | STag |
::= | '<' Name (S Attribute)*
S?
'>' |
[ОПС: Уникальный Att Spec] |
| [41] | Attribute |
::= | Name Eq AttValue |
[ОП: Тип Значения Атрибута] |
| [ОПС: Нет Ссылок на Внешние Объекты] | ||||
| [ОПС: Нет < в Значениях Атрибутов] |
Name в начальном и конечном тэгах задаёт тип
элемента.
[Определение: Пары Name-AttValue (Имя-Значение атрибута) называются
спецификациями атрибутов элемента],
[Определение:
с Name в каждой паре, называемым именем атрибута] и
[Определение:
содержимым AttValue (текстом между ограничителями '
или ") в качестве значения атрибута.]
Обратите внимание, что порядок спецификации атрибутов в начальном тэге или в
тэге пустого элемента не имеет значения.
Ограничение правильной сформированности: Уникальный Att Spec
Имя атрибута не может появляться более одного раза в одном начальном тэге или тэге пустого элемента.
Ограничение правильности: Тип Значения Атрибута
Атрибут обязан быть объявлен; значение обязано быть того типа, который для него объявлен. (о типах атрибутов см. 3.3 Объявления Списка Атрибутов.)
Ограничение правильной сформированности: Нет Ссылок на Внешние Объекты
Значения атрибутов не могут содержать прямые или косвенные объектные ссылки на внешние объекты.
Ограничение правильной
сформированности: Нет
< в Значениях Атрибутов
Замещающий текст любого объекта, вызываемого прямо
или косвенно в значении атрибута, обязан не содержать
<.
Пример начального тэга:
<termdef id="dt-dog" term="dog"> |
[Определение: окончание каждого элемента, начатого начальным тэгом, обязано быть отмечено конечным тэгом, содержащим имя, отражающее тип элемента, как это было дано в начальном тэге:]
| [42] | ETag |
::= | '</' Name S?
'>' |
Пример конечного тэга:
</termdef> |
[Определение: Текст между начальным и конечным тэгами называется содержимым элемента:]
| [43] | content |
::= | CharData?
((element |
Reference
| CDSect |
PI | Comment)
CharData?)* |
/* */ |
[Определение: Элемент без содержимого называется
пустым.] Пустой элемент представлен либо начальным тэгом, после которого
непосредственно следует конечный тэг, либо тэгом пустого элемента.
[Определение: Тэг пустого элемента имеет особую
форму:]
| [44] | EmptyElemTag |
::= | '<' Name (S Attribute)*
S?
'/>' |
[ОПС: Уникальный Att Spec] |
Тэги пустого элемента могут использоваться для любого элемента, не имеющего
содержимого, независимо от того, объявлен он ключевым словом EMPTY или
нет.
Для целей взаимодействия тэг пустого элемента должен
использоваться (и только он должен использоваться) для тех элементов, которые
объявлены как
EMPTY.
Примеры пустых элементов:
<IMG align="left" src="./xml1/./http://www.w3.org/Icons/WWW/w3c_home" /> <br></br> <br/> |
Структура элемента документа XML может, для целей проверки, быть ограничена путём использования объявлений типа элемента и списка атрибутов. Объявление типа элемента ограничивает содержимое элемента.
Объявление типа элемента часто ограничивают типы элементов, которые могут появляться в качестве потомков элемента. Процессор XML, по выбору пользователя, может выдавать предупреждение, если в объявлении упоминается тип элемента, для которого отсутствует объявление, но это не является ошибкой.
[Определение: Объявление Типа Элемента имеет форму:]
| [45] | elementdecl |
::= | '<!ELEMENT' S Name S contentspec
S?
'>' |
[ОП: Уникальное Объявление Типа Элемента] |
| [46] | contentspec |
::= | 'EMPTY' | 'ANY' | Mixed | children
|
где Name задаёт тип объявляемого элемента.
Ограничение правильности: Уникальное Объявление Типа Элемента
Тип элемента может быть объявлен только однократно.
Примеры объявлений типов элементов:
<!ELEMENT br EMPTY> <!ELEMENT p (#PCDATA|emph)* > <!ELEMENT %name.para; %content.para; > <!ELEMENT container ANY> |
[Определение: Тип
элемента имеет содержимое элемента, если элементы данного типа обязаны
содержать только дочерние элементы (а не
символьные данные), которые могут быть, по усмотрению, разделены пробелами (символами,
соответствующими нетерминальному S).]
[Определение: В этом случае
ограничение включает модель содержимого, простую грамматику, управляющую
разрешёнными типами дочерних элементов и порядком, в котором они могут
появляться.] Грамматика построена на content particles (cp)/частицах содержимого и состоит из имён, списков выбора
частиц содержимого или списков последовательностей частиц содержимого:
| [47] | children |
::= | (choice |
seq) ('?' | '*' | '+')? |
|
| [48] | cp |
::= | (Name | choice |
seq) ('?' | '*' | '+')? |
|
| [49] | choice |
::= | '(' S? cp ( S? '|' S? cp )+ S?
')' |
/* */ |
| /* */ | ||||
| [ОП: Соответствующее Вложение Групп/Экземпляров Параметров] | ||||
| [50] | seq |
::= | '(' S? cp ( S? ',' S? cp )* S?
')' |
/* */ |
| [ОП: Соответствующее Вложение Групп/Экземпляров Параметров] |
где каждое Name - это тип элемента, который может появляться как
дочерний. Любая частица содержимого в списке
выбора может появляться в содержимом элемента в
том месте, где список выбора появляется в грамматике; частицы содержимого,
появляющиеся в списке последовательностей, обязаны появляться в
содержимом элемента в том порядке, в котором они
даны в списке. Необязательные символы после имени или списка управляют тем,
может ли элемент или частицы содержимого в списке появляться один или более раз (+),
ноль или более (*) или ноль или один (?) раз.
Отсутствие такого оператора означает, что элемент или частица содержимого
обязан/а появиться только однократно. Этот синтаксис и значения идентичны
таковым, используемым в продуктах/productions в данной спецификации.
Содержимое элемента совпадает с моделью содержимого, если, и только если, имеется возможность трассировки пути в модели содержимого, подчиняясь операторам последовательности, выбора и повторения, и каждый элемент содержимого соответствует типу элемента в модели содержимого. Для совместимости, считается ошибкой, если элемент в документе может соответствовать более чем одному появлению типа элемента в модели содержимого. Дополнительно см. E Детерминистические Модели Содержимого.
Ограничение правильности: Соответствующее вложение Групп/Экземпляров Параметров
Замещающий текст экземпляра параметра обязан быть вложен соответствующим образом с помощью групп скобок. Можно сказать , что, если закрывающие или открывающие скобки конструкций choice, seq или Mixed содержатся в замещающем тексте экземпляра параметра, то оба (тэга) обязаны содержаться в одном и том же замещающем тексте.
Для целей взаимодействия, если ссылка на экземпляр
параметра появляется в конструкции choice, seq или Mixed,
его замещающий текст должен содержать как минимум один непробельный символ, и ни
первый, ни последний непробельный символ замещающего текста не должен быть
коннектором (| или ,).
Примеры моделей содержимого элементов:
<!ELEMENT spec (front, body, back?)> <!ELEMENT div1 (head, (p | list | note)*, div2*)> <!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*> |
[Определение: Тип элемента имеет смешанное содержимое, если элементы этого типа могут содержать символьные данные, перемежаемые дочерними (необязательными) элементами.] В этом случае могут быть ограничены типы дочерних элементов, но не их порядок или количество появлений:
| [51] | Mixed |
::= | '(' S? '#PCDATA'
(S? '|' S? Name)* S? ')*'
|
|
| '(' S? '#PCDATA' S? ')'
|
[ОП: Соответствующее Вложение Групп/Экземпляров Параметров] | |||
| [ОП: Отсутствие Дубликатов Типов] |
Name задаёт тип элемента, который может появляться в качестве потомка. Ключевое слово #PCDATA исторически произошло от термина "parsed character data/разбираемые символьные данные."
Ограничение правильности: Отсутствие Дубликатов Типов
Одно и то же имя обязано не появляться более чем однократно в одном объявлении смешанного содержимого.
Примеры объявлений смешанного содержимого:
<!ELEMENT p (#PCDATA|a|ul|b|i|em)*> <!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* > <!ELEMENT b (#PCDATA)> |
Атрибуты используются для ассоциирования пар имя-значение с элементами. Спецификации атрибутов могут появляться только в начальных тэгах и тэгах пустых элементов; поэтому продукции/productions, используемые для их распознавания, появляются в разделе 3.1 Начальные и конечные тэги, тэги пустых элементов. Объявления списков атрибутов могут использоваться:
Для определения набора атрибутов, относящихся к данному типу элемента.
Для установки ограничений типа для этих атрибутов.
Для предоставления атрибутам значений по умолчанию.
[Определение: Объявления списка атрибутов специфицируют имя, тип данных и значение по умолчанию (если имеется) каждого атрибута, ассоциированного с данным типом элемента:]
| [52] | AttlistDecl |
::= | '<!ATTLIST' S Name AttDef* S?
'>' |
| [53] | AttDef |
::= | S
Name S AttType
S DefaultDecl |
Name в правиле AttlistDecl - это тип элемента. По выбору пользователя, процессор XML может выдавать предупреждение, если атрибуты объявляются для типа элемента, который сам не определён, но это не является ошибкой. Name в правиле AttDef - это имя атрибута.
Если для данного типа элемента предоставлено более одного AttlistDecl, то их содержимое объединяется. Если для одного атрибута данного типа элемента предоставлено более одного определения, то первое объявление подключается, а остальные игнорируются. Для целей взаимодействия создатели ОТД могут избрать предоставление максимум одного объявления списка атрибутов для данного типа элемента, максимум одного определения атрибута для данного имени атрибута в объявлении списка атрибутов и минимум одного определения атрибута в каждом объявлении списка атрибутов. Для целей взаимодействия, процессор XML может, по выбору пользователя, выдавать предупреждение, если даётся более одного объявления списка атрибутов для данного типа элемента или дано более одного определения атрибута для данного атрибута, но это не является ошибкой.
Есть три разновидности типов атрибутов XML: string/строковой, набор лексемных типов и перечисляемые типы. Тип string может принимать в качестве значения любые символьные строки; лексемные типы имеют различные лексические и семантические ограничения. Ограничения правильности, отмеченные в грамматике, применяются после нормализации значения атрибута, как описано в 3.3 Объявлении Списка Атрибутов.
| [54] | AttType |
::= | StringType
| TokenizedType
| EnumeratedType
|
|
| [55] | StringType |
::= | 'CDATA' |
|
| [56] | TokenizedType |
::= | 'ID' |
[ОП: ID] |
| [ОП: Один ID на Тип Элемента] | ||||
| [ОП: Значение по умолчанию ID Атрибута] | ||||
| 'IDREF' |
[ОП: IDREF] | |||
| 'IDREFS' |
[ОП: IDREF] | |||
| 'ENTITY' |
[ОП: Имя Экземпляра] | |||
| 'ENTITIES' |
[ОП: Имя Экземпляра] | |||
| 'NMTOKEN' |
[ОП: Лексема Имени] | |||
| 'NMTOKENS' |
[ОП: Лексема Имени] |
Значения типа ID обязаны соответствовать продукции Name. Имя обязано не появляться более одного раза в документе XML как значение данного типа; т.е. значения ID обязаны уникально идентифицировать элементы.
Ограничение правильности: Один ID на Тип Элемента
Ни один тип элемента не может иметь более одного ID специфицированного атрибута.
Ограничение правильности: Значение по умолчанию ID Атрибута
ID атрибута обязан иметь объявленное значение по умолчанию - #IMPLIED или #REQUIRED.
Ограничение правильности: IDREF
Значения типа IDREF обязаны соответствовать продукции Name, а значения типа IDREFS обязаны соответствовать Names/Именам; каждое Name обязано соответствовать значению атрибута ID некоторого элемента документа XML; т.е. значения IDREF обязаны соответствовать значению некоторого атрибута ID.
Ограничение правильности: Имя Экземпляра
Значения типа ENTITY обязаны соответствовать продукции Name, значения типа ENTITIES обязаны соответствовать Именам; каждое Name обязано соответствовать имени неразбираемого экземпляра, объявленного в ОТД.
Ограничение правильности: Лексема Имени
Значения типа NMTOKEN обязаны соответствовать продукции Nmtoken; значения типа NMTOKENS обязаны соответствовать Nmtokens.
[Определение: Enumerated attributes/Перечисляемые Атрибуты могут принимать одно значение из списка значений, предоставляемых в объявлении]. Имеется два вида перечисляемых типов:
| [57] | EnumeratedType |
::= | NotationType
| Enumeration |
|
| [58] | NotationType |
::= | 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
|
[ОП: Атрибуты Нотации] |
| [ОП: Одна Нотация на Тип Элемента] | ||||
| [ОП: Нет Нотации в Пустом Элементе] | ||||
| [59] | Enumeration |
::= | '(' S? Nmtoken
(S? '|' S? Nmtoken)*
S?
')' |
[ОП: Перечисление] |
Атрибут NOTATION идентифицирует нотацию, объявленную в ОТД с ассоциированными системными и/или публичными идентификаторами, используемыми для интерпретации элемента, к которому атрибут присоединён.
Ограничение правильности: Атрибуты Нотации
Значения этого типа обязаны соответствовать одному из имён нотации, включённому в объявление; все имена нотации в объявлении обязаны быть объявлены.
Ограничение правильности: Одна Нотация на Тип Элемента
Ни один тип элемента не может иметь более одного специфицированного атрибута NOTATION.
Ограничение правильности: Нет Нотации в Пустом Элементе
Для обеспечения совместимости, атрибут типа NOTATION обязан не быть объявленным в элементе, объявленном как EMPTY.
Ограничение правильности: Перечисление
Значения этого типа обязаны с одной из лексем Nmtoken в объявлении.
Для целей взаимодействия, одно и то же Nmtoken не должно появляться более одного раза в типах перечисляемых атрибутов одного типа элемента.
Объявление атрибута предоставляет информацию о том, необходимо ли наличие атрибута и, если нет, как процессор XML должен реагировать, если объявленный атрибут отсутствует в документе.
| [60] | DefaultDecl |
::= | '#REQUIRED' | '#IMPLIED' |
|
| (('#FIXED' S)? AttValue) |
[ОП: Требуемый Атрибут] | |||
| [ОП: Законное Значение по Умолчанию Атрибута] | ||||
| [ОПС: Нет < в Значениях Атрибута] | ||||
| [ОП: Значения по Умолчанию Фиксированного Атрибута] |
В объявлении атрибута, #REQUIRED означает, что атрибут всегда обязан
быть предоставлен, #IMPLIED - что значение по умолчанию не
предоставляется.
[Определение: Если в объявлении не указано ни #REQUIRED,
ни #IMPLIED, тогда значение AttValue содержит объявленное значение default;
ключевое слово #FIXED устанавливает, что атрибут обязан всегда иметь
значение по умолчанию. Если значение по умолчанию объявляется тогда, когда
процессор XML вычислил отсутствующий атрибут, поведение будет таким, как если бы
атрибут был представлен с объявленным значением по умолчанию.]
Ограничение правильности: Атрибут Required/Необходимый
Если объявлением по умолчанию является ключевое слово #REQUIRED, тогда атрибут обязан быть специфицирован для всех элементов типа из объявления списка атрибутов.
Ограничение правильности: Законное Значение Атрибута по умолчанию
Объявленное значение по умолчанию обязано соответствовать лексическим ограничениям объявляемого типа атрибута.
Ограничение правильности: Значение по умолчанию Фиксированного Атрибута
Если атрибут имеет значение по умолчанию, объявленное при помощи ключевого слова #FIXED, то экземпляры этого атрибута обязаны совпадать со значением по умолчанию.
Примеры объявлений списка атрибутов:
<!ATTLIST termdef
id ID #REQUIRED
name CDATA #IMPLIED>
<!ATTLIST list
type (bullets|ordered|glossary) "ordered">
<!ATTLIST form
method CDATA #FIXED "POST"> |
Прежде чем значение атрибута передаётся приложению или проверяется на правильность, процессор XML обязан нормализовать значение атрибута путём применения к нему нижеприведённого алгоритма или путём использования некоторых других методов так, чтобы значение, передаваемое приложению, было тем же, что и произведённое алгоритмом.
Все разрывы строки должны быть нормализованы при вводе до #xA, как описано в разделе 2.11 Обработка Конца Строки, чтобы в дальнейшем алгоритм оперировал текстом, нормализованным таким способом.
Начать с нормализованного значения, состоящего из пустой строки.
Для каждого символа, ссылки на объект или мнемоники символа в ненормализованном значении атрибута - с первого до последнего, выполнить следующее:
Для мнемоники символа - присоединить мнемонику к нормализованному значению.
Для ссылки на объект - рекурсивно применять шаг 3 данного алгоритма к замещающему тексту объекта.
Для пробельного символа (#x20, #xD, #xA, #x9) - присоединить символ пробела (#x20) к нормализованному значению.
Для других символов - присоединить символ к нормализованному значению.
Если тип атрибута - не CDATA, то процессор XML обязан далее обрабатывать нормализованное значение атрибута, отбрасывая ведущие и ведомые пробелы (#x20) и заменяя последовательности пробельных символов (#x20) одиночным символом пробела (#x20).
Обратите внимание, что ненормализованное значение атрибута содержит ссылки-мнемоники на пробельный символ, отличный от #x20, а нормализованное значение содержит ссылку на сам символ (#xD, #xA или #x9). Это контрастирует с тем случаем, когда ненормализованное значение содержит символ пробела (не ссылку), который заменяется на символ пробела (#x20) в нормализованном значении, и также с тем случаем, когда ненормализованное значение содержит ссылку на экземпляр, замещающий текст которого содержит символ пробела; обрабатываемый рекурсивно, символ пробела заменяется в нормализованном значении на пробел (#x20).
Все атрибуты, для которых не было прочитано объявлений, должны рассматриваться непроверяющим процессором как объявленный CDATA.
Далее идут примеры нормализации атрибута.
В данных объявлениях:
<!ENTITY d "
"> <!ENTITY a "
"> <!ENTITY da "
"> |
спецификации атрибутов в левой колонке ниже могут быть нормализованы до
символьных последовательностей в средней колонке, если атрибут a
объявлен NMTOKENS, и до последовательностей в правой колонке, если a
объявлен как CDATA.
| Спецификация атрибута | a является NMTOKENS | a является CDATA | |
|---|---|---|---|
|
x y z |
#x20 #x20 x y z | |
|
A #x20 B |
#x20 #x20 A #x20 #x20 B #x20 #x20 | |
|
#xD #xD A #xA #xA B #xD #xA |
#xD #xD A #xA #xA B #xD #xD |
Заметьте, что последний пример неверен (но правильно сформирован), если a
объявлен типом NMTOKENS.
[Определение: Разделы условий являются частью внешнего поднабора объявления типа документа и включены или исключены из логической структуры ОТД, базирующейся на ключевом слове, которое им управляется.]
| [61] | conditionalSect |
::= | includeSect
| ignoreSect |
|
| [62] | includeSect |
::= | '<![' S? 'INCLUDE' S? '[' extSubsetDecl
']]>' |
/* */ |
| [ОП: Соответствующее Вложение Секции Условий/ЭП] | ||||
| [63] | ignoreSect |
::= | '<![' S? 'IGNORE' S? '[' ignoreSectContents*
']]>' |
/* */ |
| [ОП: Соответствующее Вложение Секции Условий/ЭП] | ||||
| [64] | ignoreSectContents |
::= | Ignore
('<![' ignoreSectContents
']]>' Ignore)* |
|
| [65] | Ignore |
::= | Char* - (Char*
('<![' | ']]>') Char*)
|
Ограничение правильности: Соответствующее вложение Секции Условий/Экземпляров Параметров
Если "<![", "[" или
"]]>" секции условий содержится в замещающем тексте для ссылки
экземпляра параметра, то все они обязаны содержаться в одном замещающем тексте.
Подобно внешним и внутренним поднаборам ОТД, секция условий может содержать одно или более полных объявлений, комментарии, инструкции процесса или вложенные секции условий, перемежаемые пробелами.
Если ключевое слово в секции условий - INCLUDE, тогда содержимое
секции условий является частью ОТД. Если ключевое слово в секции условий - IGNORE,
тогда содержимое секции условий не является логической частью ОТД. Если секция
условий с ключевым словом INCLUDE появляется внутри другой секции условий
с ключевым словом IGNORE, то обе секции - внешняя и внутренняя -
игнорируются. Содержимое игнорируемой секции условий разбирается с
игнорированием всех символов после "[" с последующим ключевым
словом, исключая начало "<![" и концы "]]>"
секций условий,
пока не будет достигнут соответствующий конец секции условий. Ссылки экземпляра
параметра не распознаются этим процессом.
Если ключевое слово секции условий является ссылкой экземпляра параметра, то ЭП обязан быть замещён его содержимым до того, как процессор определит, включать или игнорировать секцию условий.
Пример:
<!ENTITY % draft 'INCLUDE' > <!ENTITY % final 'IGNORE' > <![%draft;[ <!ELEMENT book (comments*, title, body, supplements?)> ]]> <![%final;[ <!ELEMENT book (title, body, supplements?)> ]]> |
Определение: Документ XML может состоять из одной или более единиц хранения. Они называются экземплярами; они имеют содержимое и все (исключая экземпляр документа и внешний поднабор ОТД) идентифицируются по name\имени экземпляра.] Каждый документ XML имеет один экземпляр, называемый экземпляр документа, который служит в качестве стартовой точки для процессора XML и может содержать весь документ.
Экземпляры могут быть разбираемыми и неразбираемыми. [Определение: Содержимое разбираемого экземпляра называется его замещающим текстом; этот текст считается неотъемлемой частью документа.]
[Определение: Неразбираемый экземпляр это ресурс, чьё содержимое может, или может не быть, текстом, и, если это текст, может не быть XML. Каждый неразбираемый экземпляр имеет ассоциированную нотацию, идентифицируемую по имени. Помимо требования к процессору XML сделать идентификаторы экземпляра и нотации доступными приложению, XML не накладывает никаких ограничений на содержимое неразбираемых экземпляров.]
Разбираемые экземпляры вызываются по имени с использованием ссылок экземпляра; неразбираемые экземпляры - по имени, заданному в значении атрибутов ENTITY или ENTITIES.
[Определение: General
entities/Общие экземпляры это экземпляры для использования внутри
содержимого документа. В этой спецификации ОЭ иногда называются
неквалифицированным термином экземпляр, если это не приводит к
неоднозначности.]
[Определение: Экземпляры параметров
это разбираемые экземпляры для использования внутри ОТД.] Эти два типа
экземпляров используют разные формы ссылок и распознаются в различных контекстах.
Следовательно, они занимают разные пространства имён; экземпляр параметра и
общий экземпляр с одни именем - это два разных экземпляра.
[Определение: Ссылка символа ссылается на специфический символ в наборе символов ISO/IEC 10646, например, ссылка на символ, не доступный напрямую из устройства ввода.]
| [66] | CharRef |
::= | '&#' [0-9]+ ';' |
|
| '&#x' [0-9a-fA-F]+ ';' |
[ОПС: Допустимый Символ] |
Ограничение правильной сформированности: Допустимый Символ
Символ, имеющий символьную ссылку на себя, обязан соответствовать продукции Char.
Если ссылка символа начинается с "&#x", цифры и буквы вплоть
до конечного ; дают 16-ричное представление кодовой точки входа
символа ISO/IEC 10646. Если она начинается просто с "&#", то
цифры вплоть до конечного ; дают 10-ричное представление кодовой
точки входа символа.
[Определение: Ссылка экземпляра ссылается на
содержимое именованного экземпляра.] [Определение: Ссылки
на общие разбираемые экземпляры используют амперсанд (&) и
точку с запятой (;) в качестве разделителей.]
[Определение: Ссылка экземпляра параметра
использует знак процента (%) и точку с запятой (;) в
качестве разделителей.]
| [67] | Reference |
::= | EntityRef
| CharRef |
|
| [68] | EntityRef |
::= | '&' Name
';' |
[ОПС: Экземпляр Объявлен] |
| [ОП: Экземпляр Объявлен] | ||||
| [ОПС: Разбираемый Экземпляр] | ||||
| [ОПС: Нет Рекурсии] | ||||
| [69] | PEReference |
::= | '%' Name
';' |
[ОП: Экземпляр Объявлен] |
| [ОПС: Нет Рекурсии] | ||||
| [ОПС: В ОТД] |
Ограничение правильной сформированности: Entity Declared/Экземпляр Объявлен
В документе без ОТД, документе только с одним внутренним поднабором ОТД, не
содержащим ссылок экземпляров параметров, или в документе со
"standalone='yes'", для ссылки экземпляра, которая не появляется
внутри внешнего поднабора или экземпляра параметра, Name, заданное в ссылке экземпляра, обязано
совпадать с именем в
объявлении
экземпляра, который(ое?) не появляется внутри внешнего
поднабора или экземпляра параметра, за исключением того, что правильно
сформированный документ не должен объявлять следующие экземпляры: amp, lt, gt,
apos, quot. Объявление общего экземпляра обязано
предшествовать любой ссылке на него, которая появляется в значении по
умолчанию в объявлении списка атрибутов.
Учтите, что, если экземпляры объявляются во внешнем поднаборе или во внешних экземплярах параметров, то непроверяющий процессор не обязательно читает и обрабатывает их объявления; для таких документов правилом является то, что экземпляр, который обязан быть объявлен, является правильно сформированным ограничением только тогда, когда standalone='yes'.