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


Указание логических функций в запросах 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>