2012-10-25 2 views
1

XML 파일의 유효성을 검사하기 위해 Relax NG 스키마를 사용하고 싶습니다. 유효성 검사의 일환으로, 노드 집합에 공백이 없는지 확인하고 싶습니다. 처음 두 <emptyCheck> 노드를 확인하기 위해 예를 들어, 내가 좋아하는 것,하지만 세 번째와 네 번째 사람이 예에서 실패 :Relax NG를 사용하여 XML 노드가 비어 있고 공백이 없음을 확인하십시오.

<?xml version="1.0" encoding="UTF-8"?> 
<testRoot> 
    <emptyCheck/> 
    <emptyCheck></emptyCheck> 
    <emptyCheck> </emptyCheck> 
    <emptyCheck>x</emptyCheck> 
</testRoot> 

다음은 NG 스키마가 거의 작동 휴식을 취하십시오. 위 예제 XML은 <emptyCheck>의 네 번째 인스턴스에서는 실패하지만 세 번째 인스턴스에서는 실패합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0"> 
    <start> 
     <element name="testRoot"> 
      <oneOrMore> 
       <element name="emptyCheck"> 
        <empty/> 
       </element> 
      </oneOrMore> 
     </element> 
    </start> 
</grammar> 

대부분의 XML 처리에서 공백 만있는 노드는 실제로 중요하지 않습니다. 여전히 코딩 스타일 가이드를 적용 할 수 있도록이 문제를 해결하고 싶습니다. 그렇다면 Relax NG 스키마를 설정하여 노드가 완전히 비어 있어야 할 때 노드에 공백이있을 경우 문서의 유효성을 검사하지 않도록 할 수 있습니까?

답변

3

결정이 rational basis이긴하지만 비어있는 것으로 선언 된 요소가 공백을 포함하는 것을 허용하려면 RELAX NG가 기발한 것처럼 보일 수 있습니다.

: 당신의 RELAX NG 유효성 검사기는 XSD 데이터 유형을 지원하는 경우

어쨌든, (대부분이 할), 당신은 요소 내용이 길이가 0 인 문자열이어야 지정하여, 추가로 허용 된 요소의 내용을 제한하는 사람들을 사용할 수 있습니다

<?xml version="1.0" encoding="UTF-8"?> 
<grammar xmlns="http://relaxng.org/ns/structure/1.0" 
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
    <start> 
    <element name="testRoot"> 
     <oneOrMore> 
     <element name="emptyCheck"> 
      <data type="string"> 
      <param name="maxLength">0</param> 
      </data> 
     </element> 
     </oneOrMore> 
    </element> 
    </start> 
</grammar> 
+0

내가 사용하는 유효성 검사기는 산소 XML 편집기 (v13)와 함께 제공되는 것입니다. 이 솔루션은 예상대로 작동합니다. 감사. –