Как описано в заголовке, я хочу найти способ проверить повторяющиеся данные атрибутов в родственных элементах XML.
Я уже знаю аналогичный вопрос [здесь] Проверить наличие дублирующихся данных атрибутов в родственных элементах - Schematron , и я пробовал через него, у меня не сработало.
Моя ситуация заключается в проверке нескольких атрибутов.
<root>
<test ZDX="a" XH="1" ps="sdf"/>
<test ZDX="a" XH="2" ps="dfg"/>
<test ZDX="a" XH="3" ps="hfgh"/>
<test ZDX="a" XH="2" ps="ertewr"/><!--same with the 2nd line-->
</root>
Мне нужно, чтобы элемент <test>
был уникальным с атрибутами ZDX
и XH
. все родственные элементы теста должны удовлетворять тому, что оба атрибута ZDX
и XH
не могут одновременно совпадать с другим тестом, иначе возникает ошибка проверки SchemaTron.
я пробовал так,
<rule context="/root/test">
<assert test="count(self::test) = count(self::test[not(@ZDX=preceding-sibling::test/@ZDX and @XH=preceding-sibling::test/@XH)])">
test is not unique
</assert>
</rule>
он отлично работает в ситуации выше, но не работает в ситуации ниже
<root>
<test ZDX="a" XH="1" ps="sdf"/>
<test ZDX="a" XH="2" ps="dfg"/>
<test ZDX="a" XH="3" ps="hfgh"/>
<test ZDX="a" XH="4" ps="ertewr"/>
<test ZDX="b" XH="5" ps="ndmfj"/>
<test ZDX="b" XH="6" ps="yuoi"/>
<test ZDX="b" XH="4" ps="qwrew"/><!--conflict with the 4th line-->
</root>
в последнем элементе test
XH="4"
запустит проверку, если я изменю последнюю строку <test ZDX="b" XH="4" ps="qwrew"/>
на <test ZDX="b" XH="7" ps="qwrew"/>
, она станет уникальной и не запустит проверку.
Итак, как я могу проверить как ZDX
, так и XH
в одной тестовой фразе Schematron?