узлом. (В этом отличие данной модели от модели XML DOM, в которой атрибуты не являются детьми и не имеют родителей.) Если я добавлю атрибут в такой элемент:
<?xml version='1.0'?>
<library>
<book>
<title>
Earthquakes for Lunch
</title>
<title pub_date='2001'>
Volcanoes for Dinner
</title>
</book>
</library>
то в дереве документа он отобразится следующим образом:
root
|
element: <library>
|
|-------------------|------------|
| | |
text: whitespace element: <book> text: whitespace
|
|-------------------|-------------|-------------------|-------------|
| | | | |
text: whitespace element: <title> text: whitespace element: <title> text: whitespace
| |
text: Earthquakes for Lunch |--------------------------|
| |
text: Volcanoes for Dinner attribute: pub_date='2001'
У каждого узла есть ряд установленных свойств, связанных с ним в XSLT. В следующем списке перечислены виды свойств, которые создатели процессоров XSLT отслеживают для каждого узла:
• Имя. Имя узла;
• Строка-значение. Текст узла;
• Базовый URI. Базовый URI узла (XML-вариант URL);
• Дети. Список дочерних узлов; ноль, если детей нет;
• Родитель. Узел-родитель данного узла;
• Имеет атрибут. Определяет атрибуты узла элемента, если таковые имеются;
• Имеет пространство имен. Определяет узлы пространства имен узла- элемента.
При работе с деревьями следует принять во внимание еще одно соображение; процессоры XSLT работают поверх разборщиков XML, и так как правила для разборщиков XML и процессоров XSLT слегка различаются, это может привести к проблемам. В некоторых случаях данный аспект может быть важен, поэтому в следующем разделе он кратко рассмотрен.
Модель информационного множества против модели дерева XSLT
Разборщики XML передают только определенную информацию: как задается основной спецификацией информационного множества (Information Set) XML — которую можно найти по адресу www.w3.org/TR/xml- infoset, в то время как процессоры XSLT придерживаются модели дерева XSLT. Эти модели, а также элементы, считающиеся в них важными, различны, что может привести к проблемам.
Вот, например, два элемента XML, входящие в основное информационное множество, но невозможные в XSLT: примечания и пропущенные ссылки на сущности (ссылки на сущности, которые разборщик XML предпочел не раскрывать). На практике это означает, что даже если разборщик XML передал информацию для этих пунктов, процессор XSLT ничего не сможет с ней сделать. Однако примечания используются редко, и только отдельные разборщики XML генерируют пропущенные ссылки на сущности, поэтому это не является значимой проблемой.
С другой стороны, разборщики XML
Кроме того, информация об объявлениях DTD
Еще несколько моментов могут представлять для вас интерес. Например, модель обработки XSLT открывает доступ к префиксам пространств имен во входном дереве, но предоставляет очень небольшие возможности управления ими в выходном дереве, где они обрабатываются автоматически. К тому же, в модели обработки XSLT для каждого узла в дереве определяется базовый URI, представляющий собой URI внешней сущности, от которой был произведен узел. (В рабочем проекте XSLT 1.1 эти возможности были расширены для поддержки спецификации XML Base, как вы увидите ближе к концу этой главы.) Однако в информационном множестве XML базовые URI считаются второстепенными, а это означает, что разборщик XML может не передать эту информацию в процессор XSL.
В общем, вам следует знать, что процессоры XSLT читают документы XML при помощи разборщиков XML, и что совместная работа этих программных единиц не бесшовна. Если вы обнаружите, что некоторая необходимая информация при преобразовании XSLT пропала, следует вспомнить этот момент. Фактически различие между информационным множеством XML и моделью дерева XSLT — это одна из проблем, которую призван исправить XSLT 2.0. Помимо прочего, в XSLT 2.0 должно быть проще восстанавливать ID и ключевую информацию из исходного документа, а также восстанавливать информацию из объявления XML исходного документа — например, версию XML и кодировку.
Работа с элементами XSLT
Для того чтобы создавать таблицы стилей XSLT, вы должны хорошо знать элементы XSLT, такие как <xsl:template>
и <xsl:stylesheet>
. Эти элементы поддерживают большое число атрибутов, и W3C выработал ряд формальных определений типов данных, которые можно присваивать этим атрибутам. Вот ряд определений XSLT; их необходимо знать:
• NCNameChar
. Буква, цифра, точка, дефис или символ подчеркивания;