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.
Zobacz także