Sequence a QNames (XQuery)
platí pro:SQL Server
Toto téma popisuje následující základní koncepty XQuery:
Posloupnost
QNames a předdefinované obory názvů
Posloupnost
V XQuery je výsledkem výrazu sekvence, která se skládá ze seznamu uzlů XML a instancí atomických typů XSD. Jednotlivá položka v sekvenci se označuje jako položka. Položka v sekvenci může být následující:
Uzel, jako je element, atribut, text, zpracování instrukce, komentář nebo dokument
Atomická hodnota, například instance jednoduchého typu XSD
Například následující dotaz vytvoří sekvenci dvou položek prvku-uzel:
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;
Toto je výsledek:
<step1> Step 1 description goes here </step1>
<step2> Step 2 description goes here </step2>
V předchozím dotazu je čárka (,
) na konci <step1>
konstrukce sekvenční konstruktor a je povinný. Prázdné znaky ve výsledcích se přidají jenom pro ilustraci a jsou zahrnuty do všech ukázkových výsledků v této dokumentaci.
Následuje další informace, které byste měli vědět o sekvencích:
Pokud výsledkem dotazu je sekvence, která obsahuje jinou sekvenci, je obsažená sekvence zploštěna do sekvence kontejneru. Například sekvence ((1;2; (3;4;5));6) je v datovém modelu zploštěná jako (1, 2, 3, 4, 5, 6).
DECLARE @x xml; SET @x = ''; SELECT @x.query('(1,2, (3,4,5)),6');
Prázdná sekvence je posloupnost, která neobsahuje žádnou položku. Je reprezentován jako "()".
Sekvenci s jedinou položkou lze považovat za atomovou hodnotu a naopak. To znamená, že (1) = 1.
V této implementaci musí být sekvence homogenní. To znamená, že máte posloupnost atomických hodnot nebo posloupnost uzlů. Například následující jsou platné sekvence:
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>');
Následující dotaz vrátí chybu, protože heterogenní sekvence nejsou podporovány.
SELECT @x.query('<x>11</x>, 22');
QName
Každý identifikátor v XQuery je QName. QName se skládá z předpony oboru názvů a místního názvu. V této implementaci jsou názvy proměnných v XQuery QNames a nemohou mít předpony.
Podívejte se na následující příklad, ve kterém je dotaz zadán proti nezatypované xml proměnné:
DECLARE @x xml;
SET @x = '<Root><a>111</a></Root>';
SELECT @x.query('/Root/a');
Ve výrazu (/Root/a
), Root
a a
jsou QNames.
V následujícím příkladu je dotaz zadán pro zadaný xml sloupec. Dotaz iteruje všechny <krok> elementy v prvním umístění pracovního centra.
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;
Ve výrazu dotazu si všimněte následujících věcí:
AWMI root
,AWMI:Location
,AWMI:step
a$Step
jsou všechny názvy QName.AWMI
je předpona aroot
,Location
aStep
jsou všechny místní názvy.Proměnná
$step
je QName a nemá předponu.
Následující obory názvů jsou předdefinované pro použití s podporou XQuery v SQL Serveru.
Předpona | Identifikátor 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 |
(bez předpony) | urn:schemas-microsoft-com:xml-sql |
sqltypes | https://schemas.microsoft.com/sqlserver/2004/sqltypes |
xml | http://www.w3.org/XML/1998/namespace |
(bez předpony) | https://schemas.microsoft.com/sqlserver/2004/SOAP |
Každá databáze, kterou vytvoříte, má kolekci schématu sys XML. Tato schémata si vyhrazuje, aby k nim bylo možné přistupovat z jakékoli kolekce schémat XML vytvořené uživatelem.
Poznámka
Tato implementace nepodporuje předponu local
, jak je popsáno ve specifikaci XQuery v http://www.w3.org/2004/07/xquery-local-functions.
Viz také
základy XQuery