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


Исключение элементов схемы из результирующего XML-документа с помощью sql:mapped (SQLXML 4.0)

В результате сопоставления по умолчанию каждый элемент и атрибут в схеме XSD будет сопоставлен с таблицей и столбцом в базе данных. Если в схеме XSD нужно создать элемент, не сопоставленный никакой таблице, никакому представлению или столбцу базы данных и не фигурирующий в XML, нужно создать для него заметку sql:mapped.

Заметка sql:mapped особенно полезна, если схему нельзя изменять или она используется для проверки XML из других источников (при этом содержит данные, не хранящиеся в вашей базе данных). Заметка sql:mapped отличается от sql:is-constant тем, что несопоставленные элементы и атрибуты не фигурируют в XML-документе.

Заметка sql:mapped имеет логическое значение (0 = false, 1 = true). Допустимые значения: 0, 1, true и false.

Примеры

Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.

А. Задание заметки sql:mapped

Предположим, существует схема XSD, полученная из другого источника. Эта схема XSD состоит из элемента <Person.Person> и атрибутов BusinessEntityID, FirstName, LastName и HomeAddress.

При сопоставлении этой схемы XSD с таблицей Person.Person в базе данных База данных AdventureWorks2008R2sql:mapped задается в атрибуте HomeAddress, поскольку в таблице Employees не хранятся домашние адреса сотрудников. В результате этот атрибут не сопоставлен с базой данных и не возвращается в результирующем XML-документе в ответ на запрос XPath к схеме сопоставления.

Для остальной части схемы используется сопоставление по умолчанию. Элемент **<Person.Person>**сопоставляется с таблицей Person.Person, а все его атрибуты — со столбцами таблицы Person.Person, имеющими те же имена.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Person">
    <xsd:complexType>
      <xsd:attribute name="BusinessEntityID"   type="xsd:string"/>
      <xsd:attribute name="FirstName"    type="xsd:string" />
      <xsd:attribute name="LastName"     type="xsd:string" />
      <xsd:attribute name="HomeAddress" type="xsd:string" 
                     sql:mapped="false" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Проверка образца запроса XPath к схеме

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

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем sql-mappedT.xml в том же каталоге, где был сохранен файл sql-mapped.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="sql-mapped.xml">
            /Person.Person[@BusinessEntityID &lt; 10]
        </sql:xpath-query>
    </ROOT>
    

    Путь к каталогу для схемы сопоставления (MySchema.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\MyDir\sql-mapped.xml"
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе Использование объектов ADO для выполнения запросов SQLXML.

Результирующий набор:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Person BusinessEntityID="1" FirstName="Gustavo" LastName="Achong" /> 
  <Person.Person BusinessEntityID="2" FirstName="Catherine" LastName="Abel" /> 
  <Person.Person BusinessEntityID="3" FirstName="Kim" LastName="Abercrombie" /> 
  <Person.Person BusinessEntityID="4" FirstName="Humberto" LastName="Acevedo" /> 
  <Person.Person BusinessEntityID="5" FirstName="Pilar" LastName="Ackerman" /> 
  <Person.Person BusinessEntityID="6" FirstName="Frances" LastName="Adams" /> 
  <Person.Person BusinessEntityID="7" FirstName="Margaret" LastName="Smith" /> 
  <Person.Person BusinessEntityID="8" FirstName="Carla" LastName="Adams" /> 
  <Person.Person BusinessEntityID="9" FirstName="Jay" LastName="Adams" /> 
</ROOT>

Обратите внимание, что поля BusinessEntityID, FirstName и LastName присутствуют, а HomeAddress — нет, потому что в схеме сопоставления было задано значение 0 для атрибута sql:mapped.