Я хочу написать правило Schematron, которое проверяет, соответствует ли значение текущему, прошлому или следующему году.
Проблема в том, что значение может содержать диапазон лет, например: 2013-2014. Я хочу проверить только первые четыре цифры текстового узла (2013).
Это то, что я написал, но это не правильно. Можете ли вы вернуть позицию текстового узла?
XML-файл:
<article>
<front>
<article-meta>
<pub-date pub-type="epub-ppub">
<year>2013-2014</year>
</pub-date>
</article-meta>
</front></article>
Правило схематрона:
<pattern abstract="false" id="year">
<rule context="/article/front/article-meta">
<assert
test="number(pub-date[@pub-type='epub-ppub']/year/text()[position() = 4]) = year-from-date(current-date()) or number(pub-date/year) = (year-from-date(current-date()) + 1) or number(pub-date/year) = (year-from-date(current-date()) - 1) or number(pub-date/year) = (year-from-date(current-date()) - 2)"
>The publication year (pub-date[@pub-type='epub-ppub']/year) is "<value-of
select="pub-date[@pub-type='epub-ppub']/year"/>". It should be the current year
(<value-of select="year-from-date(current-date())"/>), last year, or next
year.</assert>
</rule>
</pattern>
При проверке XML-файла правило срабатывает, но допустимым годом является 2013: год публикации (дата публикации[@pub-type='epub-ppub']/год) — «2013-2014». Это должен быть текущий год (2013), прошлый год или следующий год.