Introducción al uso de consultas XPath (SQLXML 4.0)
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 los esquemas XSD anotados (SQLXML 4.0) y la norma XPath definida 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 e "Important" 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 un valor de atributo date igual a "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 (/). Todas las consultas XPath deben comenzar por un <ElementType> de nivel superior en el esquema.
Notificación 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, los predicados numéricos y ejes que usan el orden del documento (como following) no se implementan.
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 key-fields o las claves de la anotación relationship pueden dar lugar a un orden del documento determinista. No obstante, éste 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 para implementar los tipos de datos XPath string, number y boolean. Para obtener más información, vea Tipos de datos de XPath (SQLXML 4.0).
Consultas de varios 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
En función del esquema y de la expresión de consulta XPath que se utilicen, los errores de Transact-SQL pueden 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 |
Ejes attribute, child, parent y self. |
|
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 |
|
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 |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
Predicados con valores numéricos |
|
Operadores aritméticos |
mod |
Funciones de nodo |
ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling |
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 incluir caracteres como < o & que tienen significados especiales en XML (y una plantilla es un documento XML). Debe definir estos caracteres como caracteres de escape mediante la codificación de & en XML o especificar XPath en la dirección URL.