自定义 XSD 到表/列的映射 (SQLXML)
当使用 XSD 架构提供关系数据库的 XML 视图时,必须将该架构的元素和属性映射至数据库的表和列。 数据库表/视图中的行将映射至 XML 文档中的元素。 数据库中的列值映射到属性或元素。
当针对带批注的 XSD 架构指定 XPath 查询时,将从该架构中的元素和属性的数据映射到的表和列中检索这些数据。 若要从数据库中获取单个值,XSD 架构中指定的映射必须同时具备关系和字段规范。 如果元素/属性的名称与其映射到的表/视图或列名不同,则 sql:relation 和 sql:field 批注用于指定 XML 文档中的元素或属性与数据库中的表(视图)或列之间的映射。
sql-relation
添加了 sql:relation 注释,用于将 XSD 架构中的 XML 节点映射到数据库表。 表(视图)的名称指定为 sql:relation 批注的值。
在元素上指定 sql:relation 时,此批注的范围适用于该元素的复杂类型定义中描述的所有属性和子元素,因此在编写批注时提供快捷方式。
当MICROSOFT SQL Server 中的标识符在 XML 中无效时,sql:relation 注释也很有用。 例如,“订单详细信息”是 SQL Server 中有效的表名称,但不在 XML 中。 在这种情况下, sql:relation 批注可用于指定映射,例如:
<xsd:element name="OD" sql:relation="[Order Details]">
sql-field
sql 字段注释将元素或属性映射到数据库列。 将 sql:field 批注添加到架构中的 XML 节点映射到数据库列。 不能在空内容元素上指定 sql:field 。
示例
若要创建使用以下示例的工作示例,必须满足某些要求。 有关详细信息,请参阅 运行 SQLXML 示例的要求。
A. 指定 sql:relation 和 sql:field 批注
在此示例中,XSD 架构包含具有 FName 和 LName>> 子元素和< ContactID 属性的复杂类型的< Contact> 元素。<
sql:relation 注释将 <Contact> 元素映射到 AdventureWorks 数据库中的 Person.Contact 表。 sql:field 批注将 <FName 元素映射到 FirstName> 列,<将 LName 元素映射到 LastName> 列。
未为 ContactID 属性指定批注。 这导致将属性默认映射为具有相同名称的列。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Contact" sql:relation="Person.Contact" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FName"
sql:field="FirstName"
type="xsd:string" />
<xsd:element name="LName"
sql:field="LastName"
type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="ContactID"
type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
针对架构测试示例 XPath 查询
复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 MySchema-annotated.xml。
复制下面的模板,然后将其粘贴到文本文件中。 在您保存 MySchema-annotated.xml 的相同目录中将该文件另存为 MySchema-annotatedT.xml。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="MySchema-annotated.xml"> /Contact </sql:xpath-query> </ROOT>
为映射架构 (MySchema-annotated.xml) 指定的目录路径是相对于模板保存目录的相对路径。 也可以指定绝对路径,例如:
mapping-schema="C:\SqlXmlTest\MySchema-annotated.xml"
创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。
有关详细信息,请参阅 使用 ADO 执行 SQLXML 查询。
下面是部分结果集:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contact ContactID="1">
<FName>Gustavo</FName>
<LName>Achong</LName>
</Contact>
.....
</ROOT>