Espressioni di percorso - Uso di sintassi abbreviata
Si applica a: SQL Server
Tutti gli esempi in Informazioni sulle espressioni di percorso in XQuery usano la sintassi non usata per le espressioni di percorso. La sintassi non abbreviata per un passo dell'asse in un'espressione di percorso include il nome dell'asse e il test di nodo, separati da una coppia di due punti e seguiti da zero o più qualificatori di passo.
Ad esempio:
child::ProductDescription[attribute::ProductModelID=19]
Nelle espressioni di percorso, XQuery supporta le abbreviazioni seguenti:
L'asse figlio è l'asse predefinito. Pertanto, l'asse child:: può essere omesso da un passaggio in un'espressione. Ad esempio, è possibile scrivere
/child::ProductDescription/child::Summary
nel formato/ProductDescription/Summary
.Un asse degli attributi può essere abbreviato come @. Ad esempio, è possibile scrivere
/child::ProductDescription[attribute::ProductModelID=10]
nel formato/ProductDescription[@ProductModelID=10]
.Un /descendant-or-self::node()/ può essere abbreviato come //. Ad esempio, è possibile scrivere
/descendant-or-self::node()/child::act:telephoneNumber
nel formato//act:telephoneNumber
.La query precedente recupera tutti i numeri di telefono archiviati nella colonna AdditionalContactInfo della tabella Contact. Lo schema per AdditionalContactInfo viene definito in modo che un <elemento telephoneNumber> possa essere visualizzato in qualsiasi punto del documento. Per recuperare tutti i numeri di telefono, pertanto, è necessario eseguire la ricerca in ogni nodo del documento. La ricerca inizia alla radice del documento e continua in tutti i nodi discendenti.
La query seguente recupera tutti i numeri di telefono relativi a un contatto di un cliente specifico:
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 si sostituisce l'espressione di percorso con la sintassi abbreviata
//act:telephoneNumber
, si ottengono gli stessi risultati.Self ::node() in un passaggio può essere abbreviato in un singolo punto (.). Tuttavia, il punto non è equivalente o intercambiabile con self::node().
Ad esempio, nella query seguente, l'utilizzo di un punto rappresenta un valore e non un nodo:
("abc", "cde")[. > "b"]
L'elemento padre::node() in un passaggio può essere abbreviato in un punto doppio (..).