XPath 2.0 - XPath 2.0

XPath 2.0 это версия XPath язык, определенный Консорциум World Wide Web, 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 спецификация (например, string, boolean, double, float, decimal, dateTime, QName и т. д.). Они также могут принадлежать к типу, производному от одного из этих примитивных типов: либо к встроенному производному типу, например integer или Name, либо к определяемому пользователем производному типу, определенному в написанной пользователем схеме.

Система типов

В XDM иерархия типов

Система типов XPath 2.0 примечательна тем, что смешивает строгая типизация и слабый набор текста на одном языке.

Такие операции, как арифметические и логические сравнения, требуют в качестве операндов атомарных значений. Если операнд возвращает узел (например, @ цена * 1.2), то узел автоматически распыленный чтобы извлечь атомарное значение. Если входной документ был проверен по схеме, тогда узел обычно будет иметь аннотацию типа, и это определяет тип результирующего атомарного значения (в этом примере цена атрибут может иметь тип десятичный). Если схема не используется, узел будет нетипизированным, а тип результирующего атомарного значения будет нетипизированный. Типизированные атомарные значения проверяются, чтобы убедиться, что они имеют соответствующий тип для контекста, в котором они используются: например, невозможно умножить дату на число. Напротив, нетипизированные атомарные значения следуют слабой типизации: они автоматически преобразуются в тип, соответствующий операции, в которой они используются: например, с помощью арифметической операции нетипизированное атомарное значение преобразуется в тип двойной.

Выражения пути

В пути к местоположению из XPath 1.0 в XPath 2.0 называются выражения пути. Неформально выражение пути - это последовательность шагов, разделенных знаком "/оператор, например а / б / с (что является сокращением от child :: a / child :: b / child :: c). Однако более формально "/"- это просто бинарный оператор, который применяет выражение в его правой части к каждому элементу, по очереди выбранному выражением в левой части. Итак, в этом примере выражение а выбирает все дочерние элементы контекстного узла с именем <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, mod, idivАрифметика чисел, дат и продолжительности
=, !=, <, >, <=, >=Общее сравнение: сравнить произвольные последовательности. Результат верен, если любая пара элементов, по одному из каждой последовательности, удовлетворяет сравнению
эквалайзер, ne, lt, gt, le, geСравнение значений: сравнение отдельных элементов
являетсяИдентификация узла сравнения: истина, если оба операнда являются одним и тем же узлом
<<, >>Сравнить положение узла в соответствии с порядком документа
объединение, пересечение, кромеСравните последовательности узлов, рассматривая их как наборы, возвращая объединение наборов, пересечение или разность
и, илилогическое соединение и дизъюнкция. Отрицание достигается с помощью нет() функция.
копределяет целочисленный диапазон, например От 1 до 10
экземпляропределяет, является ли значение экземпляром данного типа
бросить какпреобразует значение в заданный тип
отливаться какпроверяет, можно ли преобразовать значение в данный тип

Условные выражения могут быть написаны с использованием синтаксиса if (A), то B, иначе C.

XPath 2.0 также предлагает за выражение, которое является небольшим подмножеством FLWOR выражение от XQuery. Выражение за $ x в X вернуть Y оценивает выражение Y для каждого значения в результате выражения Икс в свою очередь, ссылаясь на это значение с помощью ссылки на переменную $ x.

Библиотека функций

Библиотека функций в XPath 2.0 значительно расширена по сравнению с библиотекой функций в XPath 1.0. (Смелый элементы доступны в XPath 1.0)

Доступные функции включают следующее:

ЦельПримеры функций
Общая обработка строкнижний регистр, верхний регистр, подстрока, подстрока перед, подстрока после, переведите, начинается с, заканчивается на, содержит, длина строки, concat, нормализовать пространство, нормализовать-юникод
Обычные выражениясовпадения, заменить, токенизировать
Арифметикасчитать, сумма, средн., мин., макс., круглый, этаж, потолок, абс
Даты и времяAdjust-dateTime-to-timezone, current-dateTime, day-from-dateTime, month-from-dateTime, days-from-duration, months-from-duration и т. д.
Свойства узловимя, имя-узла, местное имя, пространство имен-uri, base-uri, нулевое значение
Обработка документовдокумент, доступный документ, документ-URI, коллекция, я бы, idref
URIencode-for-uri, escape-html-uri, iri-to-uri, resol-uri
QNamesQName, namespace-uri-from-QName, prefix-from-QName, resolve-QName
Последовательностивставка перед, удаление, подпоследовательность, индекс, отдельные значения, обратный, неупорядоченный, пустой, существует
Проверка типаодин или несколько, ровно один, ноль или один

Обратная совместимость

Из-за изменений в модели данных и системе типов не все выражения имеют в XPath 2.0 точно такой же эффект, как в 1.0. Основное отличие состоит в том, что XPath 1.0 более расслаблен в отношении преобразования типов, например, при сравнении двух строк ("4" > "4.0") было вполне возможно, но нужно было провести числовое сравнение; в XPath 2.0 это определено для сравнения двух значений как строк с использованием контекстно-зависимой последовательности сортировки.

Чтобы облегчить переход, XPath 2.0 определяет режим выполнения, в котором семантика модифицируется, чтобы максимально приблизиться к поведению XPath 1.0. Когда используешь XSLT 2.0, этот режим активируется установкой версия = "1.0" как атрибут на xsl: таблица стилей элемент. Это по-прежнему не обеспечивает 100% совместимости, но любые оставшиеся отличия могут возникнуть только в необычных случаях.

Поддерживать

Поддержка XPath 2.0 по-прежнему ограничена.

Рекомендации

  1. ^ «Хронология стандартов XML и семантической сети W3C» (PDF). 4 февраля 2012 г.

внешняя ссылка