Стивен Холзнер - XSLT
<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
<MESSAGE>
Welcome to the wild and woolly world of XML.
</MESSAGE>
</DOCUMENT>
Вот как работает этот документ: я начал с инструкции обработки XML <?xml version="1.0" encoding="UTF-8"?> (все инструкции обработки XML начинаются с <? и заканчиваются ?>), означающей, что используется XML версии 1.0, единственная определенная сейчас версия, и кодировка символов UTF-8, то есть используется восьмибитная сжатая версия Unicode:
<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
<MESSAGE>
Welcome to the wild and woolly world of XML.
</MESSAGE>
</DOCUMENT>
Затем я создаю новый тег (tag) с именем <DOCUMENT>. Для тега можно использовать любое имя, не обязательно DOCUMENT; необходимо только, чтобы имя начиналось с буквы или символа подчеркивания (_), а последующими символами были буквы, цифры, символы подчеркивания, точки (.) или дефисы (-), но не пробелы. В XML теги всегда начинаются с < и заканчиваются >.
Документы XML образованы из элементов XML; последние начинаются с открывающего тега, такого как <DOCUMENT> (за которым следует содержимое (content) элемента, если оно есть, — например, текст или другие элементы), и завершаются закрывающим тегом, парным тегу открытия (он начинается с символов </ — например, </DOCUMENT>). Весь документ целиком, за исключением инструкций обработки, заключается в один элемент, называемый корневым (root) элементом; в нашем случае это элемент <DOCUMENT>:
<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
.
.
.
</DOCUMENT>
Теперь я добавлю новый элемент, <GREETING>, в который заключено текстовое содержимое (здесь «Hello From XML», привет от XML) этого XML-документа:
<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
.
.
.
</DOCUMENT>
После этого я могу добавить еще один элемент, <MESSAGE>, также образующий оболочку над текстовым содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
<MESSAGE>
Welcome to the wild and woolly world of XML.
</MESSAGE>
</DOCUMENT>
Сейчас корневой элемент <DOCUMENT> содержит два элемента — <GREETING> и <MESSAGE>, в каждом из которых имеется текст. Таким образом, я создал новый документ XML.
Однако следует добавить еще кое-что: документы XML могут быть также хорошо сформированными (well-formed) и допустимыми (valid).
Хорошо сформированные документы XML
Для того чтобы быть хорошо сформированным, документ XML должен следовать правилам синтаксиса, установленным для XML консорциумом W3C в рекомендации XML 1.0 (которую можно найти по адресу www.w3.org/TR/REC-xml). Неформально «хорошо сформированный» означает главным образом то, что документ должен содержать один или более элементов, и один из них, корневой, обязан включать в себя все остальные элементы. Кроме того, для каждого элемента должны соблюдаться правила вложенности. Например, следующий документ не будет хорошо сформированным, потому что закрывающий тег </GREETING> встречается после открывающегося тега <MESSAGE> для следующего элемента:
<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
<GREETING>
Hello From XML
<MESSAGE>
</GREETING>
Welcome to the wild and woolly world of XML.
</MESSAGE>
</DOCUMENT>
Допустимые документы XML
Большинство браузеров XML проверяют документы на то, являются ли они хорошо сформированными. Некоторые браузеры могут также проверить, допустим ли документ. Документ XML допустим (valid), если с ним связаны объявление типа документа (DTD — Document Type Declaration) или схема XML, и если документ удовлетворяет этим DTD или схеме. То есть DTD или схема задает набор правил для внутренней целостности самого документа, и если браузер может подтвердить, что документ удовлетворяет этим правилам, он является допустимым.
XML-схемы завоевывают популярность, и значительно большая поддержка схем присутствует в XSLT 2.0 (фактически поддержка XML-схем — одна из побудительных сил к переходу на XSLT 2.0), однако объявления DTD все еще остаются наиболее часто используемым средством проверки на допустимость. Объявления DTD могут быть сохранены в отдельном файле или в самом документе в элементе <!DOCTYPE>. Ниже этот элемент добавлен в разработанный нами пример:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="first.css"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (GREETING, MESSAGE)>
<!ELEMENT GREETING (#PCDATA)>
<!ELEMENT MESSAGE (#PCDATA)>
]>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
<MESSAGE>
Welcome to the wild and woolly world of XML
</MESSAGE>
</DOCUMENT>
В этой книге не рассматриваются объявления DTD, но из них видно, что элемент <DOCUMENT> — корневой, а элементы <GREETING> и <MESSAGE> могут, во-первых, находиться внутри него, а во-вторых — содержать текст.
В документах XML могут присутствовать все виды иерархий, когда один элемент заключен в другой элемент и так далее на много уровней вложенности. Элементам можно также задавать атрибуты, например: <CIRCLE COLOR="blue">, где атрибут COLOR содержит значение "blue". При помощи таких атрибутов удобно хранить дополнительные данные об элементах. Еще в документы XML разрешается включать комментарии, поясняющие определенные элементы текстом внутри тегов <!-- и -->.
Ниже, в листинге 1.1, приведен пример XML-документа planets.xml, в котором эти возможности используются для хранения данных о планетах Меркурии (Mercury), Венере (Venus) и Земле (Earth) — таких как масса, длительность дня, плотность, расстояние от Солнца и т.д. Мы будем работать с этим документом во всей книге, поскольку в нем в компактной форме содержится большая часть возможностей XML, которые могут вам потребоваться.
Листинг 1.1. planets.xml<?xml version="1.0"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS UNITS="(Earth = 1)">.815</MASS>
<DAY UNITS="days">116.75</DAY>
<RADIUS UNITS="miles">37l6</RADIUS>
<DENSITY UNITS="(Earth = 1)">.943</DENSITY>
<DISTANCE UNITS="million miles">66.8</DISTANCE><!--В перигелии-->
</PLANET>
<PLANET>
<NAME>Earth</NAME>
<MASS UNITS="(Earth = 1)">1</MASS>
<DAY UNITS="days">1</DAY>
<RADIUS UNITS="miles">2107</RADIUS>
<DENSITY UNITS="(Earth = 1)">1</DENSITY>
<DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->
</PLANET>
</PLANETS>
Вам нужно также усвоить ряд определений XML, принятых в этой книге:
• CDATA. Простые символьные данные (то есть текст, не содержащий какой-либо разметки);
• ID. Корректное имя XML, которое должно быть уникальным (то есть не использоваться в каких-либо других атрибутах типа ID);
• IDREF. Содержит значение атрибута ID некоторого элемента, как правило, отличного от элемента, с которым связан текущий элемент;
• IDREFS. Несколько идентификаторов (ID) элементов, разделенных пробелами;
• NAME Символ. Буква, разряд, точка, дефис, символ подчеркивания или двоеточие;
• NAME. Имя XML, которое должно начинаться с буквы, символа подчеркивания или двоеточия, за которыми, возможно, следуют дополнительные символы имени;
• NAMES. Список имен, разделенных символом-разделителем;
• NMTOKEN. Лексема, образованная из одной или более букв, цифр, дефисов, символов подчеркивания, двоеточий и точек;
• NMTOKENS. Несколько корректных имен XML в списке, разделенных символом-разделителем;
• NOTATION. Название нотации (которое должно быть объявлено в DTD);