Condividi tramite


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 (..).