Compartir a través de


Expresiones de ruta de acceso: Usar una sintaxis abreviada

Se aplica a:SQL Server

Todos los ejemplos de Descripción de las expresiones de ruta de acceso en XQuery usan sintaxis noviada para expresiones de ruta de acceso. La sintaxis no abreviada para un paso de eje en una expresión de ruta de acceso incluye el nombre del eje y la prueba de nodo, separados por dos puntos dobles, y seguidos por cero o más calificadores de paso.

Por ejemplo:

child::ProductDescription[attribute::ProductModelID=19]  

XQuery admite las siguientes abreviaturas para usarlas con expresiones de ruta de acceso:

  • El eje secundario es el eje predeterminado. Por lo tanto, el eje child:: se puede omitir en un paso de una expresión. Por ejemplo, /child::ProductDescription/child::Summary puede escribirse como /ProductDescription/Summary.

  • Un eje de atributos se puede abreviar como @. Por ejemplo, /child::ProductDescription[attribute::ProductModelID=10] puede escribirse como /ProudctDescription[@ProductModelID=10].

  • Un /descendant-or-self::node()/ se puede abreviar como //. Por ejemplo, /descendant-or-self::node()/child::act:telephoneNumber puede escribirse como //act:telephoneNumber.

    La consulta anterior recupera todos los números de teléfono almacenados en la columna AdditionalContactInfo de la tabla Contact. El esquema de AdditionalContactInfo se define de forma que un <elemento telephoneNumber> pueda aparecer en cualquier parte del documento. Por tanto, para recuperar todos los números de teléfono, debe buscar cada nodo del documento. Esta búsqueda se inicia en la raíz del documento y continúa en todos los nodos descendientes.

    La consulta siguiente recupera todos los números de teléfono para un contacto de cliente específico:

    SELECT AdditionalContactInfo.query('             
                declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";             
                declare namespace crm="https://schemas.adventure-works.com/Contact/Record";             
                declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";             
                /descendant-or-self::node()/child::act:telephoneNumber             
                ') as result             
    FROM Person.Contact             
    WHERE ContactID=1             
    

    Si reemplaza la expresión de ruta de acceso por la sintaxis abreviada, //act:telephoneNumber, obtendrá los mismos resultados.

  • El elemento self::node() de un paso se puede abreviar a un solo punto (.). Sin embargo, el punto no es equivalente o intercambiable con self::node().

    Por ejemplo, en la consulta siguiente, el uso de un punto representa un valor y no un nodo:

    ("abc", "cde")[. > "b"]  
    
  • El elemento primario::node() de un paso se puede abreviar a un punto doble (..).