Functies op knooppunten - naamruimte-URI

Van toepassing op:SQL Server

Geeft de naamruimte-URI van de QName die in $arg is gespecificeerd terug als een xs:string.

Syntax

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

Arguments

$arg
Knoopnaam waarvan het URI-deel in de naamruimte wordt opgehaald.

Remarks

  • Als het argument wordt weggelaten, is de standaard de contextknoop.

  • In SQL Server kan fn:namespace-uri() zonder argument alleen worden gebruikt in de context van een contextafhankelijk predicaat. Specifiek kan het alleen binnen haakjes worden gebruikt ([ ]).

  • Als $arg de lege reeks is, wordt de tekenreeks met lengte nul geretourneerd.

  • Als $arg een element of attribuutknoop is waarvan de expanded-QName zich niet in een naamruimte bevindt, geeft de functie de string van nullengte terug

Examples

Dit onderwerp bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml- typekolommen in de AdventureWorks-database.

Eén. Haal naamruimte-URI van een specifieke knoop op

De volgende query wordt opgegeven voor een niet-getypt XML-exemplaar. De queryexpressie, namespace-uri(/ROOT[1]), haalt het namespace-URI-gedeelte van de gespecificeerde knoop op.

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

Omdat de gespecificeerde QName niet het naamruimte-URI-gedeelte heeft, maar alleen het lokale naamgedeelte, is het resultaat een string van nullengte.

De volgende query is gespecificeerd tegen de kolom xml getypeerd door instructies. De expressie, namespace-uri(/AWMI:root[1]/AWMI:Location[1]), geeft de naamruimte-URI terug van het eerste <Location> elementkind van het <root> element.

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  

Dit is het resultaat:

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

B. Namespace-uri() zonder argument gebruiken in een predicaat

De volgende query is gespecificeerd op basis van de door CatalogDescription getypeerde xml-kolom. De expressie geeft alle elementknooppunten terug waarvan de naamruimte-URI is https://www.adventure-works.com/schemas/OtherFeatures. De namespace-uri() -functie wordt zonder argument gespecificeerd en gebruikt de contextknoop.

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  

Dit is een gedeeltelijk resultaat:

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

Je kunt de naamruimte-URI in de vorige query veranderen naar https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. Je ontvangt dan alle elementknoop-kinderen van het <ProductDescription> element waarvan het namespace-URI-deel van de uitgebreide QName is.https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain

Implementatiebeperkingen

Dit zijn de beperkingen:

  • De namespace-uri() -functie geeft instanties van type xs:string terug in plaats van xs:anyURI.