带批注的 XSD 架构简介 (SQLXML 4.0)

您可以通过使用 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.Person> 元素。<Employee> 元素具有一个 BusinessEntityID 属性以及 <FirstName><LastName> 子元素:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Person" >
   <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="Person" sql:relation="Person.Person" >
   <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="BusinessEntityID" 
                       type="xsd:integer" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

在映射架构中,通过使用 sql:relation 批注将 <Person> 元素映射到示例数据库 AdventureWorks2008R2 中的 Person.Person 表。通过使用 sql:field 批注,将属性 ConID、FName 和 LName 映射到 Person.Person 表中的 BusinessEntityID、FirstName 和 LastName 列。

此带有批注的 XSD 架构提供了关系数据的 XML 视图。可使用 XPath 语言查询此 XML 视图。XPath 查询返回的结果是一个 XML 文档,而 SQL 查询返回的结果是行集。

注意注意

在映射架构中,指定关系值(如表名和列名)是否区分大小写取决于 SQL Server 是否使用区分大小写的排序规则设置。有关详细信息,请参阅使用 SQL Server 排序规则

其他资源

有关 XML 架构定义语言 (XSD)、XML Path 语言 (XPath) 和可扩展样式表语言转换 (XSLT) 的详细信息,请访问以下网站: