|
| ||||||||||||
| ||||||||||||
5 Модель данныхXPath обрабатывает XML документ как древовидную структуру. В этой главе описывается, как именно XPath моделирует дерево XML документа. Указанная модель носит лишь концептуальный характер и не содержит указаний для какой-либо конкретной реализации. Взаимосвязь этой модели с XML Information Set [XML Infoset] описывается в Приложении [B XML Information Set Mapping]. XML документы, обрабатываемые XPath, должны отвечать требованиям Рекомендации XML Namespaces [XML Names]. Дерево состоит из узлов. Узлы бывают семи типов:
Для каждого типа узлов существует алгоритм определения строкового значения узла этого типа. Для некоторых типов узлов строковое значение является частью самого узла, для других типов узлов строковое значение вычисляется по строковому значению узлов - потомков. Замечание: Для узлов элементов и корневых узлов строковое значение узла - это не та же самая строка, которую возвращает метод
Некоторые типы узлов имеют также расширенное имя, состоящее из двух частей: локальной части и URI пространства имен. Локальная часть - это строка, URI пространства имен - строка или null. В качестве URI пространства имен, указываемого в XML документе, может выступать ссылка URI, описанная в [RFC2396]. Это означает, что он может иметь идентификатор фрагмента и быть относительным. В процессе обработки пространства имен относительный URI должен преобразовываться в абсолютный - URI пространства имен для расширенного имени узла в модели данных всегда должен стать абсолютным. Два расширенных имени считаются идентичными, если они имеют одинаковую локальную часть и либо оба имеют нулевой URI пространства имен, либо имеют одинаковые ненулевые URI пространства имен. Для всех узлов в документе определяется порядок, называемый порядком появления в документе. Он соответствует появлению узлов в XML представлении документа после расшифровки всех общих сущностей - точнее выражаясь, не самих узлов, а первых символов из XML представления соответствующего узла. Следовательно, корневой узел всегда будет первым узлом, а узлы элементов будут предшествовать своим непосредственным потомкам. Таким образом, порядок появления в документе упорядочивает узлы элементов согласно очередности появления в XML документе соответствующих открывающих тэгов (после подстановки всех сущностей). Считается, что в элементе узлы атрибутов и пространств имен всегда предшествуют непосредственным потомкам элемента. При этом узлы пространств имен предшествуют узлам атрибутов. Относительный порядок следования узлов пространства имен и относительный порядок следования узлов атрибутов зависят от реализации. Обратный порядок появления в документе - это порядок, обратный порядку появления в документе. Корневые узлы и узлы элементов имеют упорядоченный список узлов непосредственных потомков. Узлы не могут иметь совместных непосредственных потомков: если один узел отличается от другого, то ни один узел непосредственного потомка первого узла не может совпасть с каким-либо узлом непосредственного потомка другого узла. Каждый узел, за исключением корневого, имеет ровно одного родителя, который является либо узлом элемента, либо корневым узлом. Корневой узел и узел элемента являются родителями для каждого из своих непосредственных потомков. Потомки узла - это непосредственные потомки данного узла и все потомки непосредственных потомков этого узла. 5.1 Корневой узелКорневой узел является корнем дерева документа. Корневой узел не может появляться нигде кроме как в корне дерева. Узел, соответствующий элементу документа, является непосредственным потомком корневого узла. Корневой узел имеет непосредственными потомками также узлы инструкций обработки, узлы комментариев для инструкций обработки и узлы комментариев, которые либо предшествуют, либо следуют за элементом документа. Строковое значение корневого узла является объединением строковых значений всех текстовых узлов, являющихся потомками корневого узла, выстроенными согласно порядку появления в документе. Корневой узел не имеет расширенного имени. 5.2 Узлы элементовДля каждого элемента в документе создается узел элемента. Узел элемента имеет расширенное имя, получаемое при обработке QName этого элемента, которое, согласно рекомендации XML Namespaces [XML Names], указывается в соответствующем теге. Если QName не имеет префикса и нет пространства имен, используемого по умолчанию, то URI пространства имен для расширенного имени данного элемента будет нулевым. Замечание: Согласно нотации в Приложении A.3 документа [XML Names], локальная часть расширенного имени соответствует атрибуту Непосредственными потомками узла элемента могут быть узлы элементов, узлы комментариев, узлы инструкций обработки и текстовые узлы, образующие его содержание. При этом обрабатываются ссылки на внутренние и внешние сущности. Выполняется подстановка для ссылок на символы. Строковое значение узла элемента является объединением строковых значений всех текстовых узлов, являющихся потомками данного узла элемента и предварительно отсортированных согласно порядку появления в документе. 5.2.1 Уникальные IDУзел элемента может иметь уникальный идентификатор (ID). Значение этого атрибута декларируется в DTD как тип Замечание: Если документ не имеет DTD, то ни один из его элементов не будет иметь уникального идентификатора. 5.3 Узлы атрибутовС каждым узлом элемента связан набор узлов атрибутов. При этом, хотя сам элемент является родителем каждого из этих узлов атрибутов, узел атрибута непосредственным потомком своего родительского элемента не является. Замечание: В этом заключается отличие от модели DOM, где элемент, владеющий атрибутом, родителем этого атрибута не считается (см. [DOM]). Элементы не могут совместно использовать узлы атрибутов: Если один узел элемента отличается от другого, то ни один из узлов атрибутов, относящихся к первому узлу элемента, не может совпасть ни с одним узлом атрибута, относящимся ко второму узлу элемента. Замечание: Оператор Атрибут, подставляемый по умолчанию, обрабатывается точно так же, как атрибут, указанный явно. Если для данного типа элемента в DTD атрибут был декларирован со значением по умолчанию Некоторые атрибуты, такие как Узел атрибута имеет расширенное имя и строковое значение. Расширенное имя получается при обработке QName, указанного в соответствующем тэге XML документа согласно Рекомендации XML Namespaces [XML Names]. Если QName атрибута не имеет префикса, URI пространства имен для имени атрибута будет нулевым. Замечание: Согласно нотации в Приложении A.3 документа [XML Names], локальная часть расширенного имени соответствует атрибуту Узел атрибута имеет строковое значение. Строковое значение нормализовано в соответствии с Рекомендацией XML [XML]. Не предусмотрено специальной обработки для атрибута, чье нормализованное значение становится строкой нулевой длины - результатом будет узел атрибута, чьим строковым значением становится строка нулевой длины. Замечание: во внешнем DTD или внешней сущности параметра могут декларироваться атрибуты по умолчанию. Согласно рекомендации XML, если процессор XML не является проверяющим, он не обязан читать внешние DTD и внешние параметры. Соответственно, с некоторыми непроверяющими XML процессорами могут не работать стили и другой функционал, предполагающий, что дерево XPath содержит значения атрибутов по умолчанию, декларированные во внешнем DTD или сущности параметра. Для атрибутов, декларирующих пространства имен, соответствующих узлов атрибутов не предусмотрено (см. [XML Names]). 5.4 Узлы пространства именС каждым элементом связан набор узлов пространства имен: по одному на каждый новый префикс пространства имен, появившийся в области видимости этого элемента, (включая и перфикс
Узел пространства имен имеет расширенное имя, локальная часть которого является префиксом пространства имен (она является пустой, если данный узел относится к пространству имен по умолчанию), а идентификатор URI пространства имен всегда нулевой. Строковое значение узла пространства имен - это URI пространства имен, связанного с данным префиксом пространства имен. Если данный URI окажется относительным, он должен обрабатываться точно так же, как URI пространства имен в расширенном имени. 5.5 Узлы инструкций обработкиДля каждой инструкции обработки создается соответствующий узел. Исключение составляют инструкции обработки, помещенные в декларацию типа документа. Инструкция обработки имеет расширенное имя, в котором локальная часть - это адресат инструкции обработки, а URI пространства имен является нулевым. Строковое значение узла инструкции обработки - это та часть инструкции обработки, которая следует за адресатом и возможным пробельным символом. В состав строкового значения также не попадает завершающая комбинация Замечание: Декларация XML инструкцией обработки не является. Соответственно, ни один из узлов инструкции обработки не может соответствовать декларации XML. 5.6 Узлы комментариевДля каждого комментария создается соответствующий узел. Исключение составляют комментарии, расположенные в декларации типа документа. Строковым значением комментария является содержимое этого комментария за исключением открывающей Узлы комментария расширенного имени не имеют. 5.7 Текстовые узлыСимвольные данные группируются в узлы текста. В каждый из таких узлов помещается столько символьных данных, сколько возможно: с текстовым узлом ни до, ни после не может соседствовать какой-либо другой текстовый узел, имеющий того же родителя. Строковым значением текстового узла являются эти самые текстовые данные. Текстовый узел всегда содержит по крайней мере один символ данных. Все символы в секции CDATA обрабатываются как символьные данные. Таким образом, запись Замечание: Если текстовый узел, содержащий символ Символьные данные в комментариях, инструкциях обработки и значениях атрибутов текстовых узлов не образуют. Концы строк во внешних сущностях нормализуются в #xA в соответствии с Рекомендацией XML [XML]. Текстовый узел расширенного имени не имеет. 6 СоответствиеXPath изначально создавался как компонент для использования в других спецификациях. Поэтому XPath обращается к использующим его спецификациям (таким как [XPointer] или [XSLT]) за получением критериев проверки реализаций XPath, вместо того чтобы самому формулировать критерии оценки независимых реализаций XPath. Назад | Содержание | Вперед
|
|
CITForum © 1997–2025