2014-10-07 4 views
0

Я хочу, чтобы ограничить мой Derived тип, чтобы использовать только один элемент, а не два, как Base:Disallow один элемент из базы

<xs:complexType name="Base"> 
    <xs:sequence> 
     <xs:element name="MyElement" /> 
     <xs:group ref="MyGroup" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="Derived"> 
    <xs:complexContent> 
     <xs:restriction base="Base"> 
      <xs:sequence> 
       <xs:element name="MyElement" maxOccurs="0"/> 
       <xs:group ref="MyGroup" /> 
      </xs:sequence> 
     </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 

Так это должно подтвердить:

<Derived> 
    <ElementFromMyGroup /> 
</Derived> 

Но это не должно :

<Derived> 
    <MyElement /> 
    <ElementFromMyGroup /> 
</Derived> 

К сожалению, мое решение не является законным в XSD. Любая помощь приветствуется!

ответ

1

Проблема заключается в том, что ваш Derived типа не является ограничение вашего Base типа: есть случаи Derived, которые не являются экземплярами Base.

В зависимости от того, почему вы хотите, оба типа должны быть связаны друг с другом, вы можете указать общий супертип для них, с декларацией по этим направлениям:

<xs:complexType name="CommonSuperType"> 
    <xs:sequence> 
    <xs:element name="MyElement" minOccurs="0"/> 
    <xs:group ref="MyGroup" /> 
    </xs:sequence> 
</xs:complexType> 

Затем определяют текущие два типа как ограничения этого общего супертипа.

+0

Спасибо, вы совершенно правы! – WonderCsabo

Смежные вопросы