XPath 2.0
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2010 г. ) |
XPath 2.0 — это версия языка XPath , разработанная Консорциумом Всемирной паутины W3C. 23 января 2007 года это стало рекомендацией. [1] В качестве рекомендации W3C он был заменен XPath 3.0 10 апреля 2014 года.
XPath используется в основном для выбора частей XML- документа. Для этого XML-документ моделируется как дерево узлов. XPath позволяет выбирать узлы посредством иерархического пути навигации по дереву документа.
Этот язык значительно больше, чем его предшественник, XPath 1.0 , и некоторые базовые концепции, такие как модель данных и система типов, изменились. Поэтому две языковые версии описаны в отдельных статьях.
XPath 2.0 используется как подъязык XSLT 2.0 , а также является подмножеством XQuery 1.0. Все три языка используют одну и ту же модель данных ( XDM ), систему типов и библиотеку функций, были разработаны вместе и опубликованы в один и тот же день.
Модель данных
[ редактировать ]Каждое значение в XPath 2.0 представляет последовательность элементов собой . Элементами могут быть узлы или атомарные значения . Отдельный узел или атомарное значение считается последовательностью длины один. Последовательности не могут быть вложенными.
Узлы бывают семи видов, соответствующих различным конструкциям синтаксиса XML : элементы, атрибуты, текстовые узлы, комментарии, инструкции обработки, узлы пространства имен и узлы документа. (Узел документа заменяет корневой узел XPath 1.0 , поскольку модель XPath 2.0 позволяет корням деревьев базироваться на других типах узлов, особенно на элементах.)
Узлы могут быть типизированными и нетипизированными. Узел приобретает тип в результате проверки на соответствие XML-схеме . Если элемент или атрибут успешно проверен на соответствие определенному сложному типу или простому типу, определенному в схеме, имя этого типа прикрепляется как аннотация к узлу и определяет результат операций, примененных к этому узлу: например, когда сортировки узлы, помеченные как целые числа, будут отсортированы как целые числа.
Атомарные значения могут принадлежать любому из 19 примитивных типов, определенных в спецификации XML-схемы (например, строка, логическое значение, двойное значение, число с плавающей запятой, десятичное число, dateTime, QName и т. д.). Они также могут принадлежать типу, производному от одного из этих примитивных типов: либо встроенному производному типу, такому как целое число или имя, либо определяемому пользователем производному типу, определенному в написанной пользователем схеме.
Типовая система
[ редактировать ]
Система типов XPath 2.0 примечательна тем, что сочетаются строгая и слабая в одном языке типизация.
Такие операции, как арифметические и логические сравнения, требуют в качестве операндов атомарных значений. Если операнд возвращает узел (например, @price * 1.2
), затем узел автоматически атомизируется для извлечения атомарного значения. Если входной документ был проверен на соответствие схеме, то узел обычно будет иметь аннотацию типа, которая определяет тип результирующего атомарного значения (в этом примере price
атрибут может иметь тип decimal
). Если схема не используется, тип узла будет нетипизирован, а тип результирующего атомарного значения будет untypedAtomic
. Типизированные атомарные значения проверяются, чтобы убедиться, что они имеют тип, соответствующий контексту, в котором они используются: например, невозможно умножить дату на число. Нетипизированные атомарные значения, напротив, следуют слабой дисциплине типизации: они автоматически преобразуются в тип, соответствующий операции, в которой они используются: например, при арифметической операции нетипизированное атомарное значение преобразуется в тип double
.
Выражения пути
[ редактировать ]Пути расположения XPath 1.0 в XPath 2.0 называются выражениями путей . Неформально выражение пути представляет собой последовательность шагов, разделенных знаком « /
"оператор, например a/b/c
(что является сокращением от child::a/child::b/child::c
). Однако более формально» /
" — это просто бинарный оператор, который применяет выражение в его правой части к каждому элементу, поочередно выбранному выражением в левой части. Итак, в этом примере выражение a
выбирает все дочерние элементы узла контекста, имеющие имя <a>
; выражение child::b
затем применяется к каждому из этих узлов, выбирая все <b>
дети <a>
элементы; и выражение child::c
затем применяется к каждому узлу в этой последовательности, которая выбирает все <c>
дети этих <b>
элементы.
" /
" Оператор обобщен в XPath 2.0, чтобы позволить использовать в качестве операнда любое выражение: в XPath 1.0 правая часть всегда была шагом оси. Например, вызов функции может использоваться в правой части Правила типизации для оператора требуют, чтобы результатом первого операнда была последовательность узлов. Правый операнд может возвращать либо узлы, либо атомарные значения (но не смесь). Если результат состоит из узлов, дубликаты удаляются. и узлы возвращаются в порядке документа , причем порядок определяется относительными позициями узлов в исходном XML-дереве.
Во многих случаях операнды " /
«будут шаги оси: они практически не изменились по сравнению с XPath 1.0 и описаны в статье о XPath 1.0 .
Другие операторы
[ редактировать ]Другие операторы, доступные в XPath 2.0, включают следующие:
Операторы | Эффект |
---|---|
+, -, *, div, режим, idiv | Арифметика чисел, дат и длительности |
=, !=, <, >, <=, >= | Общее сравнение: сравнить произвольные последовательности. Результат истинен, если любая пара элементов, по одному из каждой последовательности, удовлетворяет сравнению. |
eq, ne, lt, gt, le, ge | Сравнение значений: сравнение отдельных элементов |
является | Сравнить идентичность узла: true, если оба операнда являются одним и тем же узлом. |
<<, >> | Сравнить положение узла на основе порядка документа |
союз, пересечение, кроме | Сравнивайте последовательности узлов, рассматривая их как наборы, возвращая объединение, пересечение или разность множеств. |
и, или | Булева конъюнкция и дизъюнкция. Отрицание достигается с помощью not() функция. |
к | определяет целочисленный диапазон, например 1 to 10 |
экземпляр | определяет, является ли значение экземпляром данного типа |
сыграть как | преобразует значение в заданный тип |
отлитый как | проверяет, может ли значение быть преобразовано в заданный тип |
Условные выражения могут быть написаны с использованием синтаксиса if (A) then B else C
.
XPath 2.0 также предлагает for
выражение, которое является небольшим подмножеством выражения FLWOR из XQuery . Выражение for $x in X return Y
оценивает выражение Y
для каждого значения в результате выражения X
в свою очередь, ссылаясь на это значение, используя ссылку на переменную $x
.
Библиотека функций
[ редактировать ]Библиотека функций XPath 2.0 значительно расширена по сравнению с библиотекой функций XPath 1.0. ( Жирные элементы доступны в XPath 1.0)
Доступные функции включают в себя следующее:
Цель | Примеры функций |
---|---|
Общая обработка строк | нижний регистр, верхний регистр, подстрока , подстрока-до , подстрока-после , перевод , начинается с , заканчивается, содержит , длина строки , concat , нормализовать-пространство , нормализовать-юникод |
Регулярные выражения | совпадения, замена, токенизация |
Арифметика | подсчет , сумма , среднее, мин, максимум, круглый , пол , потолок , абс |
Даты и время | настройка-dateTime-to-timezone, current-dateTime, day-from-dateTime, месяц-from-dateTime, дни-from-duration, месяцы-from-duration и т. д. |
Свойства узлов | имя , имя-узла, локальное имя , пространство-имен-uri , базовый-uri, обнулено |
Обработка документов | документ, доступный документ, документ-uri, коллекция, идентификатор , idref |
URI | кодировать-для-uri, escape-html-uri, iri-to-uri, разрешить-uri |
QИмена | QName, пространство имен-uri-from-QName, префикс-from-QName, разрешение-QName |
Последовательности | вставить перед, удалить, подпоследовательность, индекс, отдельные значения, обратный, неупорядоченный, пустой, существует |
Проверка типа | один или несколько, ровно один, ноль или один |
Обратная совместимость
[ редактировать ]Из-за изменений в модели данных и системе типов не все выражения в XPath 2.0 имеют такой же эффект, как в версии 1.0. Основное отличие состоит в том, что XPath 1.0 более спокойно относился к преобразованию типов, например, к сравнению двух строк ( "4" > "4.0"
) было вполне возможно, но потребовалось бы числовое сравнение; в XPath 2.0 это определено для сравнения двух значений как строк с использованием контекстно-определяемой последовательности сортировки.
Чтобы облегчить переход, XPath 2.0 определяет режим выполнения, в котором семантика изменяется так, чтобы быть максимально приближенной к поведению XPath 1.0. При использовании XSLT 2.0 этот режим активируется установкой version="1.0"
в качестве атрибута на xsl:stylesheet
элемент. Это по-прежнему не обеспечивает 100% совместимости, но любые оставшиеся различия могут возникнуть только в исключительных случаях.
Поддерживать
[ редактировать ]![]() | Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( декабрь 2009 г. ) |
Поддержка XPath 2.0 по-прежнему ограничена.
Ссылки
[ редактировать ]- ^ «Хронология стандартов XML и семантической сети W3C» (PDF) . 4 февраля 2012 г.