我想寫一個Schematron規則,它測試內部值是當前年份,去年還是明年。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 -type ='epub-ppub']/year)是「2013-2014」。應該是當年(2013年),去年或明年。
非常優雅的解決方案!有一個upvote! – tfoo
啊,子串!謝謝! – user2093335