声明命名空间前缀
实际应用中的 XML 文档使用命名空间受限的元素来确保处理数据的应用程序正确地解释文档。如果您的应用程序使用 OpenXML 从 XML 文档提取数据,您可能需要在某一点将命名空间受限的元素指定为 OpenXML 用于构造关系视图的行模式和列模式的 XPath 查询。行模式使用 XPath 查询从 XML 文档选择与关系视图中的行相对应的元素。列模式使用 XPath 查询为每一行选择列。指定命名空间受限的元素或属性可能是个挑战,尤其是在您不知道在 XML 中将使用哪些前缀的情况下。命名空间前缀提供了一种简化的方法,以便指定元素或属性属于由统一资源标识符 (URI) 定义的特定命名空间。您不能依靠与特定命名空间相关联的前缀,因为命名空间规范允许您随意选择前缀,甚至允许不同的前缀对应于同一个命名空间。(有关命名空间规范的更多信息,请参见 Namespaces in XML 规范,网址是 http://www.w3.org/TR/1999/REC-xml-names-19990114/。)不过,通过使用系统存储过程,您可以克服未声明的命名空间前缀的问题。
Sp_xml_preparedocument 是一个系统提供的存储过程,T-SQL 可用它将 XML 文档解析为内存中的表示形式,并将一个数字句柄返回到内存中的文档。OpenXML 使用此句柄来获得 XML 文档的内存中的表示形式,并生成一个合并了该文档包含的数据的行集合。如果您以前使用过 sp_xml_preparedocument,您应该很熟悉第一个参数(XML 文档的内存中的表示形式的句柄)和第二个参数(解析到内存中的 XML 文档)。但可能令您感到惊讶的是,您可以将第三个可选参数传递到 sp_xml_preparedocument。此参数包含为您可以在 OpenXML 语法中使用的命名空间声明前缀的 XML 文档。您只需为该文档编写一个根元素,然后在上面加入命名空间声明即可。例如, XML 文档为与 "urn:myPerson