您可以通过使用 XML 架构定义 (XSD) 语言创建关系数据的 XML 视图。 然后可通过使用 XML Path 语言 (XPath) 查询对这些视图进行查询。 这与使用 CREATE VIEW 语句创建视图然后对该视图指定 SQL 查询类似。
XML 架构描述了 XML 文档的结构并且还描述了对文档中数据的各种约束。 针对该架构指定 XPath 查询时,返回的 XML 文档的结构由对其执行 XPath 查询的架构确定。
在 XSD 架构中,<xsd:schema> 元素包含整个架构,所有元素声明均必须包含在 <xsd:schema> 元素中。 您可以描述用来定义如下命名空间的属性:该架构所在的命名空间,以及该架构中用作 <xsd:schema> 元素属性的命名空间。
有效的 XSD 架构必须包含按如下方式定义的 <xsd:schema> 元素:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<!-- additional schema definitions here -->
</xsd:schema>
<xsd:schema> 元素派生自 XML 架构命名空间规范,该规范的网址为 http://www.w3.org/2001/XMLSchema。
XSD 架构的批注
您可以对 XSD 架构使用批注来描述数据库映射、查询数据库并返回 XML 文档形式的结果。 使用批注可将 XSD 架构映射到数据库表和列。 可以对 XSD 架构创建的 XML 视图指定 XPath 查询来查询数据库并获取 XML 形式的结果。
![]() |
---|
在 Microsoft SQLXML 4.0 中,XSD 架构语言支持随 SQL Server 2000 中带批注的 XML-Data Reduced (XDR) 架构语言引入的批注。 SQLXML 4.0 中不推荐使用带批注的 XDR。 |
在关系数据库上下文中,将任意 XSD 架构映射到关系存储区很有用。 实现这种映射的一种方法是对 XSD 架构进行批注。 带有批注的 XSD 架构称为“映射架构”,该架构提供了有关如何将 XML 数据映射到关系存储区的信息。 实际上,映射架构是关系数据的 XML 视图。 使用这些映射能够以 XML 文档形式检索关系数据。
批注的命名空间
在 XSD 架构中,将使用命名空间 urn:schemas-microsoft-com:mapping-schema 指定批注。 如下例所示,指定命名空间最简便的方法是在 <xsd:schema> 标记中指定它。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
...
</xsd:schema>
命名空间可采用任意前缀。 在本文档中,sql 前缀用于表示批注命名空间,并且可用来区分此命名空间中的批注与其他命名空间中的批注。
带批注的 XSD 架构的示例
在下例中,XSD 架构包含一个 <Person.Contact> 元素。 <Employee> 元素具有一个 ContactID 属性和 <FirstName> 及 <LastName> 子元素:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Contact" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FName"
type="xsd:string" />
<xsd:element name="LName"
type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="ConID" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
向该 XSD 架构添加批注以将其元素和属性映射到数据库表和列:
<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="ConID"
sql:field="ContactID"
type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
在映射架构中,通过使用 sql:relation 批注将 <Contact> 元素映射到 AdventureWorks 示例数据库中的 Person.Contact 表。 通过使用 sql:field 批注,将属性 ConID、FName 和 LName 映射到 Person.Contact 表中的 ContactID、FirstName 和 LastName 列。
此带有批注的 XSD 架构提供了关系数据的 XML 视图。 可使用 XPath 语言查询此 XML 视图。 XPath 查询返回的结果是一个 XML 文档,而 SQL 查询返回的结果是行集。
![]() |
---|
在映射架构中,指定关系值(如表名和列名)是否区分大小写取决于 SQL Server 是否使用区分大小写的排序规则设置。 有关详细信息,请参阅排序规则和 Unicode 支持。 |
其他资源
有关 XML 架构定义语言 (XSD)、XML Path 语言 (XPath) 和可扩展样式表语言转换 (XSLT) 的详细信息,请访问以下网站:
XML Schema Part 0: Primer, W3C Recommendation (http://www.w3.org/TR/xmlschema-0/)
XML Schema Part 1: Structures, W3C Recommendation (http://www.w3.org/TR/xmlschema-1/)
XML Schema Part 2:Datatypes, W3C Recommendation (http://www.w3.org/TR/xmlschema-2/)
XML Path Language (XPath) (http://www.w3.org/TR/xpath)
XSL Transformations (XSLT) (http://www.w3.org/TR/xslt)