我有一段XML,我正在尝试对其进行签名,然后验证哪个使用相对命名空间:
<Organization>
<OrganizationName xmlns:_xml="xml" _xml:lang="en">name</OrganizationName>
<OrganizationDisplayName xmlns:_xml="xml" _xml:lang="en">name</OrganizationDisplayName>
<OrganizationURL xmlns:_xml="xml" _xml:lang="en">http://www.example.com/</OrganizationURL>
</Organization>
OpenSAML 引发以下异常:
org.apache.xml.security.c14n.CanonicalizationException: Element 组织名称具有相对命名空间:_xml="xml">
为什么相对命名空间被认为是不好的?解析器当然可以在解析真实值时解析命名空间吗?
编辑:找到更多信息
XML 1.1 文档中的命名空间在第 2.2 节中指出:
这种相对 URI 引用的弃用是由 W3C 决定的 XML 全体会议投票 [相对 URI 弃用]。它还声明 "后来的规范,如 DOM、XPath 等,将定义 为他们解释"。
这是在相对 URI 引用的投票中投票支持的。
当命名空间规范被敲定时,有两种思想流派:一组认为命名空间名称应该只是一个名称(仅出于唯一性而选择的字符串(,另一组认为它应该标识 Web 上的一些资源,提供命名空间内容的描述: 也许是模式,也许是别的东西。现在,如果它只是一个字符串,那么任何字符串都可以。但是,如果它是资源的位置,则您希望根据其出现的元素的基本 URI 解析相对引用。在这一点上,两种思想流派之间没有妥协的余地,W3C 没有决定支持一个组或另一个组,而是决定不允许将相对 URI 作为命名空间名称 - 除非现在禁止它们为时已晚,因此它们被弃用。