stringtranslate.com

XPath 2.0

XPath 2.0 es una versión del lenguaje XPath definido por el World Wide Web Consortium , W3C. Se convirtió en recomendación el 23 de enero de 2007. [1] Como recomendación del W3C, fue reemplazada por XPath 3.0 el 10 de abril de 2014.

XPath se utiliza principalmente para seleccionar partes de un documento XML . Para ello, el documento XML se modela como un árbol de nodos. XPath permite seleccionar nodos mediante una ruta de navegación jerárquica a través del árbol del documento.

El lenguaje es significativamente más grande que su predecesor, XPath 1.0 , y algunos de los conceptos básicos, como el modelo de datos y el sistema de tipos, han cambiado. Por ello, las dos versiones lingüísticas se describen en artículos separados.

XPath 2.0 se utiliza como sublenguaje de XSLT 2.0 y también es un subconjunto de XQuery 1.0. Los tres lenguajes comparten el mismo modelo de datos ( XDM ), sistema de tipos y biblioteca de funciones, y se desarrollaron y publicaron juntos el mismo día.

Modelo de datos

Cada valor en XPath 2.0 es una secuencia de elementos . Los elementos pueden ser nodos o valores atómicos . Un nodo individual o valor atómico se considera una secuencia de longitud uno. Es posible que las secuencias no estén anidadas.

Los nodos son de siete tipos, correspondientes a diferentes construcciones en la sintaxis de XML : elementos, atributos, nodos de texto, comentarios, instrucciones de procesamiento, nodos de espacio de nombres y nodos de documento. (El nodo de documento reemplaza el nodo raíz de XPath 1.0 , porque el modelo XPath 2.0 permite que los árboles tengan sus raíces en otros tipos de nodos, en particular elementos).

Los nodos pueden ser tipificados o no tipificados. Un nodo adquiere un tipo como resultado de la validación frente a un esquema XML . Si un elemento o atributo se valida exitosamente contra un tipo complejo particular o un tipo simple definido en un esquema, el nombre de ese tipo se adjunta como una anotación al nodo y determina el resultado de las operaciones aplicadas a ese nodo: por ejemplo, cuando Al ordenar, los nodos que estén anotados como números enteros se ordenarán como números enteros.

Los valores atómicos pueden pertenecer a cualquiera de los 19 tipos primitivos definidos en la especificación del esquema XML (por ejemplo, cadena, booleano, doble, flotante, decimal, fecha y hora, QName, etc.). También pueden pertenecer a un tipo derivado de uno de estos tipos primitivos: ya sea un tipo derivado integrado como un entero o Nombre, o un tipo derivado definido por el usuario en un esquema escrito por el usuario.

Sistema de tipos

La jerarquía de tipos XDM

El sistema de tipos de XPath 2.0 destaca por el hecho de que combina escritura fuerte y escritura débil en un solo idioma.

Operaciones como la comparación aritmética y booleana requieren valores atómicos como operandos. Si un operando devuelve un nodo (por ejemplo, @price * 1.2), entonces el nodo se atomiza automáticamente para extraer el valor atómico. Si el documento de entrada se ha validado con un esquema, entonces el nodo normalmente tendrá una anotación de tipo, y esto determina el tipo del valor atómico resultante (en este ejemplo, el priceatributo podría tener el tipo decimal). Si no se utiliza ningún esquema, el nodo no tendrá tipo y el tipo del valor atómico resultante será untypedAtomic. Los valores atómicos escritos se verifican para garantizar que tengan un tipo apropiado para el contexto donde se usan: por ejemplo, no es posible multiplicar una fecha por un número. Los valores atómicos sin tipo, por el contrario, siguen una disciplina de tipificación débil: se convierten automáticamente a un tipo apropiado para la operación donde se utilizan: por ejemplo, con una operación aritmética, un valor atómico sin tipo se convierte al tipo double.

Expresiones de ruta

Las rutas de ubicación de XPath 1.0 se denominan en XPath 2.0 expresiones de ruta . De manera informal, una expresión de ruta es una secuencia de pasos separados por el /operador " ", por ejemplo a/b/c(que es la abreviatura de child::a/child::b/child::c). Sin embargo, más formalmente, " /" es simplemente un operador binario que aplica la expresión del lado derecho a cada elemento seleccionado por la expresión del lado izquierdo. Entonces, en este ejemplo, la expresión aselecciona todos los elementos secundarios del nodo de contexto que se denominan <a>; luego se aplica la expresión child::ba cada uno de estos nodos, seleccionando todos los <b>hijos de los <a>elementos; y luego la expresión child::cse aplica a cada nodo de esta secuencia, lo que selecciona todos los <c>hijos de estos <b>elementos.

El /operador " " está generalizado en XPath 2.0 para permitir el uso de cualquier tipo de expresión como operando: en XPath 1.0, el lado derecho siempre fue un paso de eje. Por ejemplo, se puede utilizar una llamada de función en el lado derecho. Las reglas de escritura para el operador requieren que el resultado del primer operando sea una secuencia de nodos. El operando de la derecha puede devolver nodos o valores atómicos (pero no una mezcla). Si el resultado consta de nodos, los duplicados se eliminan y los nodos se devuelven en el orden del documento , un orden definido en términos de las posiciones relativas de los nodos en el árbol XML original.

En muchos casos, los operandos de " /" serán pasos de eje: prácticamente no han cambiado desde XPath 1.0 y se describen en el artículo sobre XPath 1.0 .

Otros operadores

Otros operadores disponibles en XPath 2.0 incluyen los siguientes:

Las expresiones condicionales se pueden escribir usando la sintaxis if (A) then B else C.

XPath 2.0 también ofrece una forexpresión, que es un pequeño subconjunto de la expresión FLWOR de XQuery . La expresión evalúa la expresión para cada valor en el resultado de la expresión por turno, haciendo referencia a ese valor mediante la referencia de variable .for $x in X return YYX$x

Biblioteca de funciones

La biblioteca de funciones en XPath 2.0 es una gran ampliación de la biblioteca de funciones en XPath 1.0. ( Los elementos en negrita están disponibles en XPath 1.0)

Las funciones disponibles incluyen las siguientes:

Compatibilidad al revés

Debido a los cambios en el modelo de datos y el sistema de tipos, no todas las expresiones tienen exactamente el mismo efecto en XPath 2.0 que en 1.0. La principal diferencia es que XPath 1.0 era más relajado con respecto a la conversión de tipos; por ejemplo, "4" > "4.0"era bastante posible comparar dos cadenas ( ), pero haría una comparación numérica; en XPath 2.0, esto se define para comparar los dos valores como cadenas utilizando una secuencia de clasificación definida por el contexto.

Para facilitar la transición, XPath 2.0 define un modo de ejecución en el que la semántica se modifica para que sea lo más parecida posible al comportamiento de XPath 1.0. Cuando se utiliza XSLT 2.0 , este modo se activa configurándolo version="1.0"como un atributo en el xsl:stylesheetelemento. Esto todavía no ofrece una compatibilidad del 100%, pero es probable que las diferencias restantes sólo se encuentren en casos inusuales.

Apoyo

La compatibilidad con XPath 2.0 aún es limitada.

Referencias

  1. ^ "Cronología de los estándares XML y Web Semántica W3C" (PDF) . 4 de febrero de 2012.

enlaces externos