Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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$Stepmind QName-nek számítanak.AWMIegy előtag, ésroot,LocationésStepmind helyi nevek.A
$stepvá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.