Freigeben über


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.

Weitere Informationen

Funktionen auf Knoten
local-name-Funktion (XQuery)