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


Создание допустимых атрибутов типа ID, IDREF и IDREFS с помощью sql:id-prefix (схема XDR)

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

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

Атрибут может быть задан как атрибут типа ID. Атрибуты, указанные, как IDREF или IDREFS, можно использовать для ссылок на атрибуты типа ID, таким образом разрешая ссылки внутри документов.

ID, IDREF и IDREFS соответствует связям первичный ключ/внешний ключ в базе данных, с некоторыми отличиями. В XML-документе значения атрибутов типа ID должны быть различными. Если в XML-документе имеются атрибуты CustomerID и SalesOrderID, эти значения должны быть различными. Однако, в базе данных столбцы CustomerID и SalesOrderID могут иметь одинаковые значения (например, в базе данных допустимы значения CustomerID = 1 и OrderID = 1).

Чтобы атрибуты ID, IDREF и IDREFS были допустимыми, должны выполняться следующие условия.

  • Значение атрибута ID должно быть уникальным в пределах XML-документа.

  • Для каждого атрибута IDREF и IDREFS в XML-документе должны присутствовать значения ID, на которые ссылается этот атрибут.

  • Значением ID, IDREF и IDREFS должен быть именованный маркер (например, значение 101 не может быть значением ID).

  • Атрибуты типа ID, IDREF и IDREFS не могут быть сопоставлены столбцам типа text, ntext, image или любым другим данным типа binary (например, timestamp).

Если XML-документ содержит несколько идентификаторов, указывается заметка sql:id-prefix, чтобы обеспечить уникальность значений. . Заметка The sql:id-prefix также используется для создания именованных маркеров из чисел. Значение, указанное для sql:id-prefix, должно быть допустимым символом имени.

Атрибут sql:id-prefix предваряет значения ID, IDREF и IDREFS строкой, что делает их уникальными. Не выполняется проверок, чтобы обеспечить действительность префиксов и уникальность значение ID, IDREF и IDREFS.

Атрибут sql:id-prefix не учитывается для атрибутов типов, отличных от ID, IDREF и IDREFS.

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

Каждое значение атрибутов ID, IDREF и IDREFS ограничено 4 000 символов, включая префикс (если задан).

Примеры

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

А. Укажите sql:id-prefix для атрибута типа ID

В этой схеме XDR атрибуты SalesOrderID и CustomerID объявлены как тип ID. Чтобы обеспечить уникальность и допустимость значений, заметка sql:id-prefix, указывается для атрибутов:

<?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="Order" sql:relation="Sales.SalesOrderHeader" sql:key-fields="SalesOrderID">    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />    <AttributeType name="OrderDate" />     <attribute type="SalesOrderID" />    <attribute type="OrderDate" />  </ElementType>  <ElementType name="Customer" sql:relation="Sales.Customer">    <AttributeType name="CustomerID" dt:type="id" />    <attribute type="CustomerID" />    <AttributeType name="OrderList" dt:type="idrefs"                                 sql:id-prefix="Ord-" />    <attribute type="OrderList" sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID">        <sql:relationship                key-relation="Sales.Customer"                key="CustomerID"                foreign-relation="Sales.SalesOrderHeader"                foreign-key="CustomerID" />    </attribute>    <element type="Order">        <sql:relationship key-relation="Sales.SalesOrderHeader"                          key="SalesOrderID"                          foreign-relation="Sales.Customer"                          foreign-key="SalesOrderID" />    </element>  </ElementType></Schema>

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

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

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как sqlPrefix-XdrT.xml в том же каталоге, в котором был сохранен файл sqlPrefix-Xdr.xml. Запрос XPath в шаблоне возвращает вложенные элементы Customer> и <Order> со значением CustomerID, равным 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  <sql:xpath-query mapping-schema="sqlPrefix-Xdr.xml">    Customer[@CustomerID="1"]  </sql:xpath-query></ROOT>
    

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

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

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

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

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  <Customer CustomerID="1" OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">    <Order SalesOrderID="Ord-43860" OrderDate="2001-08-01T00:00:00" />     <Order SalesOrderID="Ord-44501" OrderDate="2001-11-01T00:00:00" />     <Order SalesOrderID="Ord-45283" OrderDate="2002-02-01T00:00:00" />     <Order SalesOrderID="Ord-46042" OrderDate="2002-05-01T00:00:00" />   </Customer></ROOT>