2017-10-10 4 views
1

私はXML開発において非常に新しいので、私は実際に私が専門家ではないためにオンライン資料を読んでいます。私は私のschematronファイルに問題があります。xpathで@seqを使用してブックパーツの正しい順序を確認する

問題: schematronは、すべてのブックパーツが@seqを通して順番にチェックされているかどうかを確認する必要があります。しかし、私の現在のschematronタグ付けは、ネストされたブックパーツでは機能しません。

XML:

<book> 
    <meta>....</meta> 
    <body> 
    <book-part seq="1">....</book-part> 
    <book-part seq="2">....</book-part> 
    <book-part seq="3"> 
     <book-part-meta>....</book-part-meta> 
     <book-body> 
      <book-part seq="4">....</book-part> 
      <book-part seq="5">....</book-part> 
      <book-part seq="6">....</book-part> 
     </book-body> 
    </book-part> 
    <book-part seq="7"> 
     <book-part-meta>....</book-part-meta> 
     <book-body> 
      <book-part seq="8">....</book-part> 
      <book-part seq="9">....</book-part> 
      <book-part seq="10">....</book-part> 
     </book-body> 
    </book-part> 
    <book-part seq="11">....</book-part> 
    <book-part seq="12">....</book-part> 
</body> 
</book> 

Schematronのタグ付け:
<rule context="book-part[@seq]"> <report role="error" test="preceding::book-part[@seq] and number(@seq) != (number(preceding::book-part[1]/@seq) + 1)">Book-parts must be in sequence</report> </rule>

Schematronのエラーブック部分配列= "4"ブック部分配列= "8"。最初にネストされた本の部分に問題があるようです。これで私を助けることができる人がいますか?

答えて

0

ここで階層レベルを混在させています。この場合に必要なのはpreceding::だけでなく、parent::です。 (一貫性を保つためには、サブレベルで1から始めなければならないと思いますが、それは私の個人的な意見であり、ここでのポイントではありません)@seqが正しいかどうかは、先行する祖先のブックパーツ一緒:

<pattern id="test"> 
    <rule context="book-part[@seq]"> 
     <report role="error" 
      test="number(@seq) != count(ancestor::book-part[@seq] | preceding::book-part[@seq]) + 1" 
      >Book-parts must be numbered in sequence</report> 
    </rule> 
</pattern> 

私は別のルールでは、他の条件(本の部分に先行する@seqを持っている必要があります)扱っていました:

<pattern id="test2"> 
    <rule context="book-part[@seq]"> 
     <report role="error" 
      test="preceding::book-part[not(@seq)] | ancestor::book-part[not(@seq)]" 
      >Book-parts must be numbered</report> 
    </rule> 
</pattern> 
+1

をああ、これは私が現時点で持っているものと比較し、より簡単なようです。 – Tin

+0

非常に感謝しています! –

関連する問題