Verwenden abgekürzter Syntax in einem Pfadausdruck

Alle Beispiele in Understanding the Path Expressions in XQuery verwenden abgekürzte Syntax für path-Ausdrü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 child-Achse ist die Standardachse. Daher kann die child::-Achse in einem Schritt in einem Ausdruck ausgelassen werden. So kann z. B. /child::ProductDescription/child::Summary als /ProductDescription/Summary geschrieben werden.

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

  • Eine /descendant-or-self::node()/-Achse kann abgekürzt werden zu //. 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 wird so definiert, dass ein <telephoneNumber>-Element an beliebiger Position im Dokument auftreten 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="http://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.

  • Die self::node()-Achse in einem Schritt kann zu einem einzelnen Punkt (.) abgekürzt werden. Der Punkt ist jedoch nicht äquivalent 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"]
    
  • Die parent::node()-Achse in einem Schritt kann zu zwei Punkten (..) abgekürzt werden.