SQL Server 中地理数据库中的 XML 列

XML 是一种用于在文档内部定义数据元素的开放标准。要将 XML 数据存储在 Microsoft SQL Server 数据库中,可以使用原生 XML 列,也可以使用 ArcSDE XML 列。

您可以将用户定义的 XML 文档存储为任一类型的 XML 格式。参数 XML_COLUMN_STORAGE DBTUNE 用于控制所采用的 XML 的类型。默认情况下,此参数设置为 DB_XML。因此,默认情况下,将使用原生的 SQL Server XML 数据类型。

注注:

如果打算对原生的 SQL Server XML 列使用 XPath 查询,则还必须创建全文目录。有关详细信息,请参阅 SQL Server 文档。

ArcSDE XML 数据类型需要 SQL Server 数据库启用全文搜索,并需要创建一个全文目录。如果要了解如何执行此操作,请参阅 SQL Server 存储 ArcSDE XML 列之前的准备工作在 SQL Server 中创建全文目录

ArcGIS for Desktop 中的 XML 列

地理数据库不完全支持 XML 列。因此,请注意以下事项:

SQL Server DBMS 中的 ArcSDE XML 列

有三个 ArcSDE 系统表可用于管理 XML 列:SDE_xml columns、SDE_xml_index_tags 和 SDE_xml_indexes。这三个表由 ArcSDE 管理员用户所有。ArcSDE 还会为每个 XML 列额外创建两个表,分别用于存储 XML 文档和为其建立索引:SDE_xml_document 表和 SDE_xml_xpath_index 表。如果某用户是含有 XML 列的业务表的所有者,则该用户也是这两个表的所有者。

ArcSDE 将创建以下表,用于存储 XML 文档以及为其建立索引。

警告警告:

请勿使用 SQL 更改以下任何表。

SDE_xml_columns

每当在业务表中添加一个 XML 列,就会在 XML 列的表中添加一行。该表在每个 ArcSDE 数据库中都会出现一次。

字段名

字段类型

描述

是否允许为空

column_id

int

XML 列的标识符和表的主键

在创建 XML 列时由 ArcSDE 分配此值。

NOT NULL

registration_id

int

包含 XML 列的业务表的标识符以及系统表 SDE_table_registry 的外键

NOT NULL

column_name

nvarchar(32)

业务表中 XML 列的名称

NOT NULL

index_id

int

与 XML 列(如果存在)相关联的 XPath 索引的标识符以及 SDE_xml_indexes 表的外键

minimum_id

int

在业务表的 XML 列中使用的初始编号值,用于标识各 XML 文档

config_keyword

nvarchar(32)

DBTUNE 配置关键字,它的参数可确定如何在数据库中定义 XML 文档、XML XPath 索引表以及针对这些表所创建的文本索引

有关详细信息,请参阅 SQL Server 中的 ArcSDE XML 参数

xflags

int

指示 XML 文档表中的原始文档是以压缩形式存储还是以解压缩形式存储的值

默认情况下,文档以压缩形式存储,这是因为压缩后的文档可以提高性能。

NOT NULL

SDE_xml_indexes

该表在每个 ArcSDE 数据库中都会出现一次。它为具有 XPath 索引的每个 XML 列都提供了一行空间。

字段名

字段类型

描述

是否允许为空

index_id

int

XPath 索引的标识符以及表的主键

NOT NULL

index_name

nvarchar(32)

XPath 索引的名称

NOT NULL

owner

nvarchar(32)

拥有 XML 列的数据库用户

NOT NULL

index_type

int

指示 XPath 索引类型的值

在 ArcGIS 9.1 及更高版本中,值为 2 时表示索引类型 SE_XML_INDEX_DEFINITION,值为 1 时表示索引类型 SE_XML_INDEX_TEMPLATE。

NOT NULL

描述

nvarchar(64)

用于标识 XPath 索引的文本

如果已使用索引定义文件创建索引,则可以在文件顶部指定索引描述。

SDE_xml_index_tags

XML 列可以使用 XPath 索引(是否使用取决于具体需要),这使您可以对每个文档中的特定 XML 元素或属性的内容进行搜索。有关每个 XPath 索引中包含或排除哪些元素和属性都在此表中进行定义。

该表在每个 ArcSDE 数据库中都会出现一次。它为 XML 列的 XPath 索引所关联的每个 XPath 都提供一行空间。

字段名

字段类型

描述

是否允许为空

index_id

int

与 XML 列(如果存在)相关联的 XPath 索引的标识符以及 SDE_xml_indexes 表的外键

NOT NULL

tag_id

int

XPath 或标记的标识符

NOT NULL

tag_name

nvarchar(1024)

对 XML 文档中可能出现的 XML 元素或属性进行标识的绝对 XPath

例如,/metadata/mdDateSt 用于标识 XML 元素,/metadata/dataIdInfo/tpCat/TopicCatCd/@value 用于标识 XML 属性。这些 XPath 不得使用星号 (*) 来指代一组 XML 元素或属性,每个元素或属性都按照此表中指定的 XPath 进行精确匹配。在有效的 XML 文档中,不能将元素命名为 *。

NOT NULL

data_type

int

指示 XML 元素或属性的索引形式是数字、变长字符还是文本的值

1 表示标签内容的索引形式是文本;2 表示标签内容的索引形式是数字;3 表示标签内容的索引形式是变长字符。

NOT NULL

tag_alias

int

可以用来标识 XPath 的数字

例如,Z39.50 通信协议使用数字代码指示可以搜索的内容。

描述

nvarchar(64)

对 XML 元素或属性中应包含的内容进行标识的文本

is_excluded

int

指示 XPath 索引中是包含还是排除 XML 元素的值

0 = 包含 XML 元素;1 = 排除 XML 元素。

NOT NULL

SDE_xml_doc<column_id>

SDE_xml_doc<column_id> 表用于存储 XML 文档并对 XML 文档内容的全文索引进行维护。ArcSDE 数据库中针对每个 XML 列都有一个这样的表。表名称中的数字是 XML 列的标识符。该表为存储在 XML 列中的每个 XML 文档都提供了一行空间。

字段名

字段类型

描述

是否允许为空

sde_xml_id

int

存储在 XML 列中的 XML 文档的标识符以及表的主键

NOT NULL

doc_property

int

指示在向 XPath 索引添加 XML 文档内容时是否发现任何冲突的值

1 = 发现一处冲突;例如,某个元素的索引形式本应是数字,而文档却在该元素中包含一个字符串。NULL 值 = 为文档建立索引时未出现任何问题。

NOT NULL

xml_doc

varbinarymax

XML 文档

NOT NULL

xml_doc_val

varbinarymax

删除了所有 XML 标记和其他置标的整个 XML 文档的内容

默认情况下,系统为该列建立文本索引;此索引用于响应全文查询。

NOT NULL

sde_time_stamp

timestamp

用于支持对文本索引的增量更新

NOT NULL

SDE_xml_idx<column_id>

SDE_xml_idx<column_id> 表是针对具有 XPath 文本索引的 XML 列而创建的。此表用于存储已建立索引的每个 XPath 的文本或数字内容。

表名称中的 ID 号是 XML 列的内部注册号。

字段名

字段类型

描述

是否允许为空

xml_key_column

int

索引值的标识符以及表的主键

NOT NULL

sde_xml_id

int

包含索引值的 XML 文档的标识符

NOT NULL

tag_id

int

与 XML 列的 XPath 索引相关联的标记的标识符,用于标识该值在文档中的存储位置

NOT NULL

double_tag

float

在 XPath 索引定义中将标记定义为 DOUBLE 时的索引值

string_tag

nvarchar(256)

在 XPath 索引定义中将标记定义为 VARCHAR 时的索引值

text_tag

ntext

在 XPath 索引定义中将标记定义为 STRING 时的索引值

sde_time_stamp

timestamp

用于支持对文本索引的增量更新

NOT NULL

下图展现了一个包含 XML 列的表以及用于追踪 XML 列的几个系统表。虚线表示表之间的隐含关系;实线表示表之间明确定义的关系。

SQL Server 中的站点业务表以及用于追踪 XML 列的系统表

XML 文档中的 XML 列

您不能将包含 XML 列的表导出到 XML 工作空间文档中。可以将其导出到 XML 记录集文档中,但该文档中不存在任何可以用来区辨出 XML 列的元素。

相关主题

5/10/2014