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


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

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

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

Заметка sql:relation добавлена, чтобы сопоставлять узел XML из схемы XDR с таблицей базы данных. Имя таблицы или представления указывается как значение заметки sql:relation.

Заметку sql:relation можно добавить к узлу <ElementType>, <element> или <attribute> в схеме XDR. Заметка sql:relation определяет сопоставление между узлом <ElementType>, <element> или <attribute> из схемы с таблицей или представлением из базы данных.

При указании заметки sql:relation для узла <ElementType> область действия этой заметки распространяется на все спецификации атрибутов и дочерних элементов в этом узле <ElementType>. За счет этого обеспечивается более быстрый способ написания заметок. Когда заметка sql:relation указывается непосредственно для узла <element>, ее действие также распространяется на атрибуты, указанные в узле <ElementType>. Заметка sql:relation пропускается для параметра <AttributeType>.

Заметка sql:relation полезна в тех случаях, когда идентификаторы, которые являются допустимыми в Microsoft SQL Server, недопустимы в XML. Например, имя таблицы «Order Details» допустимо в SQL Server, но не допустимо в XML. В этих случаях заметка sql:relation может использоваться для указания сопоставления, например следующим образом.

<ElementType name="OD" sql:relation="[Order Details]">

Примеры

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

А. Указание заметки sql:relation для узла <ElementType>, содержащего атрибуты

В этом примере схема XDR состоит из элемента <Contacts> с атрибутами BusinessEntityID, FirstName и LastName. Заметка sql:relation указывается для элемента <ElementType>, сопоставляя элемент <Contacts> с таблицей Person.Person. Область действия этого сопоставления распространяется на все атрибуты элемента <ElementType>. Поэтому все атрибуты сопоставляются со столбцами в таблице Person.Person.

Сопоставление по умолчанию имеет место для всех атрибутов. Например, атрибуты сопоставляются со столбцами из таблицы 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="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

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

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

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

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

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

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

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

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

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

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
    <Contacts BusinessEntityID="1" FirstName="Gustavo" 
              LastName="Achong" /> 
</ROOT>

Б. Указание заметки sql:relation для узла <ElementType>, содержащего вложенные элементы и атрибуты

В этом примере схема XDR состоит из элемента <Contacts> с атрибутом BusinessEntityID и дочерними элементами <FirstName> и <LastName>. Заметка sql:relation указывается для элемента <ElementType>, сопоставляя элемент <Contacts> с таблицей Person.Person. Область действия этого сопоставления распространяется на все атрибуты элемента <ElementType>. Поэтому все атрибуты сопоставляются со столбцами в таблице Person.Person.

Сопоставление по умолчанию применяется для атрибутов. Атрибуты сопоставляются со столбцами из таблицы Person.Person, имеющими такие же имена.

В этом примере атрибут content указан для дочерних элементов <FirstName> и <LastName>. Без атрибута content=textOnly дочерние элементы не будут сопоставлены с соответствующими столбцами FirstName и LastName таблицы 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="FirstName" content="textOnly"/>
  <ElementType name="LastName" content="textOnly"/>
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

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

В качестве альтернативы вместо указания атрибута content=textOnly в определении element можно указать заметку sql:field, чтобы сопоставить дочерние элементы (FirstName, LastName) с соответствующими именами столбцов, как показано в следующих примерах:

<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />

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

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

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

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

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

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

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

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

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts BusinessEntityID="1"> 
    <FirstName>Gustavo</FirstName>
    <LastName>Achong</LastName>
  </Contacts>
</ROOT>