Moduly a Prology - XQuery Prolog

platí pro:SQL Server

Dotaz XQuery se skládá z prologu a těla. XQuery prolog je série deklarací a definic, které společně vytvářejí potřebné prostředí pro zpracování dotazů. V SQL Server může prolog XQuery obsahovat deklarace jmenného prostoru. Tělo XQuery se skládá ze sekvence výrazů, které určují zamýšlený výsledek dotazu.

Například následující XQuery je specifikován ve sloupci Instructions v xml type, který ukládá výrobní instrukce jako XML. Dotaz získává výrobní instrukce pro umístění 10pracovního centra. Metoda query()xml datového typu se používá ke specifikaci 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  

Všimněte si následujících věcí z předchozího dotazu:

  • Prolog XQuery obsahuje deklaraci prefixu jmenného prostoru (AWMI), (namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.

  • Klíčové declare namespace slovo definuje prefix jmenného prostoru, který se používá později v těle dotazu.

  • /AWMI:root/AWMI:Location[@LocationID="10"] je tělo dotazu.

Deklarace jmenného prostoru

Deklarace jmenného prostoru definuje prefix a přiřazuje jej k URI jmenného prostoru, jak je ukázáno v následujícím dotazu. V dotazu je CatalogDescription sloupec typu xml .

Při zadávání XQuery vůči tomuto sloupci dotazovací prolog specifikuje declare namespace deklaraci, která přiřadí prefix PD, product description, k URI jmenného prostoru. Tato předpona se pak používá v těle dotazu místo URI jmenného prostoru. Uzly ve výsledném XML jsou v jmenném prostoru spojeném s URI jmenného prostoru.

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  

Pro zlepšení čitelnosti dotazů můžete deklarovat jmenné prostory pomocí WITH XMLNAMESPACES místo deklarace prefixů a vazeb jmenného prostoru v prologu dotazu pomocí .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  

Pro více informací viz Přidat jmenné prostory do dotazů pomocí S XMLNAMESPACES.

Deklarace výchozího jmenného prostoru

Místo deklarace prefixu jmenného prostoru pomocí declare namespace deklarace můžete tuto deklaraci declare default element namespace použít k navázání výchozího jmenného prostoru pro názvy prvků. V tomto případě nespecifikujete žádnou předponu.

V následujícím příkladu výraz cesty v těle dotazu nespecifikuje prefix jmenného prostoru. Ve výchozím nastavení všechny názvy prvků patří do výchozího jmenného prostoru určeného v prologu.

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   

Výchozí jmenný prostor můžete deklarovat pomocí 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