使用 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-field 元素或属性映射到数据库列。 添加 sql:field 注释以将架构中的 XML 节点映射到数据库列。 不能在空内容元素上指定 sql:field 。
例子
若要创建使用以下示例的工作示例,必须满足某些要求。 有关详细信息,请参阅 运行 SQLXML 示例的要求。
答: 指定 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-annotatedT.xml 保存在保存 MySchema-annotated.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>