Megosztás:


Sorozat és QNames (XQuery)

A következőkre vonatkozik:SQL Server

Ez a témakör az XQuery alábbi alapvető fogalmait ismerteti:

  • Következés

  • QNames és előre definiált névterek

Következés

Az XQueryben a kifejezés eredménye egy olyan sorozat, amely az XML-csomópontok és az XSD-atomtípusok példányainak listájából áll. A sorozat egyes bejegyzését elemnek nevezzük. A sorozat elemei a következők lehetnek:

  • Csomópont, például elem, attribútum, szöveg, feldolgozási utasítás, megjegyzés vagy dokumentum

  • Atomi érték, például egy egyszerű XSD-típus példánya

A következő lekérdezés például két elemcsomópont-elem sorozatát hozza létre:

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;  
  

Ez az eredmény:

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

Az előző lekérdezésben a <step1> konstrukció végén található vessző (,) a sorozatkonstruktor, és szükséges. Az eredményekben szereplő fehér szóközök csak illusztrációként jelennek meg, és a jelen dokumentációban szereplő összes példaeredmény tartalmazza.

Az alábbiakban további információkat talál a sorozatokról:

  • Ha egy lekérdezés egy másik sorozatot tartalmazó sorozatot eredményez, a rendszer a tárolóütemezésbe lapozza a tárolt sorozatot. Például a sorozat ((1,2, (3,4,5)),6) az adatmodellben (1, 2, 3, 4, 5, 6) van összeolvadva.

    DECLARE @x xml;  
    SET @x = '';  
    SELECT @x.query('(1,2, (3,4,5)),6');  
    
  • Az üres sorozat olyan sorozat, amely nem tartalmaz elemet. "()" néven jelenik meg.

  • A csak egy elemet tartalmazó sorozatok atomi értékként kezelhetők, és fordítva. Vagyis( 1) = 1.

Ebben a megvalósításban a sorozatnak homogénnek kell lennie. Vagyis vagy atomi értékek sorozatával vagy csomópontok sorozatával rendelkezik. A következők például érvényes sorozatok:

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

Az alábbi lekérdezés hibát ad vissza, mert a heterogén sorozatok nem támogatottak.

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

QName

Az XQuery minden azonosítója egy QName. A QName névtérelőtagból és helyi névből áll. Ebben az implementációban az XQuery változónevei QName-ek, és nem rendelkeznek előtagokkal.

Tekintse meg az alábbi példát, amelyben egy lekérdezést egy nem beírt xml- változóhoz ad meg:

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

A kifejezés (/Root/a) Root és a QNames.

Az alábbi példában egy beírt xml- oszlophoz van megadva lekérdezés. A lekérdezés az első workcenter-helyen> összes <lépésen végiglép.

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;  

A lekérdezési kifejezésben jegyezze fel a következőket:

  • AWMI root, AWMI:Location, AWMI:stepés $Step mind QName-nek számítanak. AWMI egy előtag, és root, Locationés Step mind helyi nevek.

  • A $step változó egy QName, és nincs előtagja.

A következő névterek előre definiálva vannak az SQL Server XQuery-támogatásához.

Előképző 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
(nincs előtag) urn:schemas-microsoft-com:xml-sql
sqltypes https://schemas.microsoft.com/sqlserver/2004/sqltypes
xml http://www.w3.org/XML/1998/namespace
(nincs előtag) https://schemas.microsoft.com/sqlserver/2004/SOAP

Minden létrehozott adatbázis rendelkezik a sys XML-sémagyűjteményével. Fenntartja ezeket a sémákat, hogy bármely felhasználó által létrehozott XML-sémagyűjteményből elérhetők legyenek.

Jegyzet

Ez az implementáció nem támogatja a local előtagot az http://www.w3.org/2004/07/xquery-local-functionsXQuery specifikációjában leírtak szerint.

Lásd még:

XQuery basics