Sdílet prostřednictvím


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:stepa $Step jsou všechny názvy QName. AWMI je předpona a root, Locationa Step 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