Xml 检查同一前缀中的多个URI

Xml 检查同一前缀中的多个URI,xml,xquery,Xml,Xquery,是否可以使用Xquery检查xml文档是否在不同的作用域中为相同的名称空间前缀分配了不同的URI?您可以从QName(node-name())中选择(//ns1:*,//ns1:*)/prefix来查找使用过的前缀,我认为: 当运行时,例如 <root xmlns="http://example.com/ns1"> <pf1:foo xmlns:pf1="http://example.com/ns1"> <pf1:bar xmlns:pf1=

是否可以使用Xquery检查xml文档是否在不同的作用域中为相同的名称空间前缀分配了不同的URI?

您可以从QName(node-name())中选择
(//ns1:*,//ns1:*)/prefix
来查找使用过的前缀,我认为:

当运行时,例如

<root xmlns="http://example.com/ns1">
    <pf1:foo xmlns:pf1="http://example.com/ns1">
        <pf1:bar xmlns:pf1="http://example.com/ns2"/>
        <pf3:baz xmlns:pf3="http://example.com/ns1">
            <foobar xmlns="" xmlns:pf4="http://example.com/ns1" pf4:att1="whatever"/>
        </pf3:baz>
    </pf1:foo>
</root>

它返回
pf1 pf3 pf4
,使用
count(来自QName(node-name())的不同值((//ns1:*,//ns1:*)/前缀)
检查是否使用了多个值。例如:


不确定空前缀,它可能需要一些额外的处理,因为它似乎不包括在上述结果中。

这只检查元素和属性名称中实际使用的名称空间前缀;它不会检查声明但未使用的前缀(或仅在内容中使用,例如包含QName或XPath表达式)。@MichaelKay,是的,你是对的,因为我认为XQuery不支持名称空间轴,例如我在某个名称空间中查找节点,我想一个更完整的解决方案需要使用中的函数,并按名称空间和前缀对节点进行分组。对于包含的QName,可能需要感知模式的处理来识别此类内容,不是吗?