XPath 如何处理具有冲突扩展名称的属性?
How does XPath deal with attributes which have conflicting expanded names?
鉴于以下文档...
<?xml version="1.1"?>
<doc xmlns="https://www.example.com" xmlns:n1="https://www.example.com"
a="1"
n1:a="2"/>
... (Q1) 这个 xpath 3.1 表达式的规范结果是什么..
n2:doc/@n2:a
...如果上下文节点是文档,并且名称空间绑定 xmlns:n2="https://www.example.com"
附加到 xpath 处理器?
(Q2) 表达式呢...
doc/@a
...在 xpath 处理器上具有 xmlns="https://www.example.com"
的命名空间绑定?
我试过的
我在各种不同的 xpath 实现中得到了不一致的结果,这表明这是 XPath 规范中的一个灰色区域。我什至经历过 return 两个节点的序列,乍一看,这是一个意想不到的结果。
参考文献:
您的示例中的属性没有冲突,因为没有前缀的属性不在命名空间中,不在包含元素的默认命名空间中。如果前缀 n2
绑定到命名空间 https://www.example.com
,@n2:a
将 select 命名空间属性; @a
将始终 select 无命名空间属性。 (如果您从一个实现中看到不同的行为,那就是错误的。)
如果属性实际上存在冲突怎么办,例如,如果您有一个元素
<doc xmlns:n0="https://www.example.com"
xmlns:n1="https://www.example.com"
n0:a="1"
n1:a="2"/>
并通过非名称空间感知的 XML 解析器进行处理?
答案是输入违反了 XDM 规范中的约束,该规范定义了 XPath 的数据模型。 XDM 3.1 的一些引述:
§2.7:与本数据模型中描述的其他一致性约束一样,满足这些约束是前提条件;规范不会推测如果不是这样会发生什么。
§3:数据模型支持格式良好的 XML 文档,符合 [XML 中的命名空间] 或 [XML 1.1 中的命名空间]。
§6.2.1:元素节点必须满足以下约束。
(2) 元素的属性节点必须有不同的xs:QNames.
所以答案是,如果您的系统允许您在命名空间格式不正确的文档上执行 XPath 表达式(很可能是这种情况,例如/一些 DOM 实现不是命名空间-默认情况下知道),然后 XPath 规范明确表示所有赌注都已关闭。
鉴于以下文档...
<?xml version="1.1"?>
<doc xmlns="https://www.example.com" xmlns:n1="https://www.example.com"
a="1"
n1:a="2"/>
... (Q1) 这个 xpath 3.1 表达式的规范结果是什么..
n2:doc/@n2:a
...如果上下文节点是文档,并且名称空间绑定 xmlns:n2="https://www.example.com"
附加到 xpath 处理器?
(Q2) 表达式呢...
doc/@a
...在 xpath 处理器上具有 xmlns="https://www.example.com"
的命名空间绑定?
我试过的
我在各种不同的 xpath 实现中得到了不一致的结果,这表明这是 XPath 规范中的一个灰色区域。我什至经历过 return 两个节点的序列,乍一看,这是一个意想不到的结果。
参考文献:
您的示例中的属性没有冲突,因为没有前缀的属性不在命名空间中,不在包含元素的默认命名空间中。如果前缀 n2
绑定到命名空间 https://www.example.com
,@n2:a
将 select 命名空间属性; @a
将始终 select 无命名空间属性。 (如果您从一个实现中看到不同的行为,那就是错误的。)
如果属性实际上存在冲突怎么办,例如,如果您有一个元素
<doc xmlns:n0="https://www.example.com"
xmlns:n1="https://www.example.com"
n0:a="1"
n1:a="2"/>
并通过非名称空间感知的 XML 解析器进行处理?
答案是输入违反了 XDM 规范中的约束,该规范定义了 XPath 的数据模型。 XDM 3.1 的一些引述:
§2.7:与本数据模型中描述的其他一致性约束一样,满足这些约束是前提条件;规范不会推测如果不是这样会发生什么。
§3:数据模型支持格式良好的 XML 文档,符合 [XML 中的命名空间] 或 [XML 1.1 中的命名空间]。
§6.2.1:元素节点必须满足以下约束。 (2) 元素的属性节点必须有不同的xs:QNames.
所以答案是,如果您的系统允许您在命名空间格式不正确的文档上执行 XPath 表达式(很可能是这种情况,例如/一些 DOM 实现不是命名空间-默认情况下知道),然后 XPath 规范明确表示所有赌注都已关闭。