Share via


Expresiones de ruta de acceso (XQuery)

Estas expresiones buscan nodos, tales como element, attribute y text, en un documento. El resultado de una expresión de ruta de acceso siempre se produce en el orden de los documentos sin nodos duplicados en la secuencia resultante. Al especificar una ruta de acceso, se puede utilizar sintaxis abreviada o sin abreviar. La información siguiente se centra en la sintaxis sin abreviar. La sintaxis abreviada se describe más adelante en este tema.

Nota

Puesto que las consultas de ejemplo de este tema se especifican con las columnas de tipo xml, CatalogDescription e Instructions, en la tabla ProductModel, es recomendable familiarizarse con el contenido y la estructura de los documentos XML almacenados en estas columnas. Para obtener más información, consulte Representación de tipo de datos xml en la base de datos AdventureWorks2008R2.

Una expresión de ruta de acceso puede ser relativa o absoluta. A continuación se ofrece una descripción de ambas:

  • Una expresión de ruta de acceso consta de uno o varios pasos separados por una o dos marcas de barra diagonal (/ o //). Por ejemplo, child::Features es una expresión de ruta de acceso relativa, en la que Child sólo hace referencia a los nodos secundarios del nodo de contexto. Se trata del nodo que se está procesando. La expresión recupera el nodo de elemento secundario <Features> del nodo de contexto.

  • Una expresión de ruta de acceso absoluta empieza con una o dos marcas de barra diagonal (/ o //), seguidas de una ruta de acceso relativa opcional. Por ejemplo, la marca de barra diagonal inicial de la expresión, /child::ProductDescription, indica que se trata de una expresión de ruta de acceso absoluta. Puesto que una marca de barra diagonal al inicio de una expresión devuelve el nodo raíz del documento del nodo de contexto, la expresión devuelve todos los nodos de elemento secundarios <ProductDescription> de la raíz del documento.

    Si una ruta de acceso absoluta empieza con una sola marca de barra diagonal, puede ir seguida o no por una ruta de acceso relativa. Si sólo se especifica una sola marca de barra diagonal, la expresión devolverá el nodo raíz del nodo de contexto. En el caso de un tipo de datos XML, se trata del nodo de su documento.

Una expresión de ruta de acceso se compone de pasos. Por ejemplo, la expresión de ruta de acceso absoluta /child::ProductDescription/child::Summaryincluye dos pasos separados por una marca de barra diagonal.

  • El primer paso recupera los nodos de elemento secundarios <ProductDescription> de la raíz del documento.

  • El segundo paso recupera los nodos de elemento secundarios <Summary> de cada nodo de elemento <ProductDescription> recuperado, que a su vez se convierte en el nodo de contexto.

Los pasos de una expresión de ruta de acceso pueden ser de eje o generales.

Paso de eje

Un paso de eje en una expresión de ruta de acceso está formado por las partes que se indican a continuación.

  • ejes
    Define la dirección del movimiento. Se trata de un paso de eje de una expresión de ruta de acceso que empieza en el nodo de contexto y se desplaza hasta los nodos disponibles en la dirección especificada por el eje.

  • prueba de nodo
    Especifica el tipo de nodo o los nombres de nodo que se seleccionarán.

  • Cero o más predicados opcionales
    Filtra los nodos seleccionando algunos y descartando otros.

En los ejemplos siguientes se utiliza un paso deeje en las expresiones de ruta de acceso:

  • La expresión de ruta de acceso absoluta, /child::ProductDescription, incluye un solo paso. Especifica un eje (child) y una prueba de nodo (ProductDescription).

  • La expresión de ruta de acceso relativa, child::ProductDescription/child::Features, incluye dos pasos separados por una marca de barra diagonal. Ambos pasos especifican un eje secundario. ProductDescription y Features son pruebas de nodos.

  • La expresión de ruta de acceso relativa, child::root/child::Location[attribute::LocationID=10],incluye dos pasos separados por una marca de barra diagonal. El primero especifica un eje (child) y una prueba de nodo (root). El segundo especifica los tres componentes de un paso de eje: un eje (secundario), una prueba de nodo (Location) y un predicado ([attribute::LocationID=10]).

Para obtener más información acerca de los componentes de un paso de eje, vea Especificar ejes en un paso de expresión de ruta de acceso, Especificar una prueba de nodo en un paso de expresión de ruta de acceso y Especificar predicados en un paso de expresión de ruta de acceso.

Paso general

Un paso general es simplemente una expresión que debe dar como resultado una secuencia de nodos.

La implementación de XQuery en SQL Server admite un paso general como primer paso de una expresión de ruta de acceso. A continuación se muestran ejemplos de expresiones de ruta de acceso que utilizan pasos generales.

(/a, /b)/c
id(/a/b)

Para obtener más información acerca de la función id., vea id. (función de XQuery).

En esta sección