2011-02-18 7 views
2

내가 진정-NG를 사용하여 일부 XML 문서에 대한 스키마를 작성하는 노력하고있어 나는 징와 함께 사용할 때, 나는 오류 메시지가 이해가 안 :relaxng : 잘못된 스키마 정의?

C:\tmp\xml>java -jar jing.jar -c list-test2.rnc list-test.xml 
C:\tmp\xml\list-test2.rnc:6:10: error: repeat of "string" or "data" element 

아무도 설명 할 수 왜 해결 방법을 알려주십시오. 여기

는 (단순성을 위해 고안) 샘플 문서입니다 :

목록-test.xml의 :

리스트 test.rnc : 여기

<?xml version="1.0" encoding="UTF-8"?> 
<list-test> 
    <list name="list1"> 
     foo.bar.baz 
     quux 
     be.bop.a.loo.bop 
     <hole name="somename" /> 
     tutti.frutti 
     abc678.foobar 
    </list> 
    <list name="list2"> 
     test1 
     test2 
     test3 
     <hole name="hole1" /> 
     <hole name="hole2" /> 
     test4 
     <hole name="hole3" /> 
    </list> 
</list-test> 

확인을 작동하는 스키마입니다 :

grammar { 

start = element list-test { list-test-content } 

list-test-content = 
    (element list { list-content })* 

list-content = 
    attribute name { text }, 
    (text | hole-element)* 

hole-element = 
    element hole { hole-content } 

hole-content = 
    attribute name { text } 

} 

하지만 특정과 일반 text 노드를 교체 할 때 텍스트 패턴, 나는 오류가 발생합니다.

리스트 test2.rnc가 :

grammar { 

start = element list-test { list-test-content } 

list-test-content = 
    (element list { list-content })* 

list-content = 
    attribute name { identifier }, 
    (qualified-identifier | hole-element)* 

hole-element = 
    element hole { hole-content } 

hole-content = 
    attribute name { identifier } 

identifier = 
    xsd:token { pattern="[A-Za-z_][A-Za-z_0-9]*" } 

qualified-identifier = 
    xsd:token { pattern="[A-Za-z_][A-Za-z_0-9]*(\.[A-Za-z_][A-Za-z_0-9]*)*" } 

} 

답변

2

당신은 NG의 기본 한계를 진정 중 하나에 대해 승진했습니다 : 요소의 내용이 복잡 할 수 있습니다 (텍스트 패턴, 요소 패턴, 시퀀스 패턴, 인터리브 패턴, 수량 패턴) 또는 단순 (데이터 패턴, 값 패턴 및 목록 패턴 포함)을 동시에 사용할 수는 있지만 둘 다 동시에 사용할 수는 없습니다. (물론 복잡한 내용과 단순한 내용 중 하나를 선택할 수도 있습니다.)

여기서는 텍스트를 사용하는 것보다는 실제로 Schematron 규칙을 두 개 이상 쓸 수는 없습니다.

관련 문제