Sdílet prostřednictvím


Specifikace relačních operátorů v XPath dotazech (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Následující příklady ukazují, jak jsou relační operátory specifikovány v dotazech XPath. XPath dotazy v těchto příkladech jsou specifikovány vůči mapovacímu schématu obsaženému v SampleSchema1.xml. Pro informace o tomto ukázkovém schématu viz Ukázka anotovaného XSD schématu pro příklady XPath (SQLXML 4.0).

Examples

A. Specifikujte relační operátor

Tento dotaz XPath vrací podřízené prvky elementu <Customer> , kde hodnota atributu CustomerID je "1" a kde jakýkoli podřízený <Order> Order obsahuje potomka <OrderDetail> s atributem OrderQty s hodnotou větší než 3:

/child::Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]  

Predikát uvedený v závorkách filtruje <prvky zákazníka> . <Pouze prvky zákazníka>, které mají alespoň jednoho <vnuka OrderDetail> s hodnotou atributu OrderQty větší než 3, se vracejí.

Výchozí je podřízená osa. Dotaz tedy lze specifikovat jako:

/Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]  
Otestování dotazu XPath proti mapovacímu schématu
  1. Zkopírujte ukázkový kód schématu a vložte ho do textového souboru. Uložte soubor jako SampleSchema1.xml.

  2. Vytvořte následující šablonu (SpecifyRelationalA.xml) a uložite ji do adresáře, kde se SampleSchema1.xml ukládá.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]  
      </sql:xpath-query>  
    </ROOT>  
    

    Adresářová cesta určená pro mapovací schéma (SampleSchema1.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Zde je výsledná sada provedení šablony:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <OrderDetail ProductID="Prod-760" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-763" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-766" UnitPrice="503.3507" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-732" UnitPrice="440.1742" OrderQty="4" UnitPriceDiscount="0" />   
  <OrderDetail ProductID="Prod-757" UnitPrice="1049.7528" OrderQty="4" UnitPriceDiscount="0" />   
</ROOT>  

B. Specifikujte relační operátor v dotazu XPath a použijte Booleovu funkci k porovnání výsledku

Tento dotaz vrací všechny potomky <prvků Order> kontextového uzlu, které mají hodnotu atributu SalesPersonID menší než 270:

/child::Customer/child::Order[(attribute::SalesPersonID < 270)=true()]  

Lze zadat zkratku na atributovou osu (@) a protože je výchozí osa dítěte , lze ji z dotazu vynechat:

/Customer/Order[(@SalesPersonID < 270)=true()]  

Poznámka:

Když je tento dotaz zadán v šabloně, musí být znak < zakódován jako entita, protože znak < má v XML dokumentu zvláštní význam. V šabloně použijte < k určení < znaku.

Otestování dotazu XPath proti mapovacímu schématu
  1. Zkopírujte ukázkový kód schématu a vložte ho do textového souboru. Uložte soubor jako SampleSchema1.xml.

  2. Vytvořte následující šablonu (SpecifyRelationalB.xml) a uložite ji do adresáře, kde se SampleSchema1.xml ukládá.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="SampleSchema1.xml">  
            /Customer/Order[(@SalesPersonID<270)=true()]  
        </sql:xpath-query>  
    </ROOT>  
    

    Adresářová cesta určená pro mapovací schéma (SampleSchema1.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Zde je množina částečných výsledků provedení šablony:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Order SalesOrderID="Ord-46613" SalesPersonID="268"   
         OrderDate="2002-07-01T00:00:00"   
         DueDate="2002-07-13T00:00:00"   
         ShipDate="2002-07-08T00:00:00">  
    <OrderDetail ProductID="Prod-739" UnitPrice="917.9363"   
                 OrderQty="2" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-779" UnitPrice="1491.4221"   
                 OrderQty="1" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-825" UnitPrice="242.1391"   
                 OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
  <Order SalesOrderID="Ord-71919" SalesPersonID="268"  
         OrderDate="2004-06-01T00:00:00"   
         DueDate="2004-06-13T00:00:00"   
         ShipDate="2004-06-08T00:00:00">  
    <OrderDetail ProductID="Prod-961" UnitPrice="534.492"   
                 OrderQty="1" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-965" UnitPrice="534.492"   
                 OrderQty="1" UnitPriceDiscount="0" />   
    <OrderDetail ProductID="Prod-966" UnitPrice="1716.5304"   
                 OrderQty="1" UnitPriceDiscount="0" />   
  </Order>  
  ...  
</ROOT>