Поделиться через


Указание реляционных операторов в запросах XPath (SQLXML 4.0)

В следующих примерах показано, как реляционные операторы указаны в запросах XPath. Запросы XPath в этих примерах указываются в схеме сопоставления, содержащейся в SampleSchema1.xml. Дополнительные сведения об этой схеме см. в примере аннотированной схемы XSD для примеров XPath (SQLXML 4.0).

Примеры

А. Указание реляционного оператора

Этот запрос XPath возвращает дочерние элементы <элемента Customer, где значение атрибута CustomerID> равно "1" и где все дочерние <элементы Order содержат дочерний дочерний элемент OrderDetail>>с атрибутом OrderQty со значением больше 3:<

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

Предикат, указанный в скобках, фильтрует <элементы Customer> . Возвращаются только элементы Customer>, имеющие по крайней мере один внук OrderDetail с значением атрибута OrderQty больше 3.<><

child Ось — это по умолчанию. Таким образом, запрос можно указать следующим образом:

/Customer[@CustomerID="1"]/Order/OrderDetail[@OrderQty > 3]  
Тестирование запроса XPath на схему сопоставления
  1. Скопируйте пример кода схемы и вставьте его в текстовый файл. Сохраните файл как SampleSchema1.xml.

  2. Создайте следующий шаблон (SpecifyRelationalA.xml) и сохраните его в каталоге, где сохранены SampleSchema1.xml.

    <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>  
    

    Путь к каталогу, указанный для схемы сопоставления (SampleSchema1.xml), относится к каталогу, в котором сохраняется шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

Ниже приведен результирующий набор выполнения шаблона:

<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>  

В. Укажите реляционный оператор в запросе XPath и используйте логическую функцию для сравнения результата.

Этот запрос возвращает все дочерние <элементы Order> узла контекста с значением атрибута SalesPersonID , которое меньше 270:

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

Ярлык для attribute оси (@) можно указать, и так как child ось является по умолчанию, ее можно исключить из запроса:

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

Замечание

Если этот запрос указан в шаблоне, < символ должен быть закодирован, так как < символ имеет особое значение в XML-документе. В шаблоне используйте < для указания символа < .

Тестирование запроса XPath на схему сопоставления
  1. Скопируйте пример кода схемы и вставьте его в текстовый файл. Сохраните файл как SampleSchema1.xml.

  2. Создайте следующий шаблон (SpecifyRelationalB.xml) и сохраните его в каталоге, где сохранены SampleSchema1.xml.

    <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>  
    

    Путь к каталогу, указанный для схемы сопоставления (SampleSchema1.xml), относится к каталогу, в котором сохраняется шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

Ниже приведен частичный результирующий набор выполнения шаблона:

<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>