Использование заметки 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.Contact.
Поскольку имя атрибута ContactID в схеме XDR идентично имени столбца ContactID в таблице Person.Contact, 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.Contact" > <AttributeType name="ContactID" /> <AttributeType name="Email" /> <attribute type="ContactID" /> <attribute type="Email" sql:field="EmailAddress" /></ElementType></Schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл под именем sqlFieldXdr.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем sqlFieldXdrT.xml в том же каталоге, в котором вы сохранили файл sqlFieldXdr.xml. Запрос в шаблоне выберет клиента со значением идентификатора ContactID, равным 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlFieldXdr.xml"> /Contacts[@ContactID="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 ContactID="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.Contact" > <AttributeType name="ContactID" /> <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.Contact.
Без явным образом сделанной заметки дочерний элемент <Email> элемента <Contacts> схемы не будет сопоставлен со столбцом EmailAddress таблицы Person.Contact, потому что по умолчанию осуществляется сопоставление элементов с отношениями, а не с полями (исключение составляет тот случай, когда <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.Contact" > <AttributeType name="ContactID" /> <attribute type="ContactID" /> <element type="Email" sql:field="EmailAddress" /> </ElementType></Schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл под именем sqlFieldXdr.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем sqlFieldElementXdrT.xml в том же каталоге, в котором вы сохранили файл sqlFieldElementXdr.xml. Запрос в шаблоне выберет клиента со значением идентификатора ContactID, равным 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlFieldElementXdr.xml"> /Contacts[@ContactID="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 ContactID="1"> <Email>gustavo0@adventure-works.com</Email> </Contacts> </ROOT>
В случае указания content="textOnly" на почтовом адресе <ElementType> и при использовании имени по умолчанию столбца SQL ("EmailAddress") заметка sql:field для дочернего элемента не требуется. В этом случае дочерний элемент <EmailAddress> сопоставляется со столбцом EmailAddress таблицы Person.Contact.
<?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.Contact" > <AttributeType name="ContactID" /> <attribute type="ContactID" /> <element type="EmailAddress" /> </ElementType></Schema>