Бөлісу құралы:


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

Область применения: SQL Server База данных SQL Azure

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

Примеры

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

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

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

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

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

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

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

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

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

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