Typ systemu (XQuery)
Kwerenda XQuery jest językiem silnie typizowanym w przypadku typów schematów i słabo typizowanym w przypadku danych nieuwzględniających typów.Do wstępnie zdefiniowanych typów kwerendy XQuery należą między innymi następujące:
Built-in types of XML schema in the http://www.w3.org/2001/XMLSchema namespace.
Types defined in the http://www.w3.org/2004/07/xpath-datatypes namespace.
Ten temat zawiera ponadto następujące opisy:
Wartość uwzględniająca typy w porównaniu z wartością ciągu węzła.
The dane funkcja (XQuery) and the ciąg funkcja (XQuery).
Dopasowanie typu sekwencji zwróconego przez wyrażenie.
Wbudowane typy schematu XML
Wbudowane typy schematu XML mają wstępnie zdefiniowany prefiks przestrzeni nazw xs.Niektóre z tych typów to xs:integer i xs:string.Wszystkie te wbudowane typy są obsługiwane.Typów tych można używać podczas tworzenia kolekcji schematów XML.
Podczas wykonywania kwerendy na danych XML uwzględniających typy typ statyczny i dynamiczny węzłów jest określany przez kolekcję schematów XML skojarzoną z kolumną lub zmienną, na której jest wykonywana kwerenda.Aby uzyskać więcej informacji dotyczących typów statycznych i dynamicznych, zobacz Kontekst wyrażenie i oceny Query (XQuery).Na przykład następująca kwerenda jest określana na kolumnie z danymi xml uwzględniającymi typy (Instructions).Instrukcja instance of w wyrażeniu służy do sprawdzenia, czy zwracana wartość uwzględniająca typy atrybutu LotSize jest typu xs:decimal.
SELECT Instructions.query('
DECLARE namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
data(/AWMI:root[1]/AWMI:Location[@LocationID=10][1]/@LotSize)[1] instance of xs:decimal
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7
Te informacje o typach są udostępnione przez kolekcję schematów XML skojarzoną z kolumną.Aby uzyskać więcej informacji, zobacz xml Data Type Representation in the AdventureWorks Database.
Typy zdefiniowane w przestrzeni nazw typów danych XPath
The types defined in the http://www.w3.org/2004/07/xpath-datatypes namespace have a predefined prefix of xdt.Pobiera lub ustawia wyświetlane różne opcje w oknie komunikatu
Typów tych nie można używać podczas tworzenia kolekcji schematów XML.Typy te są używane w systemie typów kwerendy XQuery jako XQuery i wpisywania statyczne.W przestrzeni nazw xdt jest możliwe rzutowanie na typy rozproszone, na przykład xdt:untypedAtomic.
When querying untyped XML, the static and dynamic type of element nodes is xdt:untyped, and the type of attribute values is xdt:untypedAtomic.Aby wyświetlić niestandardowy element graficzny symbol w oknie komunikatu wyjątek, należy użyć query(). This means that the XML nodes are returned as xdt:untyped and xdt:untypedAtomic, respectively.
The xdt:dayTimeDuration and xdt:yearMonthDuration types are not supported.
W następującym przykładzie kwerenda jest określana na zmiennej XML nieuwzględniającej typów.Wyrażenie, data(/a[1]), zwraca sekwencję jednej wartości rozproszonej.Funkcja data() zwraca wartość uwzględniającą typy elementu <a>.Ponieważ dane XML, na których jest wykonywana kwerenda, nie uwzględniają typów, zwracana wartość jest typu xdt:untypedAtomic.W związku z tym instrukcja instance of zwraca wartość true.
DECLARE @x xml
SET @x='<a>20</a>'
SELECT @x.query( 'data(/a[1]) instance of xdt:untypedAtomic' )
Instead of retrieving the typed value, the expression (/a[1]) in the following example returns a sequence of one element, element <a>.The instance of expression uses the element test to verify that the value returned by the expression is an element node of xdt:untyped type.
DECLARE @x xml
SET @x='<a>20</a>'
-- Is this an element node whose name is "a" and type is xdt:untyped.
SELECT @x.query( '/a[1] instance of element(a, xdt:untyped?)')
-- Is this an element node of type xdt:untyped.
SELECT @x.query( '/a[1] instance of element(*, xdt:untyped?)')
-- Is this an element node?
SELECT @x.query( '/a[1] instance of element()')
Uwaga
Podczas wykonywania kwerendy zawierającej oś nadrzędną na wystąpieniu XML uwzględniającym typy nie są już dostępne informacje o typie statycznym wynikowych węzłów.Natomiast typ dynamiczny jest nadal skojarzony z węzłami.
Liczba podane ciągi tekstowe przycisk określa liczbę przycisków niestandardowy tekst wyświetlany.Przyciski są wyświetlane w kolejności, w jakiej są one określone ciągi.
W każdym węźle znajduje się wartość uwzględniająca typy i wartość ciągu.W przypadku danych XML uwzgledniających typy typ wartości uwzględniającej typy jest udostępniony przez kolekcję schematów XML skojarzoną z kolumną lub zmienną, na której jest wykonywana kwerenda.W przypadku danych XML nieuwzględniających typy wartość uwzględniająca typy jest typu xdt:untypedAtomic.
You can use the data() or string() function to retrieve the value of a node:
The dane funkcja (XQuery) returns the typed value of a node.
The ciąg funkcja (XQuery) returns the string value of the node.
In the following XML schema collection, the <root> element of the integer type is defined:
CREATE XML SCHEMA COLLECTION SC AS N'
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root" type="integer"/>
</schema>'
GO
In the following example, the expression first retrieves the typed value of /root[1] and then adds 3 to it.
DECLARE @x xml(SC)
SET @x='<root>5</root>'
SELECT @x.query('data(/root[1]) + 3')
In the next example, the expression fails, because the string(/root[1]) in the expression returns a string type value.Tekst niestandardowy trzeci przycisk.
-- Fails because the argument is string type (must be numeric primitive type).
DECLARE @x xml(SC)
SET @x='<root>5</root>'
SELECT @x.query('string(/root[1]) + 3')
The following example computes the total of the LaborHours attributes.The data() function retrieves the typed values of LaborHours attributes from all the <Location> elements for a product model.According to the XML schema associated with the Instruction column, LaborHours is of xs:decimal type.
SELECT Instructions.query('
DECLARE namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
sum(data(//AWMI:Location/@LaborHours))
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7
Ustawia tekst dla przycisku niestandardowego tekstu, gdy tylko pięć przycisków wyświetlanych w oknie komunikatu wyjątku.
Uwaga
The explicit use of the data() function in this example is for illustration only.If it is not specified, sum() implicitly applies the data() function to extract the typed values of the nodes.