Sdílet prostřednictvím


Výrazy cesty – použití zkrácené syntaxe

platí pro:SQL Server

Všechny příklady v Path Expressions (XQuery) používají neabbreviated syntaxi pro výrazy cesty. Neabbreviovaná syntaxe kroku osy ve výrazu cesty obsahuje název osy a test uzlu oddělený dvojitým dvojtečkam a za ním nula nebo více kvalifikátorů kroku.

Například:

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

XQuery podporuje následující zkratky pro použití ve výrazech cesty:

  • Osa child je výchozí osa. Proto lze osu child:: vynechat z kroku ve výrazu. Například /child::ProductDescription/child::Summary lze zapsat jako /ProductDescription/Summary.

  • Osu attribute lze zkrátit na @. Například /child::ProductDescription[attribute::ProductModelID=10] lze zapsat jako /ProductDescription[@ProductModelID=10].

  • A /descendant-or-self::node()/ může být zkrácena jako //. Například /descendant-or-self::node()/child::act:telephoneNumber lze zapsat jako //act:telephoneNumber.

    Předchozí dotaz načte všechna telefonní čísla uložená ve sloupci AdditionalContactInfo v tabulce Kontakt. Schéma AdditionalContactInfo je definováno způsobem, který <telephoneNumber> element může objevit kdekoli v dokumentu. Pokud tedy chcete načíst všechna telefonní čísla, musíte vyhledat každý uzel v dokumentu. Hledání začíná v kořenovém adresáři dokumentu a pokračuje ve všech následnických uzlech.

    Následující dotaz načte všechna telefonní čísla pro konkrétní kontakt zákazníka:

    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;
    

    Pokud výraz cesty nahradíte zkrácenou syntaxí, //act:telephoneNumber, obdržíte stejné výsledky.

  • V self::node() kroku lze zkrátit na jednu tečku (.). Tečka však není ekvivalentní ani zaměnitelná s tečkou self::node().

    Například v následujícím dotazu představuje použití tečky hodnotu, nikoli uzel:

    ("abc", "cde")[. > "b"]
    
  • V parent::node() kroku lze zkrátit na dvojitou tečku (..).