Я использую ISO Schematron для проверки XML-документа. Правило, которое я установил, работает как требуется, но я хочу сообщить имя родительского элемента из контекста, где выполняется мое утверждение. Образец документа может содержать фрагмент XML:
<Name>Alan Smith<br/></Name>
Мое правило Schematron проверяет, что элемент <br/>
допускается только как дочерний элемент элемента <title>
. Правило следующее:
<rule context="br">
<assert test="parent::title"
>The "br" element is not allowed as a child of the '<iso:value-of select=".."/>' element.'</assert>
</rule>
Когда я запускаю это правило для фрагмента, утверждение корректно срабатывает, однако я хочу, чтобы в сообщении говорилось, что элемент "br" недопустим как дочерний элемент элемента "Name". Вместо этого он фактически показывает, что «элемент br» недопустим как дочерний элемент элемента «Alan Smith» ». Таким образом, выражение <iso:value-of select=".."/>
фактически выбирает текстовый узел, а не родительский элемент, как я ожидал? Может кто-нибудь помочь объяснить, какое выражение XPpath я должен использовать в операторе select для отображения имени родительского элемента в моем сообщении об ошибке? Спасибо.
ОБНОВЛЕНИЕ: мне удалось достичь желаемого результата, удалив оператор выбора и заменив его элементом имени, как в:
<rule context="br">
<assert test="parent::title"
>The "br" element is not allowed as a child of the '<name path=".."/>' element.'</assert>
</rule>
Итак, моя проблема решена, но если кто-нибудь сможет объяснить, почему моя первая попытка не работает, это было бы очень полезно.