使用 sql:map-field 从生成的 XML 文档中排除架构元素(XDR 架构)

重要说明重要提示

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

根据默认映射,将 XDR 架构中的每个元素和属性映射到数据库表和列。同时,您可能要在 XDR 架构中创建不映射到任何数据库表或列也不在 XML 中显示的元素。这可以通过指定 sql:map-field 批注来完成。

sql:map-field 批注不同于 sql:is-constant,在该批注中未映射的元素和属性不显示在 XML 文档中。在不能修改架构或使用架构验证来自其他源的 XML 且包含未存储在您的数据库中的数据时,sql:map-field 特别有用。

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.Contact> 元素,该元素具有 ContactIDFirstNameLastName 属性。

在将此 XDR 架构映射到数据库中的 Person.Contact 表时,为 HomeAddress 属性指定 sql:map-field,因为 Person.Contact 表不存储雇员的家庭地址。因此,在针对映射架构指定 XPath 查询时,不在生成的 XML 文档中返回此属性。

为架构的其余部分进行默认映射。<Person.Contact> 元素映射到 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" />
    <AttributeType name="HomeAddress" />

    <attribute type="ContactID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
    <attribute type="HomeAddress" sql:map-field="0" />
</ElementType>
</Schema>

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

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

  2. 复制以下模板,并将它粘贴到文本文件中。在保存 mapField-xdr.xml 的相同目录中将文件另存为 mapField-xdrT.xml。模板中的查询选择 ContactID 为 1 的 Person.Contact 记录。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
    <sql:xpath-query mapping-schema="mapField-xdr.xml">
      /Person.Contact[@ContactID=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.Contact ContactID="1" FirstName="Gustavo" LastName = "Achong"/> 
</ROOT>

请注意结果集中包含 EmployeeID、FirstName 和 LastName 但是不包含 HomeAddress,因为映射架构为 sql:map-field 属性指定的值为 0。