Модель данных
XPath обрабатывает XML документ как древовидную структуру. В этой главе описывается, как именно XPath моделирует дерево XML документа. Указанная модель носит лишь концептуальный характер и не содержит указаний для какой-либо конкретной реализации. Взаимосвязь этой модели с XML Information Set описывается в Приложении .
XML документы, обрабатываемые XPath, должны отвечать требованиям Рекомендации XML Namespaces .
Дерево состоит из узлов. Узлы бывают семи типов:
корневые узлы
узлы элементов
узлы текста
узлы атрибутов
узлы пространства имен
узлы инструкций обработки
узлы комментариев
Для каждого типа узлов существует алгоритм определения строкового значения узла этого типа. Для некоторых типов узлов строковое значение является частью самого узла, для других типов узлов строковое значение вычисляется по строковому значению узлов - потомков. Замечание: Для узлов элементов и корневых узлов строковое значение узла - это не та же самая строка, которую возвращает метод nodeValue модели DOM (см. ).
Некоторые типы узлов имеют также расширенное имя, состоящее из двух частей: локальной части и URI пространства имен. Локальная часть - это строка, URI пространства имен - строка или null. В качестве URI пространства имен, указываемого в XML документе, может выступать ссылка URI, описанная в . Это означает, что он может иметь идентификатор фрагмента и быть относительным. В процессе обработки пространства имен относительный URI должен преобразовываться в абсолютный - URI пространства имен для узла в модели данных всегда должен стать абсолютным. Два считаются идентичными, если они имеют одинаковую локальную часть и либо оба имеют нулевой URI пространства имен, либо имеют одинаковые ненулевые URI пространства имен.
Для всех узлов в документе определяется порядок, называемый порядком появления в документе. Он соответствует появлению узлов в XML представлении документа после расшифровки всех общих сущностей - точнее выражаясь, не самих узлов, а первых символов из XML представления соответствующего узла. Следовательно, корневой узел всегда будет первым узлом, а узлы элементов будут предшествовать своим непосредственным потомкам. Таким образом, порядок появления в документе упорядочивает узлы элементов согласно очередности появления в XML документе соответствующих открывающих тэгов (после подстановки всех сущностей). Считается, что в элементе узлы атрибутов и пространств имен всегда предшествуют непосредственным потомкам элемента. При этом узлы пространств имен предшествуют узлам атрибутов. Относительный порядок следования узлов пространства имен и относительный порядок следования узлов атрибутов зависят от реализации. Обратный порядок появления в документе - это порядок, обратный .
Корневые узлы и узлы элементов имеют упорядоченный список узлов непосредственных потомков. Узлы не могут иметь совместных непосредственных потомков: если один узел отличается от другого, то ни один узел непосредственного потомка первого узла не может совпасть с каким-либо узлом непосредственного потомка другого узла. Каждый узел, за исключением корневого, имеет ровно одного родителя, который является либо узлом элемента, либо корневым узлом. Корневой узел и узел элемента являются родителями для каждого из своих непосредственных потомков. Потомки узла - это непосредственные потомки данного узла и все потомки непосредственных потомков этого узла.