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


Исключение элементов схемы из итогового 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.Contact с атрибутами ContactID>, FirstName, LastName и HomeAddress.

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

Сопоставление по умолчанию выполняется для остальной части схемы. Элемент <Person.Contact сопоставляется с таблицей Person.Contact> , а все атрибуты сопоставляют столбцы с одинаковым именем в таблице Person.Contact.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Person.Contact">  
    <xsd:complexType>  
      <xsd:attribute name="ContactID"   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.Contact[@ContactID < 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.Contact ContactID="1" FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel" />   
  <Person.Contact ContactID="3" FirstName="Kim" LastName="Abercrombie" />   
  <Person.Contact ContactID="4" FirstName="Humberto" LastName="Acevedo" />   
  <Person.Contact ContactID="5" FirstName="Pilar" LastName="Ackerman" />   
  <Person.Contact ContactID="6" FirstName="Frances" LastName="Adams" />   
  <Person.Contact ContactID="7" FirstName="Margaret" LastName="Smith" />   
  <Person.Contact ContactID="8" FirstName="Carla" LastName="Adams" />   
  <Person.Contact ContactID="9" FirstName="Jay" LastName="Adams" />   
</ROOT>  

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

См. также

Сопоставление элементов XSD и атрибутов по умолчанию с таблицами и столбцами (SQLXML 4.0)