Схематрон проверки нескольких элементов
Предположим, у меня есть XML-документ, определяющий:
<people>
<person>
<city>London</city>
</person>
<person>
<city>Paris</city>
</person>
</people>
Мне нужен схематрон, который проверяет, что каждый человек живет в Лондоне.
Я старался:
<sch:rule context="people">
<sch:assert test="person/city = 'London'">Everybody must live in London!</sch:assert>
</sch:rule>
Тем не менее, это вернет истину, если в Лондоне живет один человек. Есть ли способ, которым я могу сказать schematron применить тест к каждому элементу, соответствующему человеку / городу XPathcondition?
2 ответа
Решение
Как насчет "никто не может жить за пределами Лондона":
<sch:rule context="people">
<sch:assert test="not(person[city != 'London'])">Everybody must live in London!</sch:assert>
</sch:rule>
Это имеет много разных решений. Пример решения 1, сообщите, если кто-то не живет в Лондоне:
<sch:rule context="people">
<sch:report test="person/city != 'London'">Everybody must live in London!</sch:report>
</sch:rule>
Пример решения 2, в котором утверждается, что каждый человек должен проживать в Лондоне, обратите внимание, что в нем сообщается о каждом человеке, не живущем в Лондоне, как об ошибке, а не только о сообщении people
,
<sch:rule context="people/person">
<sch:assert test="city = 'London'">This person should be living in london</sch:assert>
</sch:rule>