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