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


Указание логических функций в запросах XPath (SQLXML 4.0)

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

А. Задание логической функции not()

Этот запрос возвращает все дочерние элементы <Customer> контекстного узла, не имеющие дочерних элементов <Order>:

/child::Customer[not(child::Order)]

Ось child является осью по умолчанию. Поэтому запрос можно определить следующим образом.

/Customer[not(Order)]

Проверка запроса XPath к схеме сопоставления

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

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="SampleSchema1.xml">
        Customer[not(Order)]
    </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">

<Customer CustomerID="13" SalesPersonID="286" TerritoryID="7" AccountNumber="13" CustomerType="S" />

<Customer CustomerID="32" SalesPersonID="289" TerritoryID="8" AccountNumber="32" CustomerType="S" />

<Customer CustomerID="35" SalesPersonID="275" TerritoryID="2" AccountNumber="35" CustomerType="S" />

...

</ROOT>

Б. Задание логических функций true() и false()

Запрос возвращает все дочерние элементы <Customer> контекстного узла, не имеющие дочерних элементов <Order>. В реляционных терминах этот запрос возвращает всех заказчиков, не разместивших ни одного заказа.

/child::Customer[child::Order=false()]

Ось child является осью по умолчанию. Поэтому запрос можно определить следующим образом.

/Customer[Order=false()]

Этот запрос эквивалентен следующему:

/Customer[not(Order)]

Следующий запрос возвращает всех заказчиков, разместивших хотя бы один заказ:

/Customer[Order=true()]

Этот запрос эквивалентен приведенному ниже:

/Customer[Order]

Проверка запроса XPath к схеме сопоставления

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

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="SampleSchema1.xml">
        /Customer[Order=false()]
      </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">

<Customer CustomerID="13" SalesPersonID="286" TerritoryID="7" AccountNumber="13" CustomerType="S" />

<Customer CustomerID="32" SalesPersonID="289" TerritoryID="8" AccountNumber="32" CustomerType="S" />

<Customer CustomerID="35" SalesPersonID="275" TerritoryID="2" AccountNumber="35" CustomerType="S" />

...

</ROOT>