Технология 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).

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