Partilhar via


Módulos e Prologs - XQuery Prolog

Aplica-se a:SQL Server

Uma consulta XQuery é composta por um prólogo e um corpo. O prolog XQuery é uma série de declarações e definições que, juntas, criam o ambiente necessário para o processamento de consultas. No SQL Server, o prólogo XQuery pode incluir declarações de namespace. O corpo XQuery é composto por uma sequência de expressões que especificam o resultado da consulta pretendida.

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

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

  • A palavra-chave declare namespace define um prefixo de namespace que é usado posteriormente 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 URI de namespace, conforme mostrado na consulta a seguir. Na consulta, CatalogDescription é uma coluna de xml tipo.

Ao especificar XQuery nesta coluna, o prolog de consulta especifica a declaração declare namespace para associar o prefixo PD, product description, ao URI do namespace. Esse prefixo é usado no corpo da consulta em vez do URI do namespace. Os nós no XML resultante estão no namespace associado ao URI do namespace.

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 prefixo e associação de namespace no prólogo de consulta usando 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ção 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 vincular um namespace padrão para nomes de elementos. 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   

Ver também

Adicionar namespaces a consultas com WITH XMLNAMESPACES