Технология XSLT - страница 25
>
> | '.' | '-' | '_' | ':'
Имя начинается либо буквой, либо символами ">_
" или ">:
" и состоит из последовательности именных символов:
>[5] Name ::= (Letter | '_' | ' :') (NameChar*)
В некоторых правилах XML используется последовательность имен, соответствующая продукции >Names
:
>[6] Names ::= Name (S Name)*
Кроме того, техническая рекомендация определяет так называемый именной токен >NmToken
— строку, которая может состоять из одного или более именных символов и последовательности таких токенов, >NmTokens
.
>[7] NmToken ::= (NameChar)+
>[8] NmTokens ::= NmToken (S NmToken)*
Символьные данные могут заключаться в кавычки для того, чтобы формировать литералы. В XML определены следующие литералы: значение сущности (>EntityValue
), значение атрибута (>AttValue
), системный литерал (>SystemLiteral
), а также >PubidLiteral
— литерал, определяющий публичный идентификатор ресурса (см. раздел "Определение сущности" данной главы):
>[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
и >AttValue
допустимо использовать продукции сущностей (>PEReference
, >Reference
). Это означает, что при определении значений сущностей и атрибутов можно использовать ссылки на сущности, например, в элементе заданном как:
>
атрибут >title
имеет значение крейсер >"Аврора"
. Двойные кавычки были определены посредством встроенных сущностей.
Символьные данные, которые задаются продукцией >CharData
, могут состоять из любых символов, кроме символов "><
" и ">&
", которые используются в XML в качестве управляющих. >CharData
главным образом используется в секциях >CDATA
, и, соответственно, не может содержать терминирующую последовательность ">]]>
".
>[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
XML-документы с точки зрения спецификации
Теперь, когда мы разобрали практически все структурные единицы XML, осталось определить стандартным образом синтаксис для самих XML-документов. Им соответствует продукция >document
:
>[1] document ::= prolog element Misc
Итак, XML-документ состоит из пролога, единственного корневого элемента и дополнительного нетерминала >Misc
, который может включать инструкции по обработке, комментарии и пробельные символы:
>[27] Misc ::= Comment | PI | S
Остановимся отдельно на прологе XML-документа. Пролог состоит из необязательной декларации XML (>XMLDecl
), необязательной декларации типа документа (>doctypedecl
), инструкций, комментариев и пробельных символов:
>[22] prolog ::= XMLDeci? Misc* (doctypedecl Misc*)?
В зависимости от того, насколько строго документы соответствуют спецификации XML и собственным DTD-объявлениям, они могут быть хорошо оформленными (well-formed) и правильными (valid).
Хорошо оформленный документ соответствует всем синтаксическим правилам XML и некоторым дополнительным ограничениям, например:
□ имя открывающего тега элемента должно совпадать с именем его закрывающего тега;
□ имена атрибутов элемента не должны повторяться;
□ в значении атрибута нельзя использовать символ "><
". Этот символ должен обязательным образом заменяться на сущность;
□ сущности должны быть определены до использования;
□ сущности-параметры могут быть использованы только в блоках DTD;
□ документ должен иметь единственный корневой элемент, содержащий все остальные элементы и символьные данные этого документа. Вне корневого документа допускаются только комментарии, инструкции по обработке, декларация XML и блок DTD.
Правильные документы должны быть хорошо оформленными, и при этом их логическая структура должна удовлетворять объявлениям, которые содержатся в декларации типа документа (DTD).
Для того чтобы документ мог быть обработан различными приложениями стандартным образом, он должен как минимум быть хорошо оформленным. Выполнение этого требования означает, что документ корректен с точки зрения синтаксиса, и для его логического представления можно использовать любую из стандартных моделей. Например, если в элементе документа приведены два атрибута с одинаковыми именами, возможно, с точки зрения автора, это логично и корректно, однако, стандартными средствами такой документ обработать не удастся.