使用 sql:mapped 从生成的 XML 文档中排除架构元素 (SQLXML 4.0)
由于是默认映射,XSD 架构中的每个元素和属性都映射到数据库表/视图和列。如果要在 XSD 架构中创建不映射到任何数据库表(视图)或列并且不在 XML 中显示的元素,可以指定 sql:mapped 批注。
如果架构不能修改或者架构用于验证来自其他源的 XML,并且架构还包含尚未存储在数据库中的数据,则 sql:mapped 批注尤为有用。sql:mapped 批注不同于 sql:is-constant,因为未映射的元素和属性不出现在 XML 文档中。
sql:mapped 批注接受布尔值(0 = false,1 = true)。可接受的值为 0、1、true 和 false。
示例
若要创建使用以下示例的工作示例,必须满足一些要求。有关详细信息,请参阅 运行 SQLXML 示例的要求。
A. 指定 sql:mapped 批注
假定您有来自其他源的 XSD 架构。此 XSD 架构由 <Person.Contact> 元素组成,该元素具有 ContactID、FirstName、LastName 和 HomeAddress 属性。
在将此 XSD 架构映射到 AdventureWorks 数据库中的 Person.Contact 表时,对 HomeAddress 属性指定 sql:mapped,因为 Employees 表不存储雇员的家庭地址。因此,在针对映射架构指定 XPath 查询时,此属性不会映射到数据库,并且不会在生成的 XML 文档中返回此属性。
为架构的其余部分进行默认映射。<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 查询
复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 sql-mapped.xml。
复制以下模板,并将它粘贴到文本文件中。在保存 sql-mapped.xml 的相同目录中将该文件另存为 sql-mappedT.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"
创建并使用 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,因为映射架构为 sql:mapped 属性指定了值 0。