XPath 2.0 es una versión del lenguaje XPath definido por el Consorcio World Wide Web (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 considerablemente 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 lo tanto, las dos versiones del lenguaje 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 juntos y se publicaron 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 un valor atómico se considera una secuencia de longitud uno. Las secuencias no pueden estar anidadas.
Los nodos son de siete tipos, que corresponden 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 al nodo raíz de XPath 1.0 , porque el modelo XPath 2.0 permite que los árboles tengan su raíz en otros tipos de nodos, en particular elementos).
Los nodos pueden tener o no tipo. Un nodo adquiere un tipo como resultado de la validación con un esquema XML . Si un elemento o atributo se valida correctamente con un tipo complejo o 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, 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 de esquema XML (por ejemplo, cadena, booleano, doble, flotante, decimal, dateTime, QName, etc.). También pueden pertenecer a un tipo derivado de uno de estos tipos primitivos: un tipo derivado incorporado, como entero o nombre, o un tipo derivado definido por el usuario en un esquema escrito por el usuario.
Sistema de tipos

El sistema de tipos de XPath 2.0 es notable por el hecho de que mezcla tipado fuerte y tipado débil dentro de un solo lenguaje.
Las 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 tipificados se comprueban para garantizar que tengan un tipo apropiado para el contexto en el que se utilizan: por ejemplo, no es posible multiplicar una fecha por un número. Los valores atómicos no tipificados, por el contrario, siguen una disciplina de tipificación débil: se convierten automáticamente a un tipo apropiado para la operación en la que se utilizan: por ejemplo, con una operación aritmética, un valor atómico no tipificado 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, de manera más formal, " /" es simplemente un operador binario que aplica la expresión en su lado derecho a cada elemento seleccionado a su vez por la expresión en el lado izquierdo. Por lo tanto, en este ejemplo, la expresión aselecciona todos los elementos secundarios del nodo de contexto que se denominan <a>; luego, la expresión child::bse aplica a cada uno de estos nodos, seleccionando todos los <b>elementos secundarios de los <a>elementos; y child::cluego, la expresión se aplica a cada nodo en esta secuencia, que selecciona todos los <c>elementos secundarios de estos <b>elementos.
El /operador " " se generaliza en XPath 2.0 para permitir que cualquier tipo de expresión se utilice como operando: en XPath 1.0, el lado derecho siempre era un paso de eje. Por ejemplo, una llamada de función se puede utilizar en el lado derecho. Las reglas de tipificación 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, se eliminan los duplicados 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: estos no han cambiado mucho con respecto a 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 utilizando 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 expresión, por turno, haciendo referencia a ese valor mediante la variable reference .
for $x in X return YYX$x
Biblioteca de funciones
La biblioteca de funciones de XPath 2.0 es mucho más amplia que la biblioteca de funciones de XPath 1.0. ( Los elementos en negrita están disponibles en XPath 1.0)
Las funciones disponibles incluyen las siguientes:
Compatibilidad con versiones anteriores
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 flexible en cuanto a la conversión de tipos; por ejemplo, comparar dos cadenas ( "4" > "4.0") era bastante posible, pero se hacía una comparación numérica; en XPath 2.0 esto se define para comparar los dos valores como cadenas utilizando una secuencia de intercalación definida por el contexto.
Para facilitar la transición, XPath 2.0 define un modo de ejecución en el que se modifica la semántica para que sea lo más parecida posible al comportamiento de XPath 1.0. Cuando se utiliza XSLT 2.0 , este modo se activa estableciendo version="1.0"como atributo en el xsl:stylesheetelemento. Esto todavía no ofrece una compatibilidad del 100 %, pero es probable que las diferencias restantes solo se encuentren en casos inusuales.
Apoyo
El soporte para XPath 2.0 aún es limitado.
Referencias
- ^ "Cronología de los estándares XML y Web semántica del W3C" (PDF) . 4 de febrero de 2012.
Enlaces externos
- Especificación XPath 2.0
- Novedades de XPath 2.0