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.