Нет | Узел элемента | ||||
Текстовый узел | Символьные данные | Нет | Нет | Узел элемента | |
Узел пространства имен | URI пространства имен | Префикс пространства имен | Нулевое | Нет | Узел элемента |
Узел инструкции по обработке | Содержимое инструкции | Имя целевого приложения | Нулевое | Нет | Корневой узел или узел элемента |
Узел комментария | Текст комментария | Нет | Нет | Корневой узел или узел элемента |
Ограничения модели XML-документа
Модель XML-документа, описанная выше, является вполне достаточной для того, чтобы манипулировать структурой документа и данными, которые он содержит. Между тем, эта модель имеет определенные ограничения, а именно:
□ Не учитывается информация, содержащаяся в блоке DTD. Как следствие, в XSLT невозможно манипулировать определениями сущностей, элементов, атрибутов и так далее.
□ Не учитываются некоторые синтаксические особенности входящего XML-документа. Например: использовались ли в определенном атрибуте одинарные или двойные кавычки; была ли определенная строка задана сущностью или просто текстом, был ли текст заключен в секции CDATA или нет.
□ Если атрибут элемента был определен в DTD со значением по умолчанию, то в преобразовании нельзя точно сказать, присутствовал ли он физически во входящем документе или нет.
□ Не учитывается, был ли пустой элемент определен как <b></b>
или <b/>
.
Одним словом, предложенная выше модель не учитывает информацию, которая не важна с точки зрения структуры документа. На практике помимо структуры бывает также важен и детальный синтаксис документа (например, необходимо вместо  
выводить
). К сожалению, применение XSLT для таких задач ограничено вследствие ограничений самой модели документа.
Порядок просмотра документа
Узлы дерева XML-документа находятся в определенном порядке, который называется порядком просмотра документа (англ. document order). Этот порядок важен для вычисления XPath-вырэжений, которые оперируют множествами узлов. Несмотря на то, что эти множества не имеют внутреннего порядка, при вычислении выражений узлы в них будут перебираться в прямом или обратном порядке просмотра документа в зависимости от того, какие оси навигации применяются в выражении.
Порядок просмотра документа — это порядок, который соответствует появлению в документе первого символа текстовой записи узла. Например, для элементов это будет порядок появления в документе открывающих тегов.
Более четко порядок просмотра документа определяется следующими правилами:
□ корневой узел является первым узлом в порядке просмотра документа;
□ узлы элементов предшествуют своим дочерним узлам, узлам пространств имен и узлам атрибутов;
□ узлы пространств имен предшествуют узлам атрибутов;
□ узлы атрибутов предшествуют другим дочерним узлам своего элемента;
□ остальные узлы упорядочиваются в последовательности их появления в документе.
Обратным порядком просмотра документа называется порядок, который в точности противоположен обычному порядку просмотра документа. Обычный порядок просмотра документа также называют прямым порядком или порядком документа.
В качестве примера приведем схему дерева и выясним порядок просмотра
следующего документа:
<!-- Start -->
<?арр open?>
<а level='0' xmlns:b='urn:b' xmlns='urn:a'>
alpha
<b:bravo/><!-- To do... --><charlie/>
delta
</a>
<?app close?>
Дерево этого документа показано на рис. 3.11. Порядок просмотра данного документа будет следующим:
□ корневой узел;
□ узел комментария <!-- start -->
;
□ узел инструкции по обработке <?app open?>
;
□ узел элемента a
;
□ узел пространства имен 'urn:а'
;