带批注的 XDR 架构简介(不推荐在 SQLXML 4.0 中使用)

重要说明重要提示

本主题是针对早期应用程序提供的参考,以后不会就该功能继续进行开发。请避免在新的开发工作中使用此功能,而应使用带批注的 XSD 架构来创建 XML 视图。有关详细信息,请参阅带批注的 XSD 架构简介 (SQLXML 4.0)。可以将现有带批注的 XDR 架构转换为 XSD 架构。有关详细信息,请参阅将带批注的 XDR 架构转换为等效的 XSD 架构 (SQLXML 4.0)

可以使用 XDR(XML 数据简化)架构创建关系数据的 XML 视图。然后可通过使用 XPath 查询对这些视图进行查询。这与使用 CREATE VIEW 语句创建视图然后对该视图指定 SQL 查询类似。

XML 架构描述 XML 文档的结构,并且还描述对文档中数据的各种约束。针对该架构指定 XPath 查询时,返回的 XML 文档的结构由对其执行 XPath 查询的架构确定。

在 MicrosoftSQL Server 2000 中,首先引入了 XML 数据简化 (XDR) 语言以创建 XML 架构。当时,XDR 很灵活并克服了文档类型定义 (DTD) 的一些限制(文档类型定义也可用于描述 XML 文档结构)。与 DTD 不同,XDR 架构使用与 XML 文档相同的语法描述文档的结构。此外,在 DTD 中,所有数据内容都是字符数据。通过 XDR 语言架构,您可以指定元素或属性的数据类型。

在 XDR 架构中,<Schema> 元素包含整个架构。作为 <Schema> 元素的属性,您可以描述用于定义架构名称和架构所在命名空间的特性。在 XDR 语言中,所有元素声明都必须包含在 <Schema> 元素中。

最小的 XDR 架构为:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data">
   ...
</Schema>

<Schema> 元素派生自 xml-data 命名空间 (urn:schemas-microsoft-com:xml-data)。

注意注意

本文档假定您熟悉 XML 数据语言。

XDR 架构的批注

您可以对 XDR 架构使用批注来描述数据库映射,以查询数据库并以 XML 文档形式返回结果。SQL Server 2000 首先引入了许多批注,您可以使用这些批注将 XDR 架构映射到 SQL 数据库表和列。可以对由 XDR 架构创建的 XML 视图指定 XPath 查询来查询数据库并获取 XML 格式的结果。

这可替代以下这一更为复杂的过程:编写一个 SQL 查询,该查询使用 FOR XML EXPLICIT 模式将 XML 文档结构描述为查询的一部分。但是,为了克服针对映射架构进行 XPath 查询的大多数限制,请使用 SQL 查询以及 FOR XML EXPLICIT 模式以返回 XML 文档形式的结果。

如果您具有公共 XDR 架构(如 Microsoft BizTalk 架构),则可以执行以下任一操作:

  • 编写 FOR XML EXPLICIT 模式查询,以便所生成的数据对于公共 XDR 架构有效;然而,编写 FOR XML EXPLICIT 查询可能非常繁琐。

  • 制作公共 XDR 架构的专用副本。然后,向此专用副本添加批注,从而生成映射架构。可以针对此映射架构指定 XPath 查询。结果,查询生成的内容就是公共架构的命名空间中的数据。与编写复杂的 FOR XML EXPLICIT 查询相比,创建带批注的架构并针对它们指定 Xpath 查询的过程要简单得多。下图说明了该过程。

使用架构的副本以进行批注。

映射架构

在关系数据库的上下文中,将任意 XDR 架构映射到关系存储区很有用。实现这一点的一种方法是对 XDR 架构进行批注。带有批注的 XDR 架构称为“映射架构”,它提供有关如何将 XML 数据映射到关系存储区的信息。实际上,映射架构是关系数据的 XML 视图。使用这些映射能够以 XML 文档形式检索关系数据。

SQL Server 2000 引入了许多批注,可以在 XDR 架构中使用它们将元素和属性映射到数据表和列。可以使用 XPath (XML Path) 针对此映射架构(XML 视图)指定查询。此映射架构描述所生成的文档结构。

批注的命名空间

在 XDR 架构中,使用以下命名空间指定批注:urn:schemas-microsoft-com:xml-sql。

以下示例说明,指定命名空间最简便的方法是在 <Schema> 标记中指定它。必须将批注的命名空间限定到 urn:schemas-microsoft-com:xml-sql 命名空间。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql"
               >
    ...........
</Schema>

所用的命名空间前缀可采用任意前缀。在本文档中,sql 前缀用于表示批注命名空间,并且可用来区分此命名空间中的批注与其他命名空间中的批注。

数据类型的命名空间

通过 XDR 架构,您可以指定元素或属性的数据类型。数据类型通过以下命名空间指定:urn:schemas-microsoft-com:datatypes。

这是具有命名空间声明的最小 XDR 架构:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql"
        xmlns:dt="urn:schemas-microsoft-com:datatypes">
   ...
</Schema>

所用的命名空间前缀可采用任意前缀。在本文档中,dt 前缀用于表示数据类型命名空间,并且可用来区分此命名空间中的批注与其他命名空间中的批注。

<Schema> 元素派生自 xml-data 命名空间:urn:schemas-microsoft-com:xml-data。

XDR 架构的示例

本示例说明如何将批注添加到 XDR 架构。此 XDR 架构由 <Contacts> 元素以及 CIDFNameLName 属性组成。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<ElementType name="Contacts" >
    <AttributeType name="CID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />

    <attribute type="CID" />
    <attribute type="FName" />
    <attribute type="LName" />
</ElementType>
</Schema>

现在,向此 XDR 架构添加批注,以将其元素和属性映射到 AdventureWorks 示例数据库中的 SQL 表和列的名称。以下是带批注的 XDR 架构:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="CID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />

    <attribute type="CID" sql:field="ContactID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>

在映射架构中,通过使用 sql:relation 批注将 <Contacts> 元素映射到 Person.Contact 表。通过使用 sql:field 批注,将属性 CIDFNameLName 映射到 Person.Contact 表中的 ContactID、FirstName 和 LastName 列。

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

注意注意

在映射架构中,指定的关系值(如表名和列名)区分大小写。