Dela via


Funktioner på noder – namespace-uri

gäller för:SQL Server

Returnerar namnområdes-URI:n för det QName som anges i $arg som en xs:string.

Syntax

fn:namespace-uri() as xs:string  
fn:namespace-uri($arg as node()?) as xs:string  

Argument

$arg
Nodnamn vars namnområdes-URI-del hämtas.

Anmärkningar

  • Om argumentet utelämnas är standardinställningen kontextnoden.

  • I SQL Server kan fn:namespace-uri() utan argument endast användas i kontexten för ett kontextberoende predikat. Mer specifikt kan den bara användas inom hakparenteser ([ ]).

  • Om $arg är den tomma sekvensen returneras strängen med noll längd.

  • Om $arg är ett element eller en attributnod vars expanderade QName inte finns i ett namnområde, returnerar funktionen strängen med noll längd

Exempel

Det här avsnittet innehåller XQuery-exempel mot XML-instanser som lagras i olika XML- typkolumner i AdventureWorks-databasen.

A. Hämta namnområdes-URI för en specifik nod

Följande fråga anges mot en otypad XML-instans. Frågeuttrycket, namespace-uri(/ROOT[1]), hämtar namnområdets URI-del av den angivna noden.

set @x='<ROOT><a>111</a></ROOT>'  
SELECT @x.query('namespace-uri(/ROOT[1])')  

Eftersom det angivna QName inte har namnområdets URI-del utan bara den lokala namndelen blir resultatet en sträng med noll längd.

Följande fråga anges mot kolumnen Instruktioner som skrivits xml-. Uttrycket, namespace-uri(/AWMI:root[1]/AWMI:Location[1]), returnerar namnområdes-URI:n för det första <Location> elementet underordnat <root>-elementet.

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  

Det här är resultatet:

https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions  

B. Använda namespace-uri() utan argument i ett predikat

Följande fråga anges mot xml-kolumnen CatalogDescription-typ. Uttrycket returnerar alla elementnoder vars namnområdes-URI är https://www.adventure-works.com/schemas/OtherFeatures. Funktionen namespace-uri() anges utan argument och använder kontextnoden.

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  

Detta är delvis resultat:

<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>  
...  

Du kan ändra namnområdes-URI:n i föregående fråga till https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. Sedan får du alla underordnade elementnoder för det <ProductDescription> element vars namnområdes-URI-del av det expanderade QName är https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain.

Implementeringsbegränsningar

Det här är begränsningarna:

  • Funktionen namespace-uri() returnerar instanser av typen xs:string i stället för xs:anyURI.

Se även

Functions på noder
lokal namnfunktion (XQuery)