Udostępnij za pośrednictwem


Sekwencja i QNames (XQuery)

W tym temacie opisano następujące podstawowe pojęcia XQuery:

  • Sekwencja

  • QNames i wstępnie zdefiniowanych obszarów nazw

Sekwencja

XQuery wynikiem wyrażenie jest sekwencja, która składa się z listy węzłów XML i wystąpień typów niepodzielny XSD.Pojedynczy wpis w sekwencji nosi nazwę element.Element w sekwencji może być jedną z następujących czynności:

  • Węzeł, na przykład element, atrybut, tekst, instrukcję przetwarzania, komentarz lub dokumentu

  • niepodzielny wartości, takie jak wystąpienie typu prostego pliku XSD

Na przykład poniższa kwerenda konstrukcje sekwencji dwa elementy węzeł elementu:

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

Jest to wynikiem:

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

W poprzedniej kwerendy przecinek (,) na koniec <step1> konstrukcji jest konstruktora sekwencji i jest wymagany.Spacji w wynikach są dodawane wyłącznie i znajdują się wszystkie wyniki przykładu w tej dokumentacji.

Dodatkowe informacje, które należy wiedzieć o sekwencji jest następujący:

  • Jeśli wyniki kwerendy w sekwencji, zawierający inny sekwencji, sekwencji zawartych jest spłaszczane do sekwencji kontener.Na przykład sekwencja ((1,2, (3), 4), 6) zostaje spłaszczona w modelu danych jako (1, 2, 3, 4, 5, 6).

    DECLARE @x xml
    SET @x = ''
    SELECT @x.query('(1,2, (3,4,5)),6')
    
  • Pusty sekwencji jest sekwencja, która nie zawiera element.Jest ona reprezentowana jako "()".

  • Sekwencja z tylko jednego element mogą być traktowane jako wartość niepodzielny i odwrotnie.Oznacza to, że (1) = 1.

W tej implementacji sekwencji muszą być jednorodne.Oznacza to, że albo masz sekwencji niepodzielny wartości lub sekwencja węzłów.Na przykład Oto prawidłowy sekwencji:

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

Następująca kwerenda zwraca błąd, ponieważ heterogenicznych sekwencji nie są obsługiwane.

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

QName

Każdy identyfikator w XQuery jest QName.Prefiks obszaru nazw i nazwę lokalną składa się QName.W tej implementacji nazwy zmiennych w XQuery są QNames i nie mają one prefiksów.

Rozważmy następujący przykład, w którym określono kwerendy przeciwko bez xml zmiennej:

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

In the wyrażenie (/Root/a), Root and a are QNames.

W następującym przykładzie określono kwerendy przeciwko maszynowy xml kolumna.Kwerenda wykonuje iterację przez wszystkie <krok> elementów na pierwszym miejscu gniazdo.

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

W kwerendzie wyrażenie, pod uwagę następujące informacje:

  • AWMI root, AWMI:Location, AWMI:step, and $Step are all QNames.AWMI is a prefix, and root, Location, and Step are all local names.

  • $step Zmienna jest QName i nie ma prefiksu.

Następujące obszary nazw są wstępnie zdefiniowane do użycia z obsługą XQuery w SQL Server.

Prefiks

IDENTYFIKATOR URI

xs

http://www.w3.org/2001/XMLSchema

xsi

http://www.w3.org/2001/XMLSchema-wystąpienie

XDT

http://www.w3.org/2004/07/XPath-datatypes

FN

http://www.w3.org/2004/07/XPath-functions

(nie prefiksu)

URN: schemas-microsoft-com: XML-sql

właściwości SqlTypes

https://schemas.microsoft.com/SQLServer/2004/SqlTypes

XML

http://www.w3.org/XML/1998/namespace

(nie prefiksu)

https://schemas.microsoft.com/SQLServer/2004/SOAP

Każdy bazy danych można utworzyć sys kolekcja schematu XML.Dlatego są one dostępne z dowolnego kolekcja schematu XML utworzony przez użytkownika, rezerwuje te schematy.Aby uzyskać więcej informacji, zobacz Wbudowanych kolekcji schematu XML (sys).

Ostrzeżenie

Ta implementacja nie obsługuje local prefiksu w sposób opisany w specyfikacji XQuery w http://www.w3.org/2004/07/xquery-local-functions.