使用 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> 元素,该元素具有 ContactID、FirstName 和 LastName 属性。
在将此 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 查询
复制上面的架构代码,并将它粘贴到文本文件中。将该文件另存为 mapField-xdr.xml。
复制以下模板,并将它粘贴到文本文件中。在保存 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"
创建并使用 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。