2016-06-29 3 views
-3

확장베이스를 사용하는 복합 유형 'A'가 있습니다. 'Base'는 요소 시퀀스를 따릅니다. 이제 확장 base-'Base '는 complextype 자체이며 시퀀스 ex (Element 1,2,3)에서 여러 요소 참조를가집니다. 내가 가진 문제는 XML 유효성을 검사 할 때 요소 'A'에 잘못된 자식 '1'이 있고 XML의 다른 가능한 요소를 나열한다는 것입니다. 나는 그룹에서 일하고 있기 때문에 XML이 아닌 스키마 만 변경할 수 있습니다. 내가 그것을 설명하는 경우 주석을보고 난 후에 나는에 대한 약간의 정교한거야 그래서Complexype을 사용한 트러블 슈팅

이 스키마

<xsd:complexType name="A"> 
     <xsd:complexContent> 
      <xsd:extension base="Base" > 
       <xsd:sequence minOccurs="0" maxOccurs="unbounded"> 
        <xsd:element name="B" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="BData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
        <xsd:element name="C" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="CData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
        <xsd:element name="D" minOccurs="0"> 
         <xsd:complexType> 
          <xsd:complexContent> 
           <xsd:extension base="DData"/> 
          </xsd:complexContent> 
         </xsd:complexType> 
        </xsd:element> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 

는 XML이

<A> 
    <D/> 
    <B/> 
    <C/> 
    <T>  <---- This is the element from the base'Base' that gives me the error> 
    <......> 
    </T> 
</A> 

OK입니다 아래 SRY 이상한 예는 것 내 질문. 이것은 처음으로 질문을 올리는 것이며 내가 직면하고있는 문제는 내 직업과 관련이 있으므로 게시물을 구체적으로 게시 할 수 없습니다. 그래서 주요 문제는 'A'입니다. 그래서 내가 여러 XML의 유효성을 검사하는 스키마를 편집하고 있습니다. 그래서 목표는 Complextype A가 각 요소를 유효하게 할 수있는 방법을 찾지 만, 요소가 호출되는 순서 나 횟수에 관계없이 요소를 확장자라고 부르는 경우 동시에 호출합니다. 나는 '모든'요소를 연구했지만 그 문제는 단지 1 번만 발생할 수 있다는 것이다. 결론 : 시퀀스는 무제한으로 발생하지만 주문은 제한되며 모든 주문 제한은 없지만 발생은 1 개로 제한됩니다. 이것은 모든 해결책이 환영받는 문제의 토끼 구멍과 같습니다.

+1

XML 요소 이름은 숫자로 시작할 수 없습니다. – kjhughes

+0

닫는'xsd : sequence' 요소가 없습니다. – kjhughes

+0

참조 된 'Base' 선언을 포함하지 않았습니다. – kjhughes

답변

0

XSD 1.0에서 모든 복합 유형 확장은 첫 번째 멤버가 기본 유형에 정의 된 복합 유형이고 두 번째 멤버가 확장에 지정된 컨텐츠 모델 인 시퀀스를 만듭니다. 기본 유형의 소비자에 대한 보증은 요소의 시작 부분을 읽으면 필요한 요소를 찾게되며, 준비가되지 않은 어린이를 보게되면 읽을 수 없게됩니다. (또는 더 형식적으로 : 확장 된 유형 E의 유효한 인스턴스 I에는 I의 하위 유형에 대해 유효한 I의 하위 시퀀스에 접두어가 붙습니다.

XSD 1.1에서는 모든 그룹을 다른 모든 그룹으로 확장하고 그 결과로 (많은 사람들이 원했던대로) 더 큰 모든 그룹을 가질 수 있습니다. 시퀀스 및 선택 사항은 XSD 1.0에서와 동일하게 작동합니다.

인스턴스의 문제는 확장 유형이 허용하는 요소 대신에 기본 유형에 의해 허용되는 요소가 이전에 있었던 것보다 많아 졌기 때문입니다. 그 타입이 A 타입에서 합법적 이길 원한다면, A와베이스 사이의 관계는 타입 확장이 아닌 다른 방법으로 정의해야합니다.