2017-10-10 1 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> 

스키마 트론 태그 :
<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>

스키마 트론 오류 책 부분 서열 = "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

많은 감사를드립니다! –

관련 문제