使用 sql:mapped 从 XML 文档中排除架构元素
适用于: SQL Server Azure SQL 数据库
由于是默认映射,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。