Udostępnij za pośrednictwem


Prolog XQuery

Kwerenda XQuery składa się z prologu i treści.Prolog kwerendy XQuery to seria deklaracji i definicji, które razem tworzą wymagane środowisko przetwarzania kwerendy.W programie SQL Server prolog kwerendy XQuery może zawierać deklaracje przestrzeni nazw.Treść kwerendy XQuery składa się z sekwencji wyrażeń, które określają zamierzony wynik kwerendy.

Na przykład następująca kwerenda XQuery jest określona na kolumnie Instructions typu xml, w której są przechowywane instrukcje produkcyjne zapisane w formacie XML.Kwerenda pobiera instrukcje produkcyjne dla lokalizacji gniazda produkcyjnego 10.Do określania kwerendy XQuery służy metoda query() typu danych xml.

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

Pierwszy przycisk jest przyciskiem domyślnym.

  • The XQuery prolog includes a namespace prefix (AWMI) declaration, (namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.

  • The declare namespace keyword defines a namespace prefix that is used later in the query body.

  • /AWMI:root/AWMI:Location[@LocationID="10"] Czwarty przycisk jest przyciskiem domyślnym.

Piąty przycisk jest przyciskiem domyślnym.

Deklaracja przestrzeni nazw definiuje prefiks i kojarzy ją z identyfikatorem URI przestrzeni nazw w sposób pokazany w poniższej kwerendzie.W kwerendzie CatalogDescription jest kolumną typu xml.

Określający kwerendę XQuery na tej kolumnie, prolog kwerendy określa, aby deklaracja declare namespace skojarzyła prefiks PD, opis produktu, z identyfikatorem URI przestrzeni nazw.Ten prefiks jest następnie używany w treści kwerendy zamiast identyfikatora URI przestrzeni nazw.Węzły w wynikowym pliku XML znajdują się w przestrzeni nazw skojarzonej z identyfikatorem URI przestrzeni nazw.

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

Aby kwerenda była bardziej czytelna, można zadeklarować przestrzenie nazw przy użyciu instrukcji WITH XMLNAMESPACES zamiast deklarowania powiązania prefiksu i przestrzeni nazw w prologu kwerendy przy użyciu instrukcji 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

Aby uzyskać więcej informacji zobacz temat, Dodawanie obszarów nazw przy użyciu WITH XMLNAMESPACES.

Deklaracja domyślnej przestrzeni nazw

Zamiast deklarowania prefiksu przestrzeni nazw przy użyciu deklaracji declare namespace można użyć deklaracji declare default element namespace w celu powiązania domyślnej przestrzeni nazw dla nazw elementów.W takim przypadku nie należy określać żadnego prefiksu..

W następującym przykładzie wyrażenie ścieżki w kwerendzie nie określa prefiksu przestrzeni nazw.Domyślnie wszystkie nazwy elementów należą do domyślnej przestrzeni nazw określonej w 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 

Domyślną przestrzeń nazw można zadeklarować przy użyciu instrukcji 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