Compartilhar via


Módulos e prólogos – Prólogo XQuery

Aplica-se: SQL Server

Uma consulta XQuery é composta de prólogo e corpo. O prólogo do XQuery é uma série de declarações e definições que juntas criam o ambiente exigido para o processamento de consulta. No SQL Server, o prólogo do Xquery pode incluir declarações de namespace. O corpo do XQuery é constituído de uma sequência de expressões que especificam o resultado da consulta desejada.

Por exemplo, o XQuery a seguir é especificado na coluna Instructions do tipo xml que armazena instruções de fabricação como XML. A consulta recupera as instruções de produção para o local de centro de trabalho 10. O query() método do tipo de dados xml é usado para especificar o 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 o seguinte na consulta anterior:

  • O prólogo XQuery inclui uma declaração (namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";AWMI (prefixo de namespace), .

  • A palavra-chave declare namespace define um prefixo de namespace que depois é usado no corpo da consulta.

  • /AWMI:root/AWMI:Location[@LocationID="10"] é o corpo da consulta.

Declarações de namespace

Uma declaração de namespace define um prefixo e o associa a um namespace URI, como mostrado na consulta a seguir. Na consulta, CatalogDescription é uma coluna do tipo xml .

Ao especificar o XQuery nessa coluna, o prólogo da consulta especifica a declaração declare namespace para associar o prefixo PD, descrição de produto, ao namespace URI. Esse prefixo é então usado no corpo da consulta em vez do namespace URI. Os nós no XML resultante estão no namespace associado com o namespace URI.

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 melhorar a legibilidade da consulta, você pode declarar namespaces usando WITH XMLNAMESPACES em vez de declarar o prefixo e a associação de namespace no prólogo da consulta utilizando declare namespace.

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 obter mais informações, consulte Adicionar namespaces a consultas com WITH XMLNAMESPACES.

Declarações de namespace padrão

Em vez de declarar um prefixo de namespace usando a declaração declare namespace, você pode usar a declaração declare default element namespace para associar um namespace padrão a nomes de elemento. Nesse caso, você não especifica nenhum prefixo.

No exemplo a seguir, a expressão de caminho no corpo da consulta não especifica um prefixo de namespace. Por padrão, todos os nomes de elementos pertencem ao namespace padrão especificado no 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   

Você pode declarar um namespace padrão usando 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   

Confira também

Adicionar namespaces a consultas com WITH XMLNAMESPACES