Módulos y prólogos: prólogo de XQuery

Se aplica a:SQL Server

Una consulta XQuery se compone de un prólogo y un cuerpo. El prólogo de una consulta XQuery consiste en una serie de declaraciones y definiciones que, juntas, crean el entorno necesario para el procesamiento de la consulta. En SQL Server, el prólogo de una consulta XQuery puede incluir declaraciones de espacio de nombres. El cuerpo de una consulta XQuery está formado por una secuencia de expresiones que especifican el resultado previsto de la consulta.

Por ejemplo, el siguiente XQuery se especifica en la columna Instrucciones de tipo xml que almacena las instrucciones de fabricación como XML. La consulta recupera las instrucciones de fabricación para la ubicación del centro de trabajo 10. El query() método del tipo de datos xml se usa para especificar XQuery.

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

Observe lo siguiente en la consulta anterior:

  • El prólogo de XQuery incluye una declaración de prefijo de espacio de nombres (AWMI), (namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.

  • La palabra clave declare namespace define un prefijo de espacio de nombres que se utiliza posteriormente en el cuerpo de la consulta.

  • /AWMI:root/AWMI:Location[@LocationID="10"] es el cuerpo de la consulta.

Declaraciones de espacios de nombres

Una declaración de espacio de nombres define un prefijo y lo asocia a un URI de espacio de nombres, como se muestra en la consulta siguiente. En la consulta, CatalogDescription es una columna de tipo xml .

Al especificar una consulta XQuery en esta columna, el prólogo de la consulta incluye la declaración declare namespace para asociar el prefijo PD (descripción del producto) al URI de espacio de nombres. Después, este prefijo se utiliza en el cuerpo de la consulta en lugar del URI de espacio de nombres. Los nodos del XML resultante están en el espacio de nombres asociado al URI de espacio de nombres.

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

Para mejorar la legibilidad de la consulta, los espacios de nombres se pueden declarar con WITH XMLNAMESPACES en lugar de declarar enlaces de prefijos y espacios de nombres con declare namespace en el prólogo.

WITH XMLNAMESPACES ('https://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  

Para obtener más información, vea Agregar espacios de nombres a consultas con WITH XMLNAMESPACES.

Declaración del espacio de nombres predeterminado

En lugar de declarar un prefijo de espacio de nombres mediante la declaración declare namespace, se puede utilizar la declaración declare default element namespace para enlazar un espacio de nombres predeterminado para nombres de elementos. En este caso, no se especifica ningún prefijo.

En el ejemplo siguiente, la expresión de ruta de acceso del cuerpo de la consulta no especifica ningún prefijo de espacio de nombres. De manera predeterminada, todos los nombres de elementos pertenecen al espacio de nombres predeterminado especificado en el prólogo.

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

Para declarar un espacio de nombres predeterminado, se puede utilizar WITH XMLNAMESPACES:

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

Consulte también

Agregar espacios de nombres a consultas con WITH XMLNAMESPACES