Introducción al uso de consultas XPath (SQLXML 4.0)
Se aplica a: SQL ServerAzure SQL Database
Una consulta XPath (Lenguaje de rutas XML) puede especificarse como parte de una dirección URL o dentro de una plantilla. El esquema de asignación determina la estructura de este fragmento resultante y los valores se recuperan de la base de datos. Este proceso es conceptualmente similar a crear vistas utilizando la instrucción CREATE VIEW y escribir consultas SQL en ellas.
Nota:
Para entender las consultas XPath en SQLXML 4.0, debe estar familiarizado con las vistas XML y otros conceptos relacionados, como las plantillas y el esquema de asignación. Para obtener más información, vea Introducción a esquemas XSD anotados (SQLXML 4.0) y el estándar XPath definido por World Wide Web Consortium (W3C).
Un documento XML consta de nodos, como un nodo de elemento, un nodo de atributo, un nodo de texto, etc. Por ejemplo, fíjese en este documento XML:
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
En este documento, <Customer> es un nodo de elemento, cid es un nodo de atributo y "Importante" es un nodo de texto.
XPath es un lenguaje de navegación de grafos que se usa para seleccionar un conjunto de nodos de un documento XML. Cada operador XPath selecciona un conjunto de nodos basándose en un conjunto de nodos seleccionado por un operador XPath anterior. Por ejemplo, dado un conjunto de <nodos customer>, XPath puede seleccionar todos los <nodos Order> con el valor del atributo date de "7/14/1999". El conjunto de nodos resultante contiene todos los pedidos con la fecha de pedido 7/14/1999.
World Wide Web Consortium (W3C) define el lenguaje XPath como un lenguaje de navegación estándar. SQLXML 4.0 implementa un subconjunto de la especificación XPath de W3C, que se encuentra en http://www.w3.org/TR/1999/PR-xpath-19991008.html.
A continuación se muestran las diferencias que existen entre la implementación XPath de W3C y la implementación SQLXML 4.0.
Consultas raíz
SQLXML 4.0 no admite la consulta raíz (/). Cada consulta XPath debe comenzar en un ElementType> de nivel <superior en el esquema.
Informes de errores
La especificación XPath de W3C no define ninguna condición de error. Las consultas XPath que no pueden seleccionar ningún nodo devuelven un conjunto de nodos vacío. En SQLXML 4.0, una consulta puede devolver muchos tipos de mensajes de error.
Orden del documento
En SQLXML 4.0, el orden del documento no siempre viene determinado. Por lo tanto, no se implementan predicados numéricos y ejes que usan el orden del documento (como el siguiente).
La falta de orden del documento también significa que el valor de cadena de un nodo solamente puede evaluarse cuando ese nodo se asigna a una única columna en una única fila. Un elemento con elementos secundarios o un nodo NMTOKENS o IDREFS no puede convertirse en una cadena.
Nota:
En algunos casos, la anotación o las claves de los campos clave de la anotación de relación pueden dar lugar a un orden de documento determinista. Sin embargo, este no es el uso principal de estas anotaciones Para obtener más información, vea Identificar columnas de clave mediante sql:key-fields (SQLXML 4.0) y Especificar relaciones mediante sql:relationship (SQLXML 4.0).
Tipos de datos
SQLXML 4.0 tiene limitaciones en la implementación de los tipos de datos XPath string, number y boolean . Para obtener más información, consulte Tipos de datos XPath (SQLXML 4.0).
Consultas entre productos
SQLXML 4.0 no admite consultas XPath de varios productos, como
Customers[Order/@OrderDate=Order/@ShipDate]
. Esta consulta selecciona todos los clientes (Customers) con algún pedido (Order) para el que la fecha de pedido (OrderDate) sea igual a la fecha de envío (ShipDate) de algún pedido (Order).Sin embargo, SQLXML 4.0 sí admite consultas como
Customer[Order[@OrderDate=@ShippedDate]]
, que selecciona los clientes (Customers) con algún pedido (Order) para el que la fecha de pedido (OrderDate) sea igual a la fecha de envío (ShipDate).Control de errores y seguridad
Según el esquema y la expresión de consulta XPath que se usan, los errores de Transact-SQL podrían exponerse a los usuarios en determinadas condiciones.
En las tablas de las siguientes secciones se proporcionan detalles sobre las diferencias que existen entre la implementación de consultas XPath en SQLXML 4.0 y la especificación W3C en lo que respecta estas áreas.
Funcionalidad compatible
En la siguiente tabla se muestran las características del lenguaje XPath que se implementan en SQLXML 4.0.
Característica | Elemento | Vínculo a consultas de ejemplo |
---|---|---|
Ejes | atributos, elementos secundarios, primarios y ejes independientes | Especificar ejes en consultas XPath (SQLXML 4.0) |
Predicados con valores booleanos que incluyen predicados sucesivos y anidados | Especificar operadores aritméticos en consultas XPath (SQLXML 4.0) | |
Todos los operadores relacionales | =, !=, <, <=, >, >= | Especificar operadores relacionales en consultas XPath (SQLXML 4.0) |
Operadores aritméticos | +, -, *, div | Especificar operadores aritméticos en consultas XPath (SQLXML 4.0) |
Funciones de conversión explícita | number(), string(), Boolean() | Especificar funciones de conversión explícita en consultas XPath (SQLXML 4.0) |
Operadores booleanos | AND, OR | Especificar operadores booleanos en consultas XPath (SQLXML 4.0) |
funciones booleanas | true(), false(), not() | Especificar funciones booleanas en consultas XPath (SQLXML 4.0) |
variables de XPath | Especificar variables XPath en consultas XPath (SQLXML 4.0) |
Funcionalidad incompatible
En la siguiente tabla se muestran las características del lenguaje XPath que no se implementan en SQLXML 4.0.
Característica | Elemento |
---|---|
Ejes | antecesor, antecesor o propio, descendiente, descendiente o propio (//),, después, siguiente, relacionado siguiente, espacio de nombres, anterior, relacionado anterior |
Predicados con valores numéricos | |
Operadores aritméticos | mod |
Funciones de nodo | antecesor, antecesor o propio, descendiente, descendiente o propio (//),, después, siguiente, relacionado siguiente, espacio de nombres, anterior, relacionado anterior |
Funciones de cadena | string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate() |
funciones booleanas | lang() |
Funciones numéricas | sum(), floor(), ceiling(), round() |
Operador de unión | | |
Cuando especifique consultas XPath en una plantilla, tenga en cuenta el siguiente comportamiento:
- XPath puede contener caracteres como < o y que tienen significados especiales en XML (y la plantilla es un documento XML). Debe escapar estos caracteres mediante la codificación XML o especificar el XPath en la dirección URL.