XML 的目录视图
目录视图用于提供有关 XML 用法的元数据信息。下节中讨论了部分目录视图。
XML 索引
XML 索引项位于目录视图 sys.indexes 中,索引“type”为 3。名称列包含 XML 索引的名称。
另外,XML 索引还记录在目录视图 sys.xml_indexes 中。此视图包含 sys.indexes 的所有列以及对 XML 索引有用的某些特定列。secondary_type 列中的值 NULL 表示主 XML 索引;值“P”、“R”和“V”分别表示 PATH、PROPERTY 和 VALUE 辅助 XML 索引。
可以在表值函数 sys.dm_db_index_physical_stats 中找到 XML 索引的空间使用情况。它提供了所有索引类型的相关信息,例如,占用的磁盘页数、平均行大小(字节)和记录数。其中也包括 XML 索引。对于每个数据库分区,都提供此信息。XML 索引使用基表的相同分区方案和分区函数。
检索 XML 架构集合
XML 架构集合在目录视图 sys.xml_schema_collections 中枚举出来。XML 架构集合“sys”由系统定义。它包含无需显式加载即可在所有用户定义的 XML 架构集合中使用的预定义命名空间。此列表包含 xml、xs、xsi、fn 和 xdt 的命名空间。另外两个目录视图是 sys.xml_schema_namespaces(它枚举每个 XML 架构集合中的所有命名空间)和 sys.xml_components(它枚举每个 XML 架构中的所有 XML 架构组件)。
内置函数 XML_SCHEMA_NAMESPACE(schemaName、XmlSchemacollectionName、namespace-uri)生成 xml 数据类型实例。此实例包含在 XML 架构集合中所包含架构(预定义的 XML 架构除外)的 XML 架构片段。
可以按下列方式枚举 XML 架构集合的内容:
编写对 XML 架构集合的相应目录视图的 Transact-SQL 查询。
使用内置函数 XML_SCHEMA_NAMESPACE()。您可以对此函数的输出应用 xml 数据类型方法。但不能修改基础 XML 架构。
这些在下列示例中进行了说明。
示例:枚举 XML 架构集合中的 XML 命名空间
对 XML 架构集合“myCollection”使用下面的查询:
SELECT XSN.name
FROM sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE XSC.name = 'myCollection'
示例:枚举 XML 架构集合的内容
以下语句枚举关系架构 dbo 中的 XML 架构集合“myCollection”的内容。
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')
可以通过将目标命名空间指定为 XML_SCHEMA_NAMESPACE() 的第三个参数,获取集合中单个 XML 架构作为 xml 数据类型实例。下面的示例说明了这一点。
示例:从 XML 架构集合输出指定的架构
以下语句从关系架构 dbo 中的 XML 架构集合“myCollection”输出目标命名空间为“https://www.microsoft.com/books”的 XML 架构。
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/books')
查询 XML 架构
可以按下列方式查询加载到 XML 架构集合的 XML 架构:
编写对 XML 架构命名空间的目录视图的 Transact-SQL 查询。
创建包含 xml 数据类型列的表以存储 XML 架构并将它们加载到 XML 类型系统。可以使用 xml 数据类型方法查询 XML 列。另外,还可以对此列生成 XML 索引。但是,使用此方法时,应用程序必须保持 XML 列中存储的 XML 架构和 XML 类型系统之间的一致性。例如,如果从 XML 类型系统中删除 XML 架构命名空间,还必须从表中删除它以保持一致性。