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


Сопоставление по умолчанию элементов и атрибутов XDR с таблицами и столбцами

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

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

В схеме XDR с заметками элемент по умолчанию сопоставляется с таблицей или представлением с таким же именем, а атрибут сопоставляется со столбцом с тем же именем.

Простые дочерние элементы в схеме можно сопоставить со столбцами базы данных. Чтобы сопоставить элемент со столбцом в базе данных, указывается атрибут content для этого элемента со значением textOnly. Если content=textOnly не указан при сопоставлении элемента со столбцом базы данных, заметка sql:field должна быть явно указана, чтобы сопоставить <элемент> со столбцом базы данных. Дополнительные сведения см. в разделе Явное сопоставление элементов и атрибутов XDR с таблицами и столбцами.

Примеры

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

А. Задание сопоставления по умолчанию

В этом примере элемент <Person.Person> сопоставляется с таблицей Person.Person в базе данных База данных AdventureWorks2008R2, а все атрибуты сопоставляются со столбцами таблицы Person.Person, имеющими те же имена. В этой схеме XDR заметки не указываются.

<?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="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="BusinessEntityID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
</ElementType>
</Schema>

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

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

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем DefaultXdrT.xml в том же каталоге, где был сохранен файл DefaultXdr.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="DefaultXdr.xml">
            /Person.Person[@BusinessEntityID &lt; 3]
        </sql:xpath-query>
    </ROOT>
    

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

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

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

Полученный результирующий набор показан ниже.

<?xml version="1.0" encoding="UTF-8" ?>
<ROOT>
  <Person.Person BusinessEntityID="1" FirstName="Gustavo" LastName="Achong"/>
  <Person.Person BusinessEntityID="2" FirstName="Catherine" LastName="Abel">
</ROOT>

Б. Сопоставление <элемента> XML со столбцом базы данных

По умолчанию элемент XML сопоставляется с таблицей базы данных, а атрибут сопоставляется со столбцом базы данных. Чтобы сопоставить элемент со столбцом в базе данных, указывается атрибут content со значением textOnly.

Эта схема XDR состоит из того же элемента <Person.Person>, как и в предшествующем примере, но поля SQL (BusinessEntityID, FirstName, LastName) сопоставляются с дочерними элементами вместо атрибутов.

<?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="BusinessEntityID" content="textOnly" />
<ElementType name="FirstName" content="textOnly" />
<ElementType name="LastName"  content="textOnly" />

<ElementType name="Person.Person" >
    <element type="BusinessEntityID" />
    <element type="FirstName" />
    <element type="LastName"  />
</ElementType>
</Schema>

По умолчанию элемент <Person.Person> в схеме XDR сопоставляется с таблицей Person.Person в базе данных База данных AdventureWorks2008R2. Атрибут content указывается на дочерних элементах <FirstName> и <LastName>. Поэтому эти дочерние элементы сопоставляются со столбцами с теми же именами в таблице Person.Person.

ПримечаниеПримечание

Смешанное содержимое (элементы как для текстовых, так и дочерних элементов) не поддерживаются.

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

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

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем ElementXdrT.xml в том же каталоге, где был сохранен файл ElementXdr.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="ElementXdr.xml">
            /Person.Person[BusinessEntityID &lt; 3]
        </sql:xpath-query>
    </ROOT>
    

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

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

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

Полученный результирующий набор показан ниже.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Person>
    <BusinessEntityID>1</BusinessEntityID> 
    <FirstName>Gustavo</FirstName> 
    <LastName>Achong</LastName> 
  </Person.Person>
  <Person.Person>
    <BusinessEntityID>2</BusinessEntityID> 
    <FirstName>Catherine</FirstName> 
    <LastName>Abel</LastName> 
  </Person.Person>
</ROOT>