Исключение элементов схемы из итогового XML-документа при помощи sql:map-field (схема XDR)
![]() |
---|
Этот раздел включен в документацию в качестве справочника по приложениям прежних версий. Дальнейшая разработка этой функции проводиться не будет. Рекомендуется избегать использования данной функции в новых разработках. Вместо этого для создания XML-представлений пользуйтесь схемами XSD с заметками. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Можно преобразовать существующие схемы XDR с заметками в схемы XSD. Дополнительные сведения см. в разделе Преобразование схем XDR с заметками в эквивалентные схемы XSD (SQLXML 4.0). |
В результате сопоставления по умолчанию каждый элемент и атрибут в схеме XDR будет сопоставлен с таблицей и столбцом в базе данных. Иногда нужно создать элемент в схеме XDR, который не сопоставляется с таблицей базы данных или столбцом и не появляется в XML. Это делается с помощью заметки sql:map-field.
Заметка sql:map-field отличается от sql:is-constant тем, что несопоставляемые элементы и атрибуты не появляются в XML-документе. Заметка sql:map-field особенно полезна, если схему нельзя изменить, либо она используется для проверки XML по другим источникам, и, тем не менее, содержит данные, не хранящиеся в базе данных.
Заметка sql:map-field имеет логическое значение (0 = FALSE, 1 = TRUE). Заметка sql:map-field допустима только в <attribute>, <element> или <ElementTypes> с исключительно текстовым содержимым (content=textOnly). Она не допустима в <element> и <ElementTypes>, сопоставляющихся с таблицей.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.
A. Указание заметки sql:map-field
Предположим, что имеется схема XDR из какого-либо другого источника. Эта схема XDR состоит из элемента <Person.Person>, у которого имеются BusinessEntityID, FirstName, LastName и атрибуты.
При сопоставлении этой схемы XDR с таблицей Person.Person в базе данных sql:map-field задается в атрибуте HomeAddress, поскольку в таблице Person.Person не хранятся домашние адреса сотрудников. В результате этот атрибут не возвращается в XML-документе, если запрос XPath задан для схемы сопоставления.
Для остальной части схемы используется сопоставление по умолчанию. Элемент **< Person.Person >**сопоставляется с таблицей Person.Person, а все его атрибуты — со столбцами таблицы Person.Person, имеющими те же имена. Дополнительные сведения о сопоставлении по умолчанию см. в разделе Сопоставление по умолчанию элементов и атрибутов XDR с таблицами и столбцами.
<?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="Person.Person" >
<AttributeType name="BusinessEntityID" />
<AttributeType name="FirstName" />
<AttributeType name="LastName" />
<AttributeType name="HomeAddress" />
<attribute type="BusinessEntityID" />
<attribute type="FirstName" />
<attribute type="LastName" />
<attribute type="HomeAddress" sql:map-field="0" />
</ElementType>
</Schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как mapField.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем mapField-xdrT.xml в том же каталоге, где был сохранен файл mapField-xdr.xml. Запрос шаблона выбирает запись Person.Person с BusinessEntityID, равным 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="mapField-xdr.xml"> /Person.Person[@BusinessEntityID=1] </sql:xpath-query> </ROOT>
Путь к каталогу схемы сопоставления (mapField-xdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\MyDir\mapField-xdr.xml"
Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.
Полученный результирующий набор показан ниже.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Person BusinessEntityID="1" FirstName="Gustavo" LastName = "Achong"/>
</ROOT>
Обратите внимание, что присутствуют EmployeeID, FirstName и LastName, но не HomeAddress, поскольку в схеме сопоставления задано значение 0 для атрибута sql:map-field.