Condividi tramite


Funzioni su nodi - namespace-uri

Si applica a:SQL Server

Restituisce l'URI dello spazio dei nomi di QName specificato in $arg come xs:string.

Sintassi

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

Argomenti

$arg
Nome del nodo di cui verrà recuperata la parte relativa all'URI dello spazio dei nomi.

Osservazioni:

  • Se l'argomento viene omesso, l'impostazione predefinita è il nodo di contesto.

  • In SQL Server fn:namespace-uri() senza un argomento può essere usato solo nel contesto di un predicato dipendente dal contesto. In particolare, può essere utilizzata solo tra parentesi ([ ]).

  • Se $arg è la sequenza vuota, viene restituita la stringa di lunghezza zero.

  • Se $arg è un nodo di elemento o attributo il cui valore expanded-QName non si trova in uno spazio dei nomi, la funzione restituisce la stringa di lunghezza zero

Esempi

In questo argomento vengono forniti esempi di XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.

R. Recupero dell'URI dello spazio dei nomi di un nodo specifico

La query seguente viene eseguita su un'istanza XML non tipizzata. L'espressione di query namespace-uri(/ROOT[1]) recupera la parte relativa all'URI dello spazio dei nomi del nodo specificato.

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

Poiché l'elemento QName specificato non contiene l'URI dello spazio dei nomi, ma solo il nome locale, il risultato è una stringa di lunghezza zero.

La query seguente viene specificata sulla colonna Xml tipizzata Istruzioni. L'espressione , namespace-uri(/AWMI:root[1]/AWMI:Location[1]), restituisce l'URI dello spazio dei nomi del primo>Location< elemento figlio dell'elemento .<root>

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  

Risultato:

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

B. Utilizzo di namespace-uri() senza argomento in un predicato

La query seguente viene specificata sulla colonna XML tipizzata CatalogDescription. L'espressione restituisce tutti i nodi elemento il cui URI dello spazio dei nomi è https://www.adventure-works.com/schemas/OtherFeatures. La funzione namespace-uri() viene specificata senza un argomento e usa il nodo di contesto.

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  

Risultato parziale:

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

È possibile modificare l'URI dello spazio dei nomi nella query precedente in https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. Si riceveranno quindi tutti gli elementi figlio del nodo elemento dell'elemento il <ProductDescription> cui URI dello spazio dei nomi parte dell'oggetto QName espanso è .https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain

Limitazioni di implementazione

Limitazioni:

  • La funzione namespace-uri() restituisce istanze di tipo xs:string anziché xs:anyURI.

Vedi anche

Funzioni nei nodi
Funzione local-name (XQuery)