Fonctions sur les nœuds : namespace-uri

S’applique à :SQL Server

Retourne l’URI d’espace de noms du QName spécifié dans $arg en tant que xs:string.

Syntaxe

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

Arguments

$arg
Nom de nœud dont la partie URI d'espace de noms doit être extraite.

Remarques

  • Si l'argument est omis, la valeur par défaut est le nœud de contexte.

  • Dans SQL Server, fn:namespace-uri() sans argument ne peut être utilisé que dans le contexte d’un prédicat dépendant du contexte. Autrement dit, elle ne peut être utilisée qu'à l'intérieur de crochets ([ ]).

  • Si $arg est la séquence vide, la chaîne de longueur nulle est retournée.

  • Si $arg est un nœud d’élément ou d’attribut dont le QName développé n’est pas dans un espace de noms, la fonction retourne la chaîne de longueur nulle

Exemples

Cette rubrique fournit des exemples XQuery sur des instances XML stockées dans différentes colonnes de type xml dans la base de données AdventureWorks.

R. Extraction de l'URI d'espace de noms d'un nœud spécifique

La requête suivante est spécifiée sur une instance XML non typée. L'expression de requête, namespace-uri(/ROOT[1]), extrait la partie URI d'espace de noms du nœud spécifié.

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

Étant donné que le QName spécifié ne possède pas la partie URI d'espace de noms mais uniquement la partie nom local, le résultat est une chaîne nulle.

La requête suivante est spécifiée par rapport à la colonne xml typée Instructions. L’expression , namespace-uri(/AWMI:root[1]/AWMI:Location[1])retourne l’URI d’espace de noms du premier>Location< enfant d’élément de l’élément .<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  

Voici le résultat obtenu :

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

B. Utilisation de namespace-uri() sans argument dans un prédicat

La requête suivante porte sur la colonne xml typée CatalogDescription. L'expression renvoie tous les nœuds d'élément dont l'URI d'espace de noms est https://www.adventure-works.com/schemas/OtherFeatures. La fonction namespace-uri() est spécifiée sans argument et utilise le nœud de contexte.

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  

Il s’agit d’un résultat partiel :

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

Vous pouvez remplacer l'URI d'espace de noms dans la requête précédente par https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. Vous recevrez ensuite tous les enfants de nœud d’élément de l’élément dont la <ProductDescription> partie URI d’espace de noms du QName développé est .https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain

Limites de mise en œuvre

Les limitations suivantes s'appliquent :

  • La fonction namespace-uri() retourne des instances de type xs:string au lieu de xs:anyURI.

Voir aussi

Fonctions sur les nœuds
Fonction local-name (XQuery)