我想编写一个 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>
Schematron 规则:
<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-date[@pub-type='epub-ppub']/year) 为“2013-2014”。应该是今年(2013 年)、去年或明年。