Bagikan melalui


Ekspresi Jalur - Menggunakan Sintaks yang Disingkat

Berlaku untuk:SQL Server

Semua contoh dalam Ekspresi Jalur (XQuery) menggunakan sintaksis yang tidak disingkat untuk ekspresi jalur. Sintaksis yang tidak disingkat untuk langkah sumbu dalam ekspresi jalur mencakup nama sumbu dan pengujian simpul, dipisahkan oleh titik dua, dan diikuti oleh kualifikasi langkah nol atau lebih.

Contohnya:

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

XQuery mendukung singkatan berikut untuk digunakan dalam ekspresi jalur:

  • Sumbu child adalah sumbu default. Oleh karena itu, child:: sumbu dapat dihilangkan dari langkah dalam ekspresi. Misalnya, /child::ProductDescription/child::Summary dapat ditulis sebagai /ProductDescription/Summary.

  • Sumbu attribute dapat disingkat sebagai @. Misalnya, /child::ProductDescription[attribute::ProductModelID=10] dapat ditulis sebagai /ProductDescription[@ProductModelID=10].

  • Dapat /descendant-or-self::node()/ disingkat sebagai //. Misalnya, /descendant-or-self::node()/child::act:telephoneNumber dapat ditulis sebagai //act:telephoneNumber.

    Kueri sebelumnya mengambil semua nomor telepon yang disimpan di kolom AdditionalContactInfo di tabel Kontak. Skema untuk AdditionalContactInfo didefinisikan dengan cara agar <elemen telephoneNumber> dapat muncul di mana saja dalam dokumen. Oleh karena itu, untuk mengambil semua nomor telepon, Anda harus mencari setiap simpul dalam dokumen. Pencarian dimulai di akar dokumen dan berlanjut melalui semua simpul turunan.

    Kueri berikut mengambil semua nomor telepon untuk kontak pelanggan tertentu:

    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;
    

    Jika Anda mengganti ekspresi jalur dengan sintaks yang disingkat, //act:telephoneNumber, Anda menerima hasil yang sama.

  • Dalam self::node() satu langkah dapat disingkat ke satu titik (.). Namun, titik tidak setara atau dapat dipertukarkan dengan self::node().

    Misalnya, dalam kueri berikut, penggunaan titik mewakili nilai dan bukan simpul:

    ("abc", "cde")[. > "b"]
    
  • Dalam parent::node() satu langkah dapat disingkat ke titik ganda (..).