Freigeben über


Pfadausdrücke – Verwenden abgekürzter Syntax

Gilt für:SQL Server

Alle Beispiele unter Grundlegendes zu Pfadausdrücken in XQuery verwenden nicht abgekürzte Syntax für Pfadausdrücke. Die ungekürzte Syntax für einen Achsenschritt in einem Pfadausdruck umfasst den Achsennamen und den Knotentest, getrennt durch einen Doppelpunkt und gefolgt von null oder mehr Schrittqualifizierern.

Beispiel:

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

XQuery unterstützt die folgenden Abkürzungen für die Verwendung in path-Ausdrücken:

  • Die untergeordnete Achse ist die Standardachse. Daher kann die achse child:: in einem Schritt in einem Ausdruck weggelassen werden. So kann z. B. /child::ProductDescription/child::Summary als /ProductDescription/Summary geschrieben werden.

  • Eine Attributachse kann als @abgekürzt werden. So kann z. B. /child::ProductDescription[attribute::ProductModelID=10] als /ProudctDescription[@ProductModelID=10] geschrieben werden.

  • Ein /descendant-or-self::node()/ kann als // abgekürzt werden. So kann z. B. /descendant-or-self::node()/child::act:telephoneNumber als //act:telephoneNumber geschrieben werden.

    Die vorherige Abfrage ruft alle Rufnummern ab, die in der AdditionalContactInfo-Spalte in der Contact-Tabelle gespeichert sind. Das Schema für AdditionalContactInfo ist so definiert, dass ein <telephoneNumber-Element> an einer beliebigen Stelle im Dokument angezeigt werden kann. Aus diesem Grund müssen Sie zum Abrufen aller Rufnummern jeden Knoten im Dokument durchsuchen. Die Suche beginnt im Stamm des Dokuments und wird dann über alle nachfolgenden Knoten fortgesetzt.

    Die folgende Abfrage ruft alle Rufnummern für einen bestimmten Kundenkontakt ab:

    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             
    

    Wenn Sie den Pfadausdruck durch die abgekürzte Syntax //act:telephoneNumber ersetzen, können Sie die gleichen Ergebnisse erzielen.

  • Self ::node() in einem Schritt kann mit einem einzelnen Punkt (.) abgekürzt werden. Der Punkt ist jedoch nicht gleichwertig oder austauschbar mit self::node()..

    In der folgenden Abfrage stellt die Verwendung eines Punkts z. B. einen Wert und keinen Knoten dar:

    ("abc", "cde")[. > "b"]  
    
  • Parent ::node() in einem Schritt kann mit einem doppelten Punkt (..) abgekürzt werden.