2014-02-25 3 views
1

xmllint를 만들어이 스키마의 유효성을 검사하려고합니다. 불행히도 나는 이상한 문제에 봉착했다. xmllint가 잘못된 옵션 인 인수를 해석하지 않는 것 같습니다. 인터리브 태그가 없습니다. 다음은 잘못된 태그 사람이있는 테스트 스키마이며 xmllint가 신호를 보내야합니다. 불행히도 xmllint는 다른 존재하지 않는 버그를 낭비하고 있습니다. 어쩌면 내가 뭔가 잘못하고 있어요 제발 좀 봐 :xmllint를 사용하여 RelaxNG 유효성 확인

<?xml version="1.0" encoding="ISO-8859-1"?> 
<grammar xmlns="http://relaxng.org/ns/structure/1.0"> 

<define name="testproject"> 
    <element name="testproject"> 
     <ref name="overview"/> 
     <ref name="tests"/> 
    </element> 
</define> 

<define name="overview"> 
    <element name="overview"> 
     <ref name="title"/> 
     <oneOrMore> 
      <ref name="person"/> 
     </oneOrMore> 
    </element> 
</define> 

<define name="tests"> 
    <element name="tests"> 

     <choice> 
      <attribute name="file"/> 

      <group> 
       <ref name="title"/> 
       <optional> 
        <ref name="field"/> 
       </optional> 
       <optional> 
        <ref name="field2"/> 
       </optional> 
       <optional> 
        <ref name="field3"/> 
       </optional> 

       <choice> 
        <zeroOrMore> 
         <ref name="test"/> 
        </zeroOrMore> 
        <zeroOrMore> 
         <ref name="tests"/> 
        </zeroOrMore> 
       </choice> 
      </group> 
     </choice> 
    </element> 
</define> 

<define name="test"> 
    <element name="test"> 
     <attribute name="name"/> 

     <interleave> 
      <optional> 
       <ref name="title"/> 
      </optional> 
      <ref name="field"/> 
      <zeroOrMore> 
       <ref name="person"/> 
      </zeroOrMore> 
     </interleave> 
    </element> 
</define> 

<define name="title"> 
    <element name="title"> 
     <text/> 
    </element> 
</define> 

<define name="field"> 
    <element name="field"> 
     <text/> 
    </element> 
</define> 

<define name="field2"> 
    <element name="field2"> 
     <text/> 
    </element> 
</define> 

<define name="field3"> 
    <element name="field3"> 
     <text/> 
    </element> 
</define> 

<define name="person"> 
    <element name="person"> 
     <text/> 
    </element> 
</define> 

<start> 
    <ref name="testproject"/> 
</start> 
</grammar> 

그리고 XML 파일 내용 :

<?xml version="1.0" encoding="ISO-8859-1"?> 

<testproject> 
<overview> 
    <title> 
     some title 
    </title> 
    <person>J33nn</person> 
</overview> 

<tests> 
    <title> 
     Some title test 
    </title> 
    <field>as</field> 
    <test name="TestName"> 
     <title>Some title</title> 

     <field> 
      dasdasd 
     </field> 

     <peron>J33nn</peron> 
    </test> 
</tests> 
</testproject> 

대신보고 맞춤법이 틀린 태그 페론의이 같은 것을보고합니다

요소 필드 : Relax-NG 유효성 오류 : 요소 테스트에 추가 콘텐츠가 있습니다. 필드

답변

2

xmllint을 XML 파일에서 스키마로 실행할 때보고하는 것과 동일한 오류가 발생합니다. 그러나 오류는 <field>as</field>에 대해보고되며이 요소는 해당 위치에서 허용되어야하기 때문에 전혀 이해가되지 않습니다. 내가 유효성 검사를 수행 할 수 jing를 사용하는 경우

, 내가 얻을 : 더 합리적인 결과

test.xml:23:16: error: element "peron" not allowed anywhere; expected the element end-tag or element "person" 

합니다. 나는 jing이 맞고 xmllint이 틀렸다고 확신합니다.

+0

True ** jing **은 잘 작동하지만 ** xmllint **이 작동하도록하려면 :/ – J33nn

+0

xmllint를 작동 시키려면 소스를 가져 와서 디버깅하거나 디버깅을 위해 지불해야합니다. 또는 xmllint 개발자가 발견 한 문제에 관심을 갖고 디버깅하도록하십시오. – Louis

+0

보고 된 바에 따르면 xmllint가 정상적으로 작동하는 것으로 보이는 외부 관찰자가 적어도 한 명 있습니다. 스키마가 유효합니까? 아니. xmllint가 유효하지 않다고 말합니까? 예. 문제는 xmllint의 진단이 좋지 않고 오류 메시지가 도움이되지 않는다는 것입니다. 잘못된 결과가 나옵니다. 시스템이 항상 좋은 오류 메시지를 생성하지 않습니다. –