XDR 元素和属性到表和列的默认映射

重要说明重要提示

本主题是针对早期应用程序提供的参考。以后不会就该功能继续进行开发。请避免在新的开发工作中使用此功能。请改用带批注的 XSD 架构创建 XML 视图。有关详细信息,请参阅带批注的 XSD 架构简介 (SQLXML 4.0)。可以将现有带批注的 XDR 架构转换为 XSD 架构。有关详细信息,请参阅将带批注的 XDR 架构转换为等效的 XSD 架构 (SQLXML 4.0)

在带批注的 XDR 架构中,元素默认映射为具有相同名称的表/视图,属性映射为具有相同名称的列。

您可以将该架构中不复杂的子元素映射为数据库列。若要将元素映射为数据库中的列,必须将该元素的 content 属性指定为 textOnly 值。如果将元素映射为数据库列时未指定 content=textOnly,则必须显式指定 sql:field 批注,以便将 <元素> 映射为数据库列。有关详细信息,请参阅 XDR 元素和属性与表和列的显式映射

示例

若要创建使用以下示例的工作示例,必须满足一些要求。有关详细信息,请参阅运行 SQLXML 示例的要求

A. 指定默认映射

在本示例中,<Person.Contact> 元素映射为 AdventureWorks 数据库中的 Person.Contact 表,所有属性映射为 Person.Contact 表中具有相同名称的列。在此 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.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="ContactID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
</ElementType>
</Schema>

针对该架构测试示例 XPath 查询

  1. 复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 DefaultXdr.xml。

  2. 复制以下模板,并将它粘贴到文本文件中。在保存 DefaultXdr.xml 的相同目录中将该文件另存为 DefaultXdrT.xml。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="DefaultXdr.xml">
            /Person.Contact[@ContactID &lt; 3]
        </sql:xpath-query>
    </ROOT>
    

    为映射架构 (DefaultXdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:

    mapping-schema="C:\MyDir\DefaultXdr.xml"
    
  3. 创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。

    有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询

下面是结果集:

<?xml version="1.0" encoding="UTF-8" ?>
<ROOT>
  <Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong"/>
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel">
</ROOT>

B. 将 XML <元素> 映射为数据库列

默认情况下,XML 元素映射为数据库表,属性映射为数据库列。若要将元素映射为数据库列,必须将 content 属性指定为 textOnly 值。

该 XDR 架构由前面示例中的相同 <Person.Contact> 元素组成,但 SQL 字段(ContactID、FirstName 和 LastName)映射为子元素而不是属性。

<?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="ContactID" content="textOnly" />
<ElementType name="FirstName" content="textOnly" />
<ElementType name="LastName"  content="textOnly" />

<ElementType name="Person.Contact" >
    <element type="ContactID" />
    <element type="FirstName" />
    <element type="LastName"  />
</ElementType>
</Schema>

XDR 架构中的 <Person.Contact> 元素默认映射为 AdventureWorks 数据库中的 Person.Contact 表。content 属性是针对 <FirstName><LastName> 子元素指定的。因此,这些子元素将映射为 Person.Contact 表中具有相同名称的列。

注意注意

不支持混合内容(具有文本和子元素的元素)。

针对该架构测试示例 XPath 查询

  1. 复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 ElementXdr.xml。

  2. 复制以下模板,并将它粘贴到文本文件中。在保存 ElementXdr.xml 的相同目录中将该文件另存为 ElementXdrT.xml。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="ElementXdr.xml">
            /Person.Contact[ContactID &lt; 3]
        </sql:xpath-query>
    </ROOT>
    

    为映射架构 (ElementXdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:

    mapping-schema="C:\MyDir\ElementXdr.xml"
    
  3. 创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。

    有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询

下面是结果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Contact>
    <ContactID>1</ContactID> 
    <FirstName>Gustavo</FirstName> 
    <LastName>Achong</LastName> 
  </Person.Contact>
  <Person.Contact>
    <ContactID>2</ContactID> 
    <FirstName>Catherine</FirstName> 
    <LastName>Abel</LastName> 
  </Person.Contact>
</ROOT>