Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
W tym temacie opisano następujące podstawowe pojęcia dotyczące zapytania XQuery:
Kolejność
QNames i wstępnie zdefiniowane przestrzenie nazw
Kolejność
W środowisku XQuery wynikiem wyrażenia jest sekwencja, która składa się z listy węzłów XML i wystąpień typów niepodzielnych XSD. Pojedynczy wpis w sekwencji jest określany jako element. Element w sekwencji może być jednym z następujących elementów:
Węzeł, taki jak element, atrybut, tekst, instrukcja przetwarzania, komentarz lub dokument
Wartość niepodzielna, taka jak wystąpienie prostego typu XSD
Na przykład następujące zapytanie konstruuje sekwencję dwóch elementów węzła:
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 wynik:
<step1> Step 1 description goes here </step1>
<step2> Step 2 description goes here </step2>
W poprzednim zapytaniu przecinek (,) na końcu konstrukcji <step1> jest konstruktorem sekwencji i jest wymagany. Białe spacje w wynikach są dodawane tylko do ilustracji i są uwzględniane we wszystkich przykładowych wynikach tej dokumentacji.
Poniżej znajdują się dodatkowe informacje, które należy wiedzieć o sekwencjach:
Jeśli zapytanie powoduje sekwencję zawierającą inną sekwencję, zawarta sekwencja zostanie spłaszczone do sekwencji kontenerów. Na przykład sekwencja (1,2, (3,4,5)),6) jest 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');Pusta sekwencja to sekwencja, która nie zawiera żadnego elementu. Jest reprezentowana jako "()".
Sekwencja z tylko jednym elementem może być traktowana jako wartość niepodzielna i odwrotnie. Oznacza to, (1) = 1.
W tej implementacji sekwencja musi być jednorodna. Oznacza to, że istnieje sekwencja wartości niepodzielnych lub sekwencja węzłów. Na przykład następujące są prawidłowe 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ące zapytanie zwraca błąd, ponieważ sekwencje heterogeniczne nie są obsługiwane.
SELECT @x.query('<x>11</x>, 22');
QName
Każdy identyfikator w trybie XQuery jest nazwą QName. Nazwa QName składa się z prefiksu przestrzeni nazw i nazwy lokalnej. W tej implementacji nazwy zmiennych w trybie XQuery są nazwami QName i nie mogą mieć prefiksów.
Rozważmy następujący przykład, w którym zapytanie jest określone względem nietypowej zmiennej xml:
DECLARE @x xml;
SET @x = '<Root><a>111</a></Root>';
SELECT @x.query('/Root/a');
W wyrażeniu (/Root/a) Root i a są nazwami QName.
W poniższym przykładzie zapytanie jest określane względem typizowanej kolumny xml. Zapytanie iteruje wszystkie <kroku> elementów w pierwszej lokalizacji centrum pracy.
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 wyrażeniu zapytania zwróć uwagę na następujące kwestie:
AWMI root,AWMI:Location,AWMI:stepi$Stepsą wszystkimi nazwami QName.AWMIjest prefiksem, aroot,LocationiStepsą nazwami lokalnymi.Zmienna
$stepjest nazwą QName i nie ma prefiksu.
Następujące przestrzenie nazw są wstępnie zdefiniowane do użycia z obsługą XQuery w programie SQL Server.
| Przedrostek | 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 prefiksu) | urn:schemas-microsoft-com:xml-sql |
| sqltypes | https://schemas.microsoft.com/sqlserver/2004/sqltypes |
| XML | http://www.w3.org/XML/1998/namespace |
| (bez prefiksu) | https://schemas.microsoft.com/sqlserver/2004/SOAP |
Każda tworzona baza danych ma kolekcję schematów sys XML. Rezerwuje te schematy, aby można było uzyskać do nich dostęp z dowolnej kolekcji schematów XML utworzonej przez użytkownika.
Nuta
Ta implementacja nie obsługuje prefiksu local zgodnie z opisem w specyfikacji XQuery w http://www.w3.org/2004/07/xquery-local-functions.