Expressões de Caminho – Usar Sintaxe Abreviada
Aplica-se a:SQL Server
Todos os exemplos em Noções básicas sobre as expressões de caminho em XQuery usam sintaxe não abreviada para expressões de caminho. A sintaxe não abreviada para uma etapa de eixo em uma expressão de caminho inclui o nome de eixo e teste de nó, separados por dois-pontos duplos e seguidos por zero ou mais qualificadores de etapa.
Por exemplo:
child::ProductDescription[attribute::ProductModelID=19]
O XQuery oferece suporte para as abreviações a seguir para uso em expressões de caminho:
O eixo filho é o eixo padrão. Portanto, o eixo child:: pode ser omitido de uma etapa em uma expressão. Por exemplo,
/child::ProductDescription/child::Summary
pode ser escrito como/ProductDescription/Summary
.Um eixo de atributo pode ser abreviado como @. Por exemplo,
/child::ProductDescription[attribute::ProductModelID=10]
pode ser escrito como/ProudctDescription[@ProductModelID=10]
.Um /descendant-or-self::node()/ pode ser abreviado como //. Por exemplo,
/descendant-or-self::node()/child::act:telephoneNumber
pode ser escrito como//act:telephoneNumber
.A consulta anterior recupera todos os números de telefone armazenados na coluna AdditionalContactInfo na tabela Contact. O esquema de AdditionalContactInfo é definido de uma forma que um <elemento telephoneNumber> pode aparecer em qualquer lugar no documento. Então, para recuperar todos os números de telefone, você deve pesquisar cada nó no documento. A pesquisa inicia na raiz do documento e continua por todos os nós descendentes.
A consulta a seguir recupera todos os números de telefone de um contato 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
Se você substituir a expressão de caminho com a sintaxe abreviada,
//act:telephoneNumber
, receberá os mesmos resultados.O self::node() em uma etapa pode ser abreviado para um único ponto (.). No entanto, o ponto não é equivalente ou intercambiável com self ::node().
Por exemplo, na consulta a seguir, o uso de um ponto representa um valor e não um nó:
("abc", "cde")[. > "b"]
O parent::node() em uma etapa pode ser abreviado para um ponto duplo (..).