stringtranslate.com

XPath 2.0

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

Тип системы

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

Система типов 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, включают следующие:

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

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

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

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

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

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

Из-за изменений в модели данных и системе типов не все выражения имеют точно такой же эффект в 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%-ной совместимости, но любые оставшиеся различия, скорее всего, будут встречаться только в необычных случаях.

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

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

Ссылки

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

Внешние ссылки