Modules et prologues - prologue XQueryModules and Prologs - XQuery Prolog

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Une requête XQuery se compose d'un prologue et d'un corps.An XQuery query is made up of a prolog and a body. Le prologue XQuery est une série de déclarations et de définitions qui créent ensemble l'environnement requis pour le traitement des requêtes.The XQuery prolog is a series of declarations and definitions that together create the required environment for query processing. Dans SQL Server, le prologue XQuery peut inclure des déclarations d'espace de noms.In SQL Server, the XQuery prolog can include namespace declarations. Le corps XQuery se compose d'une séquence d'expressions qui spécifient le résultat de requête voulu.The XQuery body is made up of a sequence of expressions that specify the intended query result.

Par exemple, la requête XQuery ci-dessous est spécifiée sur la colonne Instructions de xml type qui stocke les instructions de fabrication au format XML.For example, the following XQuery is specified against the Instructions column of xml type that stores manufacturing instructions as XML. La requête récupère les instructions de fabrication pour l'emplacement de l'atelier 10.The query retrieves the manufacturing instructions for the work center location 10. Le query() méthode de la xml type de données est utilisé pour spécifier la requête XQuery.The query() method of the xml data type is used to specify the XQuery.

SELECT Instructions.query('declare namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";           
    /AWMI:root/AWMI:Location[@LocationID=10]  
') AS Result   
FROM  Production.ProductModel  
WHERE ProductModelID=7  

Notez les points suivants dans la requête précédente :Note the following from the previous query:

  • Le prologue XQuery inclut une déclaration de préfixe (AWMI) d’espace de noms, (namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.The XQuery prolog includes a namespace prefix (AWMI) declaration, (namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.

  • Le mot clé declare namespace définit un préfixe d'espace de noms utilisé ultérieurement dans le corps de la requête.The declare namespace keyword defines a namespace prefix that is used later in the query body.

  • /AWMI:root/AWMI:Location[@LocationID="10"] représente le corps de la requête./AWMI:root/AWMI:Location[@LocationID="10"] is the query body.

Déclarations d'espace de nomsNamespace Declarations

Une déclaration d'espace de noms définit un préfixe et l'associe à un URI d'espace de noms, comme illustré dans la requête ci-dessous.A namespace declaration defines a prefix and associates it with a namespace URI, as shown in the following query. Dans la requête, CatalogDescription est un xml colonne de type.In the query, CatalogDescription is an xml type column.

Lorsque vous spécifiez une requête XQuery sur cette colonne, le prologue de la requête spécifie la déclaration declare namespace pour associer le préfixe PD (description du produit) à l'URI d'espace de noms.In specifying XQuery against this column, the query prolog specifies the declare namespace declaration to associate the prefix PD, product description, with the namespace URI. Ce préfixe est alors utilisé dans le corps de la requête à la place de l'URI d'espace de noms.This prefix is then used in the query body instead of the namespace URI. Les nœuds XML résultants sont dans l'espace de noms associé à l'URI d'espace de noms.The nodes in the resulting XML are in the namespace associated with the namespace URI.

SELECT CatalogDescription.query('  
declare namespace PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
         /PD:ProductDescription/PD:Summary   
    ') as Result  
FROM Production.ProductModel  
where ProductModelID=19  

Pour améliorer la lisibilité de la requête, vous pouvez déclarer les espaces de noms à l'aide de WITH XMLNAMESPACES au lieu de déclarer une liaison entre des préfixes et des espaces de noms dans le prologue de la requête à l'aide de declare namespace.To improve query readability, you can declare namespaces by using WITH XMLNAMESPACES instead of declaring prefix and namespace binding in the query prolog by using declare namespace.

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD)  

SELECT CatalogDescription.query('  
         /PD:ProductDescription/PD:Summary   
    ') as Result  
FROM Production.ProductModel  
where ProductModelID=19  

Pour plus d’informations, consultez, espaces de noms à ajouter à des requêtes avec WITH XMLNAMESPACES.For more information, see, Add Namespaces to Queries with WITH XMLNAMESPACES.

Déclaration d'espace de noms par défautDefault Namespace Declaration

Au lieu de déclarer un préfixe d'espace de noms à l'aide de la déclaration declare namespace, vous pouvez utiliser la déclaration declare default element namespace pour lier un espace de noms par défaut pour des noms d'élément.Instead of declaring a namespace prefix by using the declare namespace declaration, you can use the declare default element namespace declaration to bind a default namespace for element names. Dans ce cas, vous ne spécifiez aucun préfixe.In this case, you do not specify any prefix.

Dans l'exemple suivant, l'expression désignant le chemin d'accès dans le corps de la requête ne spécifie pas de préfixe d'espace de noms.In the following example, the path expression in the query body does not specify a namespace prefix. Par défaut, tous les noms d'élément appartiennent au même espace de noms par défaut, spécifié dans le prologue.By default, all element names belong to the default namespace specified in the prolog.

SELECT CatalogDescription.query('  
     declare default element namespace  "http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
        /ProductDescription/Summary   
    ') as Result  
FROM  Production.ProductModel  
WHERE ProductModelID=19   

Vous pouvez déclarer un espace de noms par défaut en utilisant WITH XMLNAMESPACES :You can declare a default namespace by using WITH XMLNAMESPACES:

WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription')  
SELECT CatalogDescription.query('  
        /ProductDescription/Summary   
    ') as Result  
FROM  Production.ProductModel  
WHERE ProductModelID=19   

Voir aussiSee Also

Ajouter des espaces de noms aux requêtes avec WITH XMLNAMESPACESAdd Namespaces to Queries with WITH XMLNAMESPACES