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 列。因此,请注意以下事项:
- 您无法在 ArcCatalog 中预览表的 XML 列的内容。XML 列将显示为空白或在其中出现异常字符。
- 在表的“属性”对话框的“字段”选项卡中,不会列出任何用于 XML 列的数据类型。
- 您无法在各地理数据库之间复制和粘贴含有 XML 列的表。
- 如果使用地理处理工具对表执行导入或导出操作,则必须排除 XML 列。
- 您无法使用 ArcCatalog 将含有 XML 列的表注册为版本。
- 如果在 ArcMap 中打开含有 XML 列的表,XML 列将显示为空白。
- 要在 ArcMap 中对含有 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 更改以下任何表。
每当在业务表中添加一个 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 |
该表在每个 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 索引的文本 如果已使用索引定义文件创建索引,则可以在文件顶部指定索引描述。 |
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> 表用于存储 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> 表是针对具有 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 列的几个系统表。虚线表示表之间的隐含关系;实线表示表之间明确定义的关系。
XML 文档中的 XML 列
您不能将包含 XML 列的表导出到 XML 工作空间文档中。可以将其导出到 XML 记录集文档中,但该文档中不存在任何可以用来区辨出 XML 列的元素。