Fonctions sur les nœuds - namespace-uri

 

S’applique à : SQL Server

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse

Retourne l’espace de noms URI de QName spécifié dans $arg comme un xs : String.

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

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

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

  • Dans SQL Server, fn :namespace-URI() sans argument peut uniquement être utilisé 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 élément ou attribut dont le QName étendu n’est pas dans un espace de noms, la fonction renvoie la chaîne de longueur nulle

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

A. 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 porte sur les Instructions typées xml colonne. L'expression, namespace-uri(/AWMI:root[1]/AWMI:Location[1]), renvoie l'URI d'espace de noms du premier élément enfant <Location> de l'élément <root>.

SELECT Instructions.query('  
declare namespace AWMI="http://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 :

http://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 http://www.adventure-works.com/schemas/OtherFeatures. L’espace de noms -uri() est spécifiée sans argument de fonction et utilise le nœud de contexte.

SELECT CatalogDescription.query('  
declare namespace p1="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
   /p1:ProductDescription//*[namespace-uri() = "http://www.adventure-works.com/schemas/OtherFeatures"]  
') as Result  
FROM Production.ProductModel  
WHERE ProductModelID=19  

Le résultat partiel est :

<p1:wheel xmlns:p1="http://www.adventure-works.com/schemas/OtherFeatures">High performance wheels.</p1:wheel>  
<p2:saddle xmlns:p2="http://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 http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. Vous obtenez alors tous les enfants du nœud de l'élément <ProductDescription> dont la partie URI d'espace de noms du QName étendu est http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain.

Limites de mise en œuvre

Les limitations suivantes s'appliquent :

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

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

Ajouts de la communauté

AJOUTER
Afficher: