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


Исключение элементов схемы из итогового 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 к схеме

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

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