Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Fonction namespace-uri (XQuery)

Renvoie l'URI d'espace de noms du QName spécifié dans $arg sous la forme d'un type 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, la fonction fn:namespace-uri() ne peut être utilisée sans argument que dans le contexte d'un prédicat dépendant du contexte. En particulier, elle ne peut être utilisée qu'entre crochets ([ ]).

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

  • Si $arg est un nœud d'élément ou d'attribut dont le QName étendu n'appartient pas à un espace de noms, la fonction renvoie la chaîne nulle.

Cette rubrique fournit des exemples de requêtes XQuery impliquant des instances XML stockées dans différentes colonnes de type xml 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 la colonne xml typée Instructions. 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. La fonction namespace-uri() est spécifiée sans argument 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

Voici le résultat partiel :

<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 la mise en œuvre

Les limites sont les suivantes :

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

Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft