Funktionen für Knoten – namespace-uri
Gilt für:SQL Server
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.
Bemerkungen
Wird das Argument nicht angegeben, wird standardmäßig der Kontextknoten verwendet.
In SQL Server kann fn:namespace-uri() ohne Argument nur im Kontext eines kontextabhängigen Prädikats verwendet werden. Insbesondere kann die Funktion nur innerhalb von Klammern ([ ]) verwendet werden.
Wenn $arg die leere Sequenz ist, wird die Zeichenfolge der Länge Null zurückgegeben.
Wenn $arg ein Element oder Attributknoten ist, dessen expanded-QName sich nicht in einem Namespace befindet, gibt die Funktion die leere Zeichenfolge zurück.
Beispiele
Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen Xml-Typspalten in der AdventureWorks-Datenbank gespeichert sind.
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 xml-Spalte Vom Typ "Anweisungen" angegeben. Der Ausdruck namespace-uri(/AWMI:root[1]/AWMI:Location[1])
gibt den Namespace-URI des ersten <Location
> untergeordneten 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=19
Dies ist ein Teilergebnis:
<p1:wheel xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">High performance wheels.</p1:wheel>
<p2:saddle xmlns:p2="https://www.adventure-works.com/schemas/OtherFeatures">
<p3:i xmlns:p3="http://www.w3.org/1999/xhtml">Anatomic design</p3:i> and made from durable leather for a full-day of riding in comfort.</p2:saddle>
...
Sie können den Namespace-URI in der vorherigen Abfrage zu https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
ändern. Anschließend erhalten Sie alle untergeordneten Elementknoten des <ProductDescription
> Elements, dessen Namespace-URI-Teil des erweiterten QName ist.https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
Implementierungseinschränkungen
Die folgenden Einschränkungen sind zu beachten:
- Die namespace-uri()- Funktion gibt Instanzen des Typs xs:string anstelle von xs:anyURI zurück.