В правиле Schematron, как я могу получить доступ к родительскому элементу текущего элемента? - PullRequest
2 голосов
/ 11 апреля 2011

Я использую 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>

Итак, моя проблема решена, но если кто-нибудь сможет объяснить, почему моя первая попытка не работает, это было бы очень полезно.

Ответы [ 2 ]

1 голос
/ 25 февраля 2016

Я считаю, что оригинальное решение tony_h не работает из-за префикса iso :.Поскольку остальная часть кода не разделяет пространство имен.Пропуск этой части решит проблему.

1 голос
/ 11 апреля 2011

Так работает элемент value-of. От http://www.schematron.com/iso/P8.html#GEN16

value-of элемент

Находит или рассчитывает значения из экземпляр документа, чтобы сделать его более понятным утверждения и диагностика. обязательный атрибут select является выражение вычисляется в текущем контекст, который возвращает строку.

Переменные ссылки в select атрибут разрешается в объеме текущая схема, фаза, шаблон и править.

Реализация, которая не доклад на естественном языке утверждений не требуется использовать это элемент.

С помощью этого выражения XPath вы можете получить имя родителя узла контекста.

name(..)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...