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 Typ xml in der AdventureWorks-Datenbank gespeichert sind. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-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=19

Dies ist das 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. 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.