Технология XSLT - [20]

Шрифт
Интервал

.

Базовые продукции XML

Теперь, когда мы разобрали модель символов Unicode, которая используется в XML, можно дать EBNF-определения основных базовых конструкций языка — символов, имен, именных токенов и их последовательностей.

В XML можно использовать любые символы Unicode, кроме суррогатных блоков и символов с кодами >#xFFFE и >#xFFFF:

>[2] Char ::= #x9 | #xA | #xD | [#x20 - #xD7FF]

>             | [#хЕ000 - #xFFFD) | [#х10000 - #x10FFFF]

Для удобства все множество символов разделено на несколько категорий.

□ Буквы, которые соответствуют продукции >Letter, в свою очередь, делятся на основные (>BaseChar) и идеографические (>Ideographic). Буквы относятся к алфавитам, из которых состоят слова различных языков. Продукции букв чрезвычайно просты, но громоздки, поскольку перечисляют символы различных алфавитов. Читатель может легко найти их в технической рекомендации XML по адресу http://www.w3.org/TR/REC-xml.html под номерами [84] (>Letter), [85] (>BaseChar) и [86] (>Ideographic).

□ Цифры, которые составляют в различных культурах числа. Цифры определяются продукцией >Digit с номером [88].

□ Модифицирующие символы (>CombiningChar), которые изменяют написание или звучание символов, как, например, #x308 — двойная точка сверху символа, которая используется для обозначения умляута в немецком и для замены >e на в русском языке. Продукция >CombiningChar имеет номер [87].

□ Символы расширения (>Extender). Продукция >Extender имеет порядковый номер [89].

Следующей простейшей символьной конструкцией является пробельное пространство >S. Приведем еще раз его продукцию:

>[3] S ::= (#х9 | #хА | #xD | #x20)+

Во многих продукциях XML-языков используются имена. Например, имена даются элементам, атрибутам, переменным XPath и так далее. В основе определения имени лежат именные символы >NameChar:

>[4] NameChar ::= Letter | Digit | CombiningChar | Extender

>                 | '.' | '-' | '_' | ':'

Имя начинается либо буквой, либо символами ">_" или ">:" и состоит из последовательности именных символов:

>[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 и некоторым дополнительным ограничениям, например:


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Тотальное превосходство

Художник? любовник? убийца? адепт тайного знания?.. Герой романа знает о себе только одно, он должен добиться тотального превосходства во всем…Интеллектуальный триллер, колеблющийся между «Американской мечтой» Нормана Мейлера и «Шатунами» Юрия Мамлеева.Новый блестящий талант в «Мастер серии».


Наркокурьер Лариосик

Кинематографическая природа остросюжетной прозы Григория Ряжского очевидна — как несомненны и ее чисто литературные достоинства. Мир страшен и кровав — и страшнее всего, пожалуй, в заглавной повести «Наркокурьер Лариосик», — но и не восхититься его красотой нельзя.В литературу — с парадного подъезда престижной серии — входит зрелый мастер.


Месторождение ветра

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


Приемы создания интерьеров различных стилей

Книга по созданию трехмерных проектов интерьеров при помощи популярного редактора трехмерной графики 3ds Max позволит каждому, кто хочет заняться моделированием 3D-интерьеров, найти необходимую информацию для воплощения идеи в жизнь. Описывается моделирование элементов и стили оформления интерьеров, работа с материалами и текстурами, способы повышения реалистичности изображений, визуализация. Рассматриваются особенности создания интерьеров в различных стилях: минимализм, ренессанс, барокко, античный, рококо, хай-тек, техно и др.