Создание допустимых атрибутов типа 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 к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как sqlPrefix-Xdr.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как 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"
Создайте и запустите тестовый сценарий 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>