Dela via


Moduler och prologer – XQuery Prolog

gäller för:SQL Server

En XQuery-fråga består av en prolog och en brödtext. XQuery-prologen är en serie deklarationer och definitioner som tillsammans skapar den miljö som krävs för frågebearbetning. I SQL Server kan XQuery-prologen innehålla namnområdesdeklarationer. XQuery-brödtexten består av en sekvens med uttryck som anger det avsedda frågeresultatet.

Till exempel anges följande XQuery mot kolumnen Instruktioner i XML- typ som lagrar tillverkningsinstruktioner som XML. Frågan hämtar tillverkningsinstruktionerna för arbetscentrets plats 10. Den query() metoden för xml- datatyp används för att ange 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  

Observera följande från föregående fråga:

  • XQuery-prologen innehåller en AWMI-deklaration (namespace prefix), (namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.

  • Nyckelordet declare namespace definierar ett namnområdesprefix som används senare i frågetexten.

  • /AWMI:root/AWMI:Location[@LocationID="10"] är frågetexten.

Namnområdesdeklarationer

En namnområdesdeklaration definierar ett prefix och associerar det med en namnområdes-URI, enligt följande fråga. I frågan är CatalogDescription en xml- typkolumn.

När du anger XQuery mot den här kolumnen anger frågeprologen declare namespace-deklarationen för att associera prefixet PD, produktbeskrivning, med namnområdets URI. Det här prefixet används sedan i frågetexten i stället för namnområdets URI. Noderna i den resulterande XML-koden finns i namnområdet som är associerat med namnområdes-URI:n.

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  

För att förbättra frågeläsbarheten kan du deklarera namnområden med hjälp av MED XMLNAMESPACES i stället för att deklarera prefix och namnområdesbindning i frågeprologen med hjälp av 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  

Mer information finns i Lägg till namnområden i frågor med XMLNAMESPACES.

Standarddeklaration för namnområde

I stället för att deklarera ett namnområdesprefix med hjälp av declare namespace-deklarationen kan du använda declare default element namespace-deklarationen för att binda ett standardnamnområde för elementnamn. I det här fallet anger du inget prefix.

I följande exempel anger sökvägsuttrycket i frågetexten inte något namnområdesprefix. Som standard tillhör alla elementnamn det standardnamnområde som anges i prologen.

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   

Du kan deklarera ett standardnamnområde med hjälp av 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   

Se även

Lägg till namnområden i frågor med XMLNAMESPACES