XML02

advertisement
XML и XSLT
(2)
Матросов Александр Васильевич
Санкт-Петербургский
государственный университет
Логическая и физическая структуры
•
•
•
•
•
•
•
•
•
•
Extensible Markup Language (XML) 1.0 (Third Edition) W3C
Recommendation 04 February 2004 (1998, 2000)
Объект данных является XML-документом, если он формальнокорректен в соответствии со спецификацией консорциума WWW
Формально корректный XML-документ дополнительно МОЖЕТ быть
действительным, если он удовлетворяет дополнительным
ограничениям
Каждый XML-документ имеет логическую и физическую структуры
Физически состоит из сущностей, которые сами могут ссылаться на
другие сущности. Сущность может содержать либо текстовые, либо
двоичные данные.
Сущность определяет некий универсальный способ ссылок на единицу
хранимых данных в XML-документе
Каждая сущность идентифицируется в документе своим именем
Корневая сущность, или сущность документа, это та сущность, которая
служит корнем дерева сущностей, передается синтаксическому
анализатору и не имеет имени
Логически состоит из объявлений, элементов, комментариев,
символьных ссылок и инструкций по обработке, которые явным
образом указываются в документе с помощью разметки
Логическая и физическая структуры должны быть правильно вложены в
соответствии с определением формальной корректности
2
Составляющие компоненты XML-документа
•
Разметка:
–
–
–
–
–
–
–
–
–
–
•
•
начальный тег элемента (<name>)
конечный тег элемента (</name>)
тег пустого элемента (<empty attr="value" />)
ссылка на сущность (&имя;)
ссылка на символ (&#десят_цифры; или &#xшестнад_цифры;)
комментарий ('<!--' ((Char - '-') | ('-' (Char - '-')))* '-->')
секция CDATA (<![CDATA[...]]>)
объявление типа XML-документа
инструкция по обработке (<?имя симв_данные?>) (имя не равно
xml)
объявление xml (<?xml ...?>)
Не относящийся к разметке текст называется символьными
данными
Пробельные символы (пробел, возврат каретки, перевод строки
и табуляция) (регулируются атрибутом xml:space
(default|preserve))
3
Формальная корректность (1)
•
Текстовый объект является формально корректным XML-документом,
если:
1.
2.
3.
•
•
(1) document ::= prolog element Misc*
Пролог состоит из
–
–
–
•
•
Рассматриваемый как целое, он соответствует продукции (правилу)
document
Соответствует всем ограничениям формальной корректности,
определенным в спецификации
Каждая из разобранных сущностей, явно или косвенно ссылаемая в
документе, является формально корректной
необязательного xml-объявления
<?xml version="1.0" encoding="utf-8|utf-16"
standalone="yes|no"?>
необязательного блока инструкций по обработке, комментариев и
пропусков
необязательного объявления типа документа <!DOCTYPE>, за которым
может следовать необязательный блок инструкций по обработке,
комментариев и пропусков
За прологом следует один корневой элемент, который может включать
обычный текст, другие элементы, символьные ссылки, ссылки на
сущности, комментарии, инструкции по обработке и секции
символьных неразмеченных данных (<![CDATA[...]]>)
Завершает документ необязательный блок инструкций по обработке,
комментариев и пропусков
4
Формальная корректность (2)
•
•
•
(2) Ограничения формальной корректности по-существу определяют
синтаксические правила языка XML
(3) Разобранная сущность формально корректна, если ее содержимое
соответствует продукции content (обычный текст, элементы, символьные
ссылки, ссылки на сущности, комментарии, инструкции по обработке и секции
символьных неразмеченных данных). Это означает, что когда в документ
вставлено содержимое всех разобранных сущностей, то он сам будет
формально корректным.
<?xml version = "1.0" standalone="yes"?>
<DOCUMENT>
<CUSTOMER>
<NAME>
<LAST_NAME>Smith</LAST_NAME>
<FIRST_NAME>Sam</FIRST_NAME>
</NAME>
<DATE>October 15, 2003</DATE>
<ORDERS>
<ITEM>
<PRODUCT>Tomatoes</PRODUCT>
<NUMBER>8</NUMBER>
<PRICE>$1.25</PRICE>
</ITEM>
<ITEM>
<PRODUCT>Oranges</PRODUCT>
<NUMBER>24</NUMBER>
<PRICE>$4.98</PRICE>
</ITEM>
</ORDERS>
5
</CUSTOMER>
</DOCUMENT>
Элементы и атрибуты
•
Имена тегов:
–
–
–
•
•
XML чувствителен к регистру
Элемент создается заданием начального и конечного тега (имена в них
одинаковые!)
–
–
•
•
•
<GREETING>HELLO</GREETING>
Содержимое соответствует правилу content
Пустой элемент <GREETING TEXT="Hello"/>
Корневой элемент единствен и содержит все остальные элементы XMLдокумента
Элемент может иметь атрибуты, определяющие дополнительные данные для
элемента
–
–
–
–
–
–
–
•
Начальный символ – буква, символ подчеркивания или двоеточие
Далее – буквы, цифры, символ подчеркивания, дефис, точки и двоеточие
Двоеточие лучше не использовать – применяется для отделения пространства имен
Задаются в виде имя_атрибута=значение в начальном теге элемента
Значение атрибута задается обязательно в кавычках или апострофах
<GREETING lang="en">HELLO</GREETING>
Правило задания имен атрибутов как и для имен тегов
В одном теге имена атрибутов уникальны!
<GREETING lang="us" lang="en">HELLO</GREETING>
Значения атрибутов всегда строковые <circle x="10.1" y="1.1"
radius="17.1" />
Атрибут общего назначения xml:lang указывает применяемый язык для
содержимого документа и значений атрибутов
6
Пространства имен XML (1)
•
•
•
•
Что делать, если определенные разными разработчиками имена тегов
совпадают, а словари следует использовать совместно (XHTML и MathML)?
Пространства имен решают эту проблему (к именам атрибутов и тегов
добавлять префикс, отделяемый двоеточием)
Пространство имен определяется атрибутом xmlns:<prefix>=уникальное_имя
(обычно URN (URL или URI))
<book:library xmlns:book="http:/www.amazing.com/spec">
<book:book>
<book:title>
Reak World XML
</book:title>
<book:book>
</book:library>
Совмещение нескольких пространств имен
<book:library xmlns:book="http:/www.amazing.com/spec"
xmlns:steve="http:/www.star.com/steve">
<book:book>
<book:title>
Reak World XML
</book:title>
<steve:review steve:ID="100003">
OK
</steve:review>
<book:book>
</book:library>
7
Пространства имен XML (2)
•
•
•
Локальное пространство имен
<book:library xmlns:book="http:/www.amazing.com/spec">
<book:book>
<book:title>
Reak World XML
</book:title>
<steve:review xmlns:steve="http:/www.star.com/steve"
steve:ID="100003">
OK
</steve:review>
<book:book>
</book:library>
Два пространства имен зарезервированы: xml и xmlns
Пространства имен, заданные по умолчанию, задаются атрибутом xmlns без
префикса (и все теги этого пространства имен также без префиксов)
<library xmlns="http:/www.amazing.com/spec"
xmlns:steve="http:/www.star.com/steve">
<book>
<title>
Reak World XML
</title>
<steve:review steve:ID="100003">
OK
</steve:review>
<book>
</library>
8
Download