Sequence ve QNames (XQuery)

Şunlar için geçerlidir: SQL Server

Bu konu, XQuery'nin aşağıdaki temel kavramlarını açıklar:

  • Sequence

  • QNames ve önceden tanımlanmış isim alanları

Sequence

XQuery'de, bir ifadenin sonucu, XML düğümlerinin ve XSD atomik tiplerinin örneklerinin bir listesinden oluşan bir dizidir. Bir dizideki bireysel bir giriş, bir öğe olarak adlandırılır. Bir dizide bir öğe aşağıdakilerden biri olabilir:

  • Bir öğe, nitelik, metin, işleme talimatı, yorum veya belge gibi bir düğüm

  • XSD basit tipinin bir örneği gibi bir atomik değer

Örneğin, aşağıdaki sorgu iki eleman-düğüm öğesinden oluşan bir dizi oluşturur:

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;  
  

Sonuç şu şekildedir:

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

Önceki sorguda, yapının <step1> sonundaki virgül (,) dizi yapıcısıdır ve gereklidir. Sonuçlardaki boşluklar sadece illüstrasyon için eklenmiştir ve bu dokümantasyondaki tüm örnek sonuçlara dahil edilmiştir.

Aşağıda diziler hakkında bilmeniz gereken ek bilgiler yer almaktadır:

  • Bir sorgu başka bir diziyi içeren bir diziyle sonuçlanırsa, içindeki dizi konteyner dizisine düzleştirilir. Örneğin, ((1,2, (3,4,5)),6) dizi veri modelinde (1, 2, 3, 4, 5, 6) olarak düzleştirilir.

    DECLARE @x xml;  
    SET @x = '';  
    SELECT @x.query('(1,2, (3,4,5)),6');  
    
  • Boş dizi, herhangi bir öğe içermeyen bir dizidir. "()" olarak temsil edilir.

  • Sadece bir öğeden oluşan bir dizi atomik değer olarak kabul edilebilir ve tam tersi de geçerlidir. Yani, (1) = 1.

Bu uygulamada dizinin homojen olması gerekir. Yani, ya bir atomik değerler dizisi ya da bir düğüm dizisi vardır. Örneğin, aşağıdaki geçerli diziler şunlardır:

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>');  

Aşağıdaki sorgu hata verir, çünkü heterojen diziler desteklenmez.

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

QName

Bir XQuery'deki her tanımlayıcı bir QName'dir. QName, bir namespace preeki ve yerel bir isimden oluşur. Bu uygulamada, XQuery'deki değişken isimleri QNames'tir ve önek kullanamazlar.

Aşağıdaki örneği ele alalım; burada bir sorgu tipsiz bir xml değişkenine karşı belirtilmiştir:

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

() Root ifadesinde/Root/a ve a QNames'tir.

Aşağıdaki örnekte, bir sorgu tiplenmiş bir xml sütununa karşı belirtilmiştir. Sorgu, ilk çalışma merkezi konumundaki tüm <adım> öğeleri üzerinde yineleme yapar.

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;  

Sorgu ifadesinde aşağıdakilere dikkat edin:

  • AWMI root, AWMI:Location, AWMI:step, ve $Step hepsi QNames'dir. AWMI bir preektir, ve root, Location, ve Step hepsi yerel isimlerdir.

  • Değişken $step bir QName'dir ve öneki yoktur.

Aşağıdaki isim uzayları, SQL Server'da XQuery desteğiyle kullanılmak üzere önceden tanımlanmıştır.

Önek 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
(ön ek yok) urn:schemas-microsoft-com:xml-sql
sqltypes https://schemas.microsoft.com/sqlserver/2004/sqltypes
XML http://www.w3.org/XML/1998/namespace
(ön ek yok) https://schemas.microsoft.com/sqlserver/2004/SOAP

Oluşturduğunuz her veritabanında sys XML şema koleksiyonu bulunur. Bu şemaları, kullanıcı tarafından oluşturulan herhangi bir XML şema koleksiyonundan erişilebilmeleri için saklar.

Note

Bu uygulama local , XQuery spesifikasyonunda tanımlanan http://www.w3.org/2004/07/xquery-local-functionsön eki desteklemez.