Modul dan Prolog - XQuery Prolog
Berlaku untuk:SQL Server
Kueri XQuery terdiri dari prolog dan isi. Prolog XQuery adalah serangkaian deklarasi dan definisi yang bersama-sama membuat lingkungan yang diperlukan untuk pemrosesan kueri. Di SQL Server, prolog XQuery dapat menyertakan deklarasi namespace layanan. Isi XQuery terdiri dari urutan ekspresi yang menentukan hasil kueri yang dimaksudkan.
Misalnya, XQuery berikut ditentukan terhadap kolom Instruksi jenis xml yang menyimpan instruksi manufaktur sebagai XML. Kueri mengambil instruksi manufaktur untuk lokasi 10
pusat kerja . Metode query()
tipe data xml digunakan untuk menentukan XQuery.
SELECT Instructions.query('declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/AWMI:root/AWMI:Location[@LocationID=10]
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7
Perhatikan hal berikut ini dari kueri sebelumnya:
Prolog XQuery menyertakan deklarasi
(namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
awalan namespace (AWMI), .Kata
declare namespace
kunci menentukan awalan namespace yang digunakan nanti di isi kueri./AWMI:root/AWMI:Location[@LocationID="10"]
adalah isi kueri.
Deklarasi Namespace Layanan
Deklarasi namespace menentukan awalan dan mengaitkannya dengan URI namespace, seperti yang diperlihatkan dalam kueri berikut. Dalam kueri, CatalogDescription
adalah kolom jenis xml .
Dalam menentukan XQuery terhadap kolom ini, prolog kueri menentukan declare namespace
deklarasi untuk mengaitkan awalan PD
, deskripsi produk, dengan URI namespace. Awalan ini kemudian digunakan dalam isi kueri alih-alih URI namespace. Simpul dalam XML yang dihasilkan berada di namespace yang terkait dengan URI namespace.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
where ProductModelID=19
Untuk meningkatkan keterbacaan kueri, Anda dapat mendeklarasikan namespace dengan menggunakan WITH XMLNAMESPACES alih-alih mendeklarasikan awalan dan pengikatan namespace dalam prolog kueri dengan menggunakan declare namespace
.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD)
SELECT CatalogDescription.query('
/PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
where ProductModelID=19
Untuk informasi selengkapnya, lihat Menambahkan Namespace ke Kueri dengan DENGAN XMLNAMESPACES.
Deklarasi Namespace Default
Alih-alih mendeklarasikan awalan namespace dengan menggunakan declare namespace
deklarasi, Anda dapat menggunakan declare default element namespace
deklarasi untuk mengikat namespace default untuk nama elemen. Dalam hal ini, Anda tidak menentukan awalan apa pun.
Dalam contoh berikut, ekspresi jalur dalam isi kueri tidak menentukan awalan namespace. Secara default, semua nama elemen termasuk dalam namespace default yang ditentukan dalam prolog.
SELECT CatalogDescription.query('
declare default element namespace "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/ProductDescription/Summary
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19
Anda dapat mendeklarasikan namespace default dengan menggunakan WITH XMLNAMESPACES:
WITH XMLNAMESPACES (DEFAULT 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription')
SELECT CatalogDescription.query('
/ProductDescription/Summary
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19