namespace-uri-Funktion (XQuery)
Gibt den Namespace-URI des in $arg angegebenen QName als xs:string zurück.
Syntax
fn:namespace-uri() as xs:string
fn:namespace-uri($arg as node()?) as xs:string
Argumente
- $arg
Knotenname, dessen Namespace-URI-Teil abgerufen wird.
Hinweise
Wird das Argument nicht angegeben, wird standardmäßig der Kontextknoten verwendet.
In SQL Server kann fn:namespace-uri() nur im Kontext eines kontextabhängigen Prädikats ohne Argument verwendet werden, genauer gesagt, es muss in eckigen Klammern ([ ]) stehen.
Wenn $arg eine leere Sequenz ist, wird eine leere Zeichenfolge zurückgegeben.
Wenn $arg ein Element- oder Attributknoten ist, dessen expanded-QName sich nicht in einem Namespace befindet, gibt die Funktion eine leere Zeichenfolge zurück.
Beispiele:
Dieses Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom xml -Typ in der AdventureWorks2008R2-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks2008R2-Datenbank.
A. Abrufen eines Namespace-URI eines bestimmten Knotens
Die folgende Abfrage wird für eine nicht typisierte XML-Instanz angegeben. Der Abfrageausdruck namespace-uri(/ROOT[1]) ruft den Namespace-URI-Teil des angegebenen Knotens ab.
set @x='<ROOT><a>111</a></ROOT>'
SELECT @x.query('namespace-uri(/ROOT[1])')
Da der angegebene QName nicht über den URI-Teil des Namespace verfügt, sondern lediglich über den lokalen Teil des Namens, ist das Ergebnis eine leere Zeichenfolge.
Die folgende Abfrage wird für die Instructions-Spalte vom Typ xml angegeben. Der Ausdruck namespace-uri(/AWMI:root[1]/AWMI:Location[1]) gibt den Namespace-URI des ersten untergeordneten <Location>-Elements des <root>-Elements zurück.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
namespace-uri(/AWMI:root[1]/AWMI:Location[1])') as Result
FROM Production.ProductModel
WHERE ProductModelID=7;
Dies ist das Ergebnis:
https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions
B. Verwenden von namespace-uri() ohne Argument in einem Prädikat
Die folgende Abfrage wird für die CatalogDescription-Spalte vom Typ XML angegeben. Der Ausdruck gibt alle Elementknoten zurück, deren Namespace-URI https://www.adventure-works.com/schemas/OtherFeatures ist. Die namespace-uri()-Funktion wird ohne Argument angegeben und verwendet den Kontextknoten.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/p1:ProductDescription//*[namespace-uri() = "https://www.adventure-works.com/schemas/OtherFeatures"]
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19l
Dies ist das Teilergebnis:
<p1:wheel xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">Hochleistungsräder.</p1:wheel>
<p2:saddle xmlns:p2="https://www.adventure-works.com/schemas/OtherFeatures">
<p3:i xmlns:p3="http://www.w3.org/1999/xhtml">Anatomisches Design</p3:i> und strapazierfähiges Leder zum bequemen Fahren auch bei langen Touren.</p2:saddle>
…
Sie können den Namespace-URI in der vorherigen Abfrage zu https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain ändern. Auf diese Weise erhalten Sie alle untergeordneten Elemente des <ProductDescription>-Elementknotens, dessen Namespace-URI-Teil des expanded-QName https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain ist.
Implementierungseinschränkungen
Die folgenden Einschränkungen sind zu beachten:
- Die namespace-uri()-Funktion gibt Instanzen vom Typ xs:string anstelle von xs:anyURI zurück.