Применение реляционных операторов в запросах 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 &gt; 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-документе. В шаблоне используйте &lt;, чтобы задать символ <.

Проверка запроса 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&lt;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="2006-07-01T00:00:00" 
         DueDate="2006-07-13T00:00:00" 
         ShipDate="2006-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="2008-06-01T00:00:00" 
         DueDate="2008-06-13T00:00:00" 
         ShipDate="2008-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>