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


Использование заметки sql:field (схема XDR)

Важное примечаниеВажно!

Этот раздел включен в документацию в качестве справочника по приложениям прежних версий. Дальнейшая разработка этой функции проводиться не будет. Рекомендуется избегать использования данной функции в новых разработках. Вместо этого для создания XML-представлений пользуйтесь схемами XSD с заметками. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Можно преобразовать существующие схемы XDR с заметками в схемы XSD. Дополнительные сведения см. в разделе Преобразование схем XDR с заметками в эквивалентные схемы XSD (SQLXML 4.0).

Аннотация sql:field указывает на сопоставление элемента или атрибута в схеме с заметками и столбца в базе данных; ее можно добавлять к элементу или атрибуту. Аннотация sql:field не учитывается на элементах <AttributeType> схемы с заметками. Атрибут sql:field указывает имя сопоставляемого столбца в таблице или представлении.

Так, sql:field можно использовать для указания имени столбца в тех случаях, когда это имя не соответствует полю в схеме, указанной в XDR. Значение sql:field должно быть именем столбца. Использование четырехкомпонентных имен столбцов, таких как database.owner.table.columnname, не допускается. Сказанное справедливо для всех заметок, принимающих в качестве значения имя столбца.

Примеры

Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.

A. Укажите поле sql:field для <атрибута> схемы XDR

В данной схеме с заметками задана заметка sql:field для элемента схемы <attribute>. Атрибут sql:field сопоставляет атрибут Email в схеме со столбцом EmailAddress таблицы Person.Person.

Поскольку имя атрибута BusinessEntityID в схеме XDR идентично имени столбца BusinessEntityID в таблице Person.Person, атрибут sql:field не указывается. Сопоставление выполняется по умолчанию.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="Email" />
    <attribute type="BusinessEntityID" />
    <attribute type="Email" sql:field="EmailAddress" />
</ElementType>
</Schema>

Проверка образца запроса XPath к схеме

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

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем sqlFieldXdrT.xml в том же каталоге, в котором вы сохранили файл sqlFieldXdr.xml. Запрос в шаблоне выберет клиента со значением идентификатора BusinessEntityID, равным 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldXdr.xml">
        /Contacts[@BusinessEntityID="1"]
      </sql:xpath-query>
    </ROOT>
    

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

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

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

Частичный результирующий набор:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts BusinessEntityID="1" Email="gustavo0@adventure-works.com" /> 
</ROOT>

В схеме сопоставления атрибуты могут быть объявлены глобально (например <AttributeType...> объявляется вне области <ElementType>), после чего на них делается ссылка в <attribute type=...>, как показано в данной схеме.

В этой схеме атрибут LastName объявляется глобально, и ссылка на него производится в области Customer <ElementType>.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<AttributeType name="LastName" />
<ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />
    
    <attribute type="CustomerID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>

B. Укажите поле sql:field для <элемента> схемы XDR

В данной схеме с заметками задана заметка sql:field для <элемента> схемы. В заметке sql:field дочерний элемент <Email> схемы сопоставляется со столбцом EmailAddress таблицы Person.Person.

Без явной заметки дочерний элемент <Email> элемента <Contacts> схемы не будет сопоставлен со столбцом EmailAddress таблицы Person.Person, потому что по умолчанию осуществляется сопоставление элементов со связями, а не с полями (исключение составляет случай, когда <ElementType> содержит атрибут textOnly).

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Email" />
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

    <attribute type="BusinessEntityID" />
    <element type="Email" sql:field="EmailAddress" />
  </ElementType>
</Schema>

Проверка образца запроса XPath к схеме

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

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем sqlFieldElementXdrT.xml в том же каталоге, в котором вы сохранили файл sqlFieldElementXdr.xml. Запрос в шаблоне выберет клиента со значением идентификатора BusinessEntityID, равным 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldElementXdr.xml">
        /Contacts[@BusinessEntityID="1"]
      </sql:xpath-query>
    </ROOT>
    

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

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

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

Частичный результирующий набор:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts BusinessEntityID="1"> 
    <Email>gustavo0@adventure-works.com</Email> 
  </Contacts> 
</ROOT>

В случае указания content="textOnly" на почтовом адресе <ElementType> и при использовании имени по умолчанию столбца SQL ("EmailAddress") заметка sql:field для дочернего элемента не требуется. В этом случае дочерний элемент <EmailAddress> сопоставляется со столбцом EmailAddress таблицы Person.Person.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="EmailAddress" content="textOnly" />
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

    <attribute type="BusinessEntityID" />
    <element type="EmailAddress" />
  </ElementType>
</Schema>