Сводная таблица характеристик узлов
Для удобства использования мы можем свести в одну таблицу (табл. 3.1) такие характеристики узлов, как строковое значение, локальная часть имени, пространство имен и так далее.
Таблица 3.1. Характеристики различных типов узлов
Тип узла |
Характеристики |
Строковое значение |
Расширенное имя |
Дочерние узлы |
Родительские узлы |
Локальная часть имени |
Пространство имен |
Корневой узел |
Конкатенация текстовых потомков |
Нет |
Узлы элементов, комментариев, инструкций по обработке |
Нет |
Узел элемента |
Конкатенация текстовых потомков |
Имя элемента |
Пространство имен элемента |
Узлы элементов, комментариев, инструкций по обработке, текстовые узлы |
Корневой узел или узел элемента |
Узел атрибута |
Значение атрибута |
Имя атрибута |
Пространство имен атрибута |
Нет |
Узел элемента |
Текстовый узел |
Символьные данные |
Нет |
Нет |
Узел элемента |
Узел пространства имен |
URI пространства имен |
Префикс пространства имен |
Нулевое |
Нет |
Узел элемента |
Узел инструкции по обработке |
Содержимое инструкции |
Имя целевого приложения |
Нулевое |
Нет |
Корневой узел или узел элемента |
Узел комментария |
Текст комментария |
Нет |
Нет |
Корневой узел или узел элемента |
Ограничения модели XML-документа
Модель XML-документа, описанная выше, является вполне достаточной для того, чтобы манипулировать структурой документа и данными, которые он содержит. Между тем, эта модель имеет определенные ограничения, а именно:
□ Не учитывается информация, содержащаяся в блоке DTD. Как следствие, в XSLT невозможно манипулировать определениями сущностей, элементов, атрибутов и так далее.
□ Не учитываются некоторые синтаксические особенности входящего XML-документа. Например: использовались ли в определенном атрибуте одинарные или двойные кавычки; была ли определенная строка задана сущностью или просто текстом, был ли текст заключен в секции CDATA или нет.
□ Если атрибут элемента был определен в DTD со значением по умолчанию, то в преобразовании нельзя точно сказать, присутствовал ли он физически во входящем документе или нет.
□ Не учитывается, был ли пустой элемент определен как или .
Одним словом, предложенная выше модель не учитывает информацию, которая не важна с точки зрения структуры документа. На практике помимо структуры бывает также важен и детальный синтаксис документа (например, необходимо вместо выводить ). К сожалению, применение XSLT для таких задач ограничено вследствие ограничений самой модели документа.
Порядок просмотра документа
Узлы дерева XML-документа находятся в определенном порядке, который называется порядком просмотра документа (англ. document order). Этот порядок важен для вычисления XPath-вырэжений, которые оперируют множествами узлов. Несмотря на то, что эти множества не имеют внутреннего порядка, при вычислении выражений узлы в них будут перебираться в прямом или обратном порядке просмотра документа в зависимости от того, какие оси навигации применяются в выражении.
Порядок просмотра документа — это порядок, который соответствует появлению в документе первого символа текстовой записи узла. Например, для элементов это будет порядок появления в документе открывающих тегов.
Более четко порядок просмотра документа определяется следующими правилами:
□ корневой узел является первым узлом в порядке просмотра документа;
□ узлы элементов предшествуют своим дочерним узлам, узлам пространств имен и узлам атрибутов;
□ узлы пространств имен предшествуют узлам атрибутов;
□ узлы атрибутов предшествуют другим дочерним узлам своего элемента;
□ остальные узлы упорядочиваются в последовательности их появления в документе.
Обратным порядком просмотра документа называется порядок, который в точности противоположен обычному порядку просмотра документа. Обычный порядок просмотра документа также называют прямым порядком или порядком документа.
Пример
В качестве примера приведем схему дерева и выясним порядок просмотра
следующего документа:
<���а level="0" xmlns:b="urn:b" xmlns="urn:a">
alpha
delta
Дерево этого документа показано на рис. 3.11. Порядок просмотра данного документа будет следующим:
Читать дальше