Bagikan melalui


Urutan dan QNames (XQuery)

Berlaku untuk:SQL Server

Topik ini menjelaskan konsep dasar XQuery berikut:

  • Sequence

  • QNames dan namespace yang telah ditentukan sebelumnya

Sequence

Di XQuery, hasil ekspresi adalah urutan yang terdiri dari daftar simpul XML dan instans jenis atom XSD. Entri individual dalam urutan disebut sebagai item. Item dalam urutan bisa berupa salah satu dari yang berikut ini:

  • Simpul seperti elemen, atribut, teks, instruksi pemrosesan, komentar, atau dokumen

  • Nilai atom seperti instans jenis sederhana XSD

Misalnya, kueri berikut membuat urutan dua item elemen-node:

SELECT Instructions.query('  
     <step1> Step 1 description goes here</step1>,  
     <step2> Step 2 description goes here </step2>  
') AS Result  
FROM Production.ProductModel  
WHERE ProductModelID=7;  
  

Ini adalah hasilnya:

<step1> Step 1 description goes here </step1>  
<step2> Step 2 description goes here </step2>   

Dalam kueri sebelumnya, koma (,) di akhir <step1> konstruksi adalah konstruktor urutan dan diperlukan. Spasi kosong dalam hasil ditambahkan hanya untuk ilustrasi dan disertakan dalam semua contoh hasil dalam dokumentasi ini.

Berikut ini adalah informasi tambahan yang harus Anda ketahui tentang urutan:

  • Jika kueri menghasilkan urutan yang berisi urutan lain, urutan yang terkandung diratakan ke dalam urutan kontainer. Misalnya, urutan ((1,2, (3,4,5)),6) diratakan dalam model data sebagai (1, 2, 3, 4, 5, 6).

    DECLARE @x xml;  
    SET @x = '';  
    SELECT @x.query('(1,2, (3,4,5)),6');  
    
  • Urutan kosong adalah urutan yang tidak berisi item apa pun. Ini direpresentasikan sebagai "()".

  • Urutan dengan hanya satu item dapat diperlakukan sebagai nilai atomik, dan sebaliknya. Artinya, (1) = 1.

Dalam implementasi ini, urutannya harus homogen. Artinya, Anda memiliki urutan nilai atom atau urutan simpul. Misalnya, berikut ini adalah urutan yang valid:

DECLARE @x xml;  
SET @x = '';  
-- Expression returns a sequence of 1 text node (singleton).  
SELECT @x.query('1');  
-- Expression returns a sequence of 2 text nodes  
SELECT @x.query('"abc", "xyz"');  
-- Expression returns a sequence of one atomic value. data() returns  
-- typed value of the node.  
SELECT @x.query('data(1)');  
-- Expression returns a sequence of one element node.   
-- In the expression XML construction is used to construct an element.  
SELECT @x.query('<x> {1+2} </x>');  

Kueri berikut mengembalikan kesalahan, karena urutan heterogen tidak didukung.

SELECT @x.query('<x>11</x>, 22');  

QName

Setiap pengidentifikasi dalam XQuery adalah QName. QName terdiri dari awalan namespace dan nama lokal. Dalam implementasi ini, nama variabel dalam XQuery adalah QNames dan tidak dapat memiliki awalan.

Pertimbangkan contoh berikut di mana kueri ditentukan terhadap variabel xml yang tidak dititip:

DECLARE @x xml;  
SET @x = '<Root><a>111</a></Root>';  
SELECT @x.query('/Root/a');  

Dalam ekspresi (/Root/a), Root dan a adalah QNames.

Dalam contoh berikut, kueri ditentukan terhadap kolom xml yang ditik. Kueri berulang di semua <elemen langkah> di lokasi pusat kerja pertama.

SELECT Instructions.query('  
   declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
for $Step in /AWMI:root/AWMI:Location[1]/AWMI:step  
      return  
           string($Step)   
') AS Result  
FROM Production.ProductModel  
WHERE ProductModelID=7;  

Dalam ekspresi kueri, perhatikan hal berikut:

  • AWMI root, , AWMI:LocationAWMI:step, dan $Step semua QName. AWMI adalah awalan, dan root, Location, dan Step semua nama lokal.

  • Variabel $step adalah QName dan tidak memiliki awalan.

Namespace berikut telah ditentukan sebelumnya untuk digunakan dengan dukungan XQuery di SQL Server.

Awalan URI
xs http://www.w3.org/2001/XMLSchema
xsi http://www.w3.org/2001/XMLSchema-instance
xdt http://www.w3.org/2004/07/xpath-datatypes
Fn http://www.w3.org/2004/07/xpath-functions
(tanpa awalan) urn:schemas-microsoft-com:xml-sql
sqltypes https://schemas.microsoft.com/sqlserver/2004/sqltypes
xml http://www.w3.org/XML/1998/namespace
(tanpa awalan) https://schemas.microsoft.com/sqlserver/2004/SOAP

Setiap database yang Anda buat memiliki koleksi skema XML sys . Ini mencadangkan skema ini sehingga dapat diakses dari koleksi skema XML yang dibuat pengguna.

Catatan

Implementasi ini tidak mendukung awalan local seperti yang dijelaskan dalam spesifikasi XQuery di http://www.w3.org/2004/07/xquery-local-functions.

Lihat Juga

Dasar-Dasar XQuery