Partekatu bidez


Expresiones de ruta de acceso: Usar una sintaxis abreviada

Se aplica a:SQL Server

Todos los ejemplos de Expresiones de ruta de acceso (XQuery) usan la sintaxis noviada para las 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 child eje es el eje predeterminado. Por lo tanto, el child:: eje se puede omitir en un paso de una expresión. Por ejemplo, /child::ProductDescription/child::Summary puede escribirse como /ProductDescription/Summary.

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

  • Se /descendant-or-self::node()/ 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.

  • En self::node() un paso se puede abreviar a un único 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"]
    
  • En parent::node() un paso se puede abreviar a un punto doble (..).