SQLXML 4.0 中的 xml 数据类型支持
从 SQL Server 2005 开始,SQL Server 通过 xml 数据类型支持 XML 类型化数据。本主题提供的信息介绍 SQLXML 4.0 如何识别 xml 数据类型的实例和如何为它们实现支持。
使用 xml 数据类型
为了解有关如何使用实现 xml 数据类型列的 SQL 表的更多信息,提供了以下示例:
任务 |
示例 |
主题 |
---|---|---|
如何在 XML 视图中映射和包含 xml 列 |
“将 XML 元素映射到 XML 数据类型列” |
|
如何使用 updategram 将数据插入到 xml 列中 |
“将数据插入到 XML 数据类型列” |
|
将 XML 数据大容量加载到 xml 列中 |
“在 xml 数据类型列中执行大容量加载” |
准则和限制
<xsd:any> 不能映射到包含 xml 数据类型的列。SQLXML 中对于此应用场景的支持是通过 sql:overflow-field 批注提供的。另一种解决办法是将 xml 数据类型字段映射为类型为 xsd:anyType 的元素。上表中引用的“将 XML 元素映射到 XML 数据类型列”示例介绍了这种解决办法。
不支持对于 xml 数据类型列的内容执行 XPath 查询。
在不支持或不允许 xml 数据类型列的批注(例如,sql:relationship 和 sql:key-fields)中使用此数据类型列将导致出现 SQL Server 错误,实现 SQLXML 4.0 的中间层组件将不会捕获这些错误。其原因在于 SQLXML 不要求 SQL 类型信息。这类似于其他数据类型(如 BLOB 和二进制类型)的 SQLXML 的行为。
仅对 XSD 架构支持映射 xml 列。XDR 架构不支持映射 xml 列。
SQLXML 4.0 依赖于 SQL Server 中提供的 XML 分析支持。xml 列可以映射为类型化的 XML 或非类型化的 XML。在任一种情况下,SQLXML 4.0 都不验证输入 XML。如果输入 XML 无效或格式不正确,SQL Server 将向 SQLXML 报告此情况,并将服务器返回的任何相关的错误信息传播给用户。
SQLXML 4.0 依赖于 SQL Server 中提供的对于 DTD 的有限支持。SQL Server 允许在 xml 数据类型的数据中使用内部 DTD,而内部 DTD 可用来提供默认值和将实体引用替换为其扩展的内容。SQLXML 将 XML 数据“按原样”(包括内部 DTD)传递到服务器。可以通过使用第三方工具将 DTD 转换为 XML 架构 (XSD),然后使用内联 XSD 架构将数据加载到数据库中。
SQLXML 4.0 不根据 SQL Server 的行为保留 XML 声明处理指令(例如,<?xml version='1.0'?>)。而是将 XML 声明视为针对 SQL Server XML 分析器的指令,并且,在将数据转换到 xml 数据类型之后,此声明的属性(version、encoding 和 standalone)将丢失。XML 数据在内部存储为 UCS-2。将保留 XML 实例中的所有其他处理指令;在 xml 列中允许使用这些指令,并且 SQLXML 支持它们。