使用 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 架构由具有 <ContactID、FirstName、LastName 和 HomeAddress 属性的 Person.Contact> 元素组成。
在将此 XSD 架构映射到 AdventureWorks 数据库中的 Person.Contact 表时, sql:mapped
在 HomeAddress 属性上指定,因为 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。