Funzione namespace-uri (XQuery)
Restituisce l'URI dello spazio dei nomi dell'elemento 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 è possibile utilizzare fn:namespace-uri() senza un argomento solo nel contesto di un predicato dipendente dal contesto. In particolare, la funzione può essere utilizzata solo fra parentesi quadre ([ ]).
Se $arg è la sequenza vuota, viene restituita la stringa di lunghezza zero.
Se $arg è un nodo elemento o attributo il cui QName esteso non è presente in uno spazio dei nomi, la funzione restituisce una stringa di lunghezza zero.
Esempi
In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database AdventureWorks. Per una panoramica su ognuna di queste colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks.
A. Recupero dell'URI dello spazio dei nomi di un nodo specifico
La query seguente viene specificata 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 Instructions di tipo xml. L'espressione namespace-uri(/AWMI:root[1]/AWMI:Location[1]) restituisce l'URI dello spazio dei nomi del primo elemento figlio <Location> 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() è specificata senza un argomento e utilizza 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. Verranno così restituiti tutti i nodi figlio dell'elemento <ProductDescription> in cui la parte dell'URI dello spazio dei nomi del QName esteso è 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é di tipo xs:anyURI.