2012-06-15 3 views
4

의 시퀀스를 반복하는 I은 도시 된 바와 같이 해당 용어의 개수 및 순서대로 N-1 AND를 (N> 0)가 될 수있는 XML있다. 다음 xml 스키마를 시도했지만 xml보다 크면 스키마에 대해 유효성이 검사되지 않습니다. 오류 : cvc-complex-type.2.4.b : '검색'요소의 콘텐츠가 완전하지 않습니다. '{그리고}'중 하나가 예상됩니다.XML 스키마 요소

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="Search"> 
     <xs:complexType> 
      <xs:sequence>    
       <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
        <xs:element name="Term" type="xs:string" /> 
        <xs:element name="And" type="xs:string" /> 
       </xs:sequence>    
       <xs:element name="Term" minOccurs="1" maxOccurs="1" type="xs:string" />    
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

xml 스키마에 대한 모든 도움을 주시면 감사하겠습니다.

+0

은 "그리고"원소의 목적은 무엇인가? 운영자처럼 사용하고 있습니까? – Kelly

+0

예, 운영자입니다. or, not, 등등과 같은 여러 타입의 연산자가 있습니다. 그러나 나는 추상적 인 타입을 사용하여 그것에 대해 연구 중입니다. – bluetech

+0

XSD가 유효하지 않습니다. Unique Particle Attribution 규칙을 위반합니다. – toniedzwiedz

답변

9

이렇게 다시 정렬하면됩니다. 내가 놓친 게 있니?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="Search"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Term" minOccurs="1" maxOccurs="1" type="xs:string" /> 
       <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
        <xs:element name="And" type="xs:string" /> 
        <xs:element name="Term" type="xs:string" /> 
       </xs:sequence> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
4

수정 된 콘텐츠 모델 형식은 실제로 설명한 언어를 인식합니다.

그러나 표면의 문자 그대로의 전사가 아닌 원하는 추상 구문 트리 관점에서 XML을 생각하면 XML은 좀 더 관용적 일 수 있습니다. 트리가 아닌 토큰 시퀀스를 위해 고안된 구문

용어 사이에 빈 And 요소를 사용하는 대신 And 요소에 용어의 결합을 두십시오.

<Search> 
    <And> 
    <Term>...</Term> 
    <Term>...</Term> 
    <Term>...</Term> 
    </And> 
</Search> 

그것의 운영자로 돌리는 무엇 우선 순위 순서에 대해 걱정할 필요없이, 임의의 부울 조합을 할 지금 하찮게 쉽게 :

<Search> 
    <Or> 
    <And> 
     <Term>...</Term> 
     <Or> 
     <Term>...</Term> 
     <Term>...</Term> 
     </Or> 
    </And> 
    <And> 
     <Term>...</Term> 
     <not><Term>...</Term></not> 
    </And> 
    </Or> 
</Search>