Udostępnij przez


Kolejność i QNames (XQuery)

Gdy wykonywanie kwerendy wpisywane XML, typ statycznych i dynamicznych węzłów zależy od kolekcja schematu XML, które są skojarzone z kolumna lub zmienna, która jest poszukiwanych.

  • Sekwencja

  • Nazwy QNames i wstępnie zdefiniowane przestrzenie nazw

Sekwencja

W kwerendzie XQuery wynikiem wyrażenia jest sekwencja składająca się z listy węzłów XML i wystąpień typów rozproszonych XSD.Pojedyncza pozycja sekwencji jest nazywany elementem.Sekwencja może zawierać następujące elementy:

  • Typy zdefiniowane w obszar nazw typów danych XPath

  • Wartość rozproszona, jak wystąpienie typu prostego XSD.

Następujące uwagi dotyczą następujące typy:

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

To jest wynik:

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

W poprzedniej kwerendzie przecinek (,) na końcu konstrukcji, którą zawiera <step1>, jest konstruktorem sekwencji i jest wymagany.Spacje są dodawane do wyników tylko do celów prezentacji i są zawarte we wszystkich wynikach przykładów w tej dokumentacji.

Poniżej znajdują się dodatkowe informacje na temat sekwencji, które należy znać.

  • Jeśli wynikiem kwerendy jest sekwencja zawierająca inną sekwencję, sekwencja zawarta jest spłaszczana w sekwencji kontenera.Na przykład sekwencja ((1,2, (3,4,5)),6) jest spłaszczana w modelu danych jako (1, 2, 3, 4, 5, 6).

    DECLARE @x xml
    SET @x = ''
    SELECT @x.query('(1,2, (3,4,5)),6')
    
  • Sekwencja pusta jest sekwencją, która nie zawiera żadnego elementu.Jest ona reprezentowana jako „()”.

  • Sekwencję z tylko jednym elementem można traktować jako wartość rozproszoną i odwrotnie.Czyli (1) = 1.

W tej implementacji sekwencja musi być homogeniczna.Oznacza to, że sekwencja musi być albo sekwencją wartości rozproszonych, albo sekwencją węzłów.Poprawne są na przykład następujące sekwencje:

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ż nie są obsługiwane sekwencje heterogeniczne.

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

QName

Kiedy wykonywana jest kwerenda wpisywanych wystąpienie XML i wyrażenie kwerendy zawiera oś nadrzędna, informacji statycznych typu Wynikowe węzłów nie jest już dostępny.Jednak dynamicznego typu jest nadal skojarzona z węzłów.A wpisaną wartość.

Consider the following example in which a query is specified against an untyped xml variable:

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

In the expression (/Root/a), Root and a are QNames.

In the following example, a query is specified against a typed xml column.The query iterates over all <step> elements at the first workcenter location.

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

Należy pamiętać o następujących kwestiach w odniesieniu do wyrażenia kwerendy:

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

  • The $step variable is a QName and does not have a prefix.

Następujące przestrzenie nazw są wstępnie zdefiniowane tak, aby obsługiwały kwerendy XQuery w programie SQL Server.

Prefiks

URI

xs

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

xsi

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

xdt

Ta kwerenda zwraca 12.75 w wyniku.

fn

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

(bez prefiksu)

urn:schemas-microsoft-com:xml-sql

Test węzła.

Zero lub więcej predykatów.

XML

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

(bez prefiksu)

Opcjonalne predykat jest trzecia część kroku oś w wyrażeniu ścieżka.

Every database you create has the sys XML schema collection.Predykatu jest używane do filtrowania sekwencji węzła przez zastosowanie określonego testu.Aby uzyskać więcej informacji zobaczWbudowany schemat XML kolekcja (sys).

Uwaga

This implementation does not support the local prefix as described in the XQuery specification in http://www.w3.org/2004/07/xquery-local-functions.