Можно ли использовать Xquery для проверки того, имеет ли документ xml разные URI, присвоенные одному и тому же префиксу пространства имен в разных областях?
Вы можете выбрать (//ns1:*, //@ns1:*)/prefix-from-QName(node-name()), чтобы найти используемые префиксы, которые я думаю:
(//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
pf1 pf3 pf4
count(distinct-values((//ns1:*, //@ns1:*)/prefix-from-QName(node-name())))
Не уверен насчет пустого префикса, может потребоваться дополнительная обработка, поскольку он не включен в приведенный выше результат.