【问题标题】:check for multiple URIs in the same prefix检查同一前缀中的多个 URI
【发布时间】:2019-10-21 00:44:17
【问题描述】:

是否可以使用 Xquery 来检查一个 xml 文档是否有不同的 URI 分配给不同范围内的相同名称空间前缀?

【问题讨论】:

    标签: xml xquery


    【解决方案1】:

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

    在例如运行时

    <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(distinct-values((//ns1:*, //@ns1:*)/prefix-from-QName(node-name())))检查是否有多个使用。示例:https://xqueryfiddle.liberty-development.net/948Fn5t/1

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

    【讨论】:

    • 这仅检查元素和属性名称中实际使用的命名空间前缀;它不检查已声明但未使用的前缀(或仅在内容中使用,例如包含的 QNames 或 XPath 表达式)。
    • @MichaelKay,是的,你是对的,因为我认为 XQuery 不支持命名空间轴我以在某个命名空间中查找节点为例,我想更完整的解决方案需要使用w3.org/TR/xpath-functions/#QName-functions 中的函数并按命名空间然后按前缀对节点进行一些分组。至于包含的 QName,可能需要模式感知处理来识别此类内容,不是吗?
    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 2012-04-05
    • 2015-07-24
    • 2020-12-26
    • 2011-12-16
    • 1970-01-01
    • 2013-01-07
    相关资源
    最近更新 更多