Ограничение XSD элемента с наследованием не работает

Я пытаюсь наследовать и ограничить элемент, но получаю следующую ошибку (при проверке eclipse):

Частица типа не является допустимым ограничением частицы основания.

Элемент «Description» не должен быть частью элемента «TypeDevice». Я просто не могу понять, почему. Это должно быть возможно (согласно этому руководству):

Может кто-нибудь помочь мне?

Приветствую,

Счет

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com" xmlns="http://www.example.com" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <!--  Abstract Base Class  -->
  <xs:complexType name="AbstractDevice" abstract="true">
    <xs:sequence>
      <xs:element name="Name" type="xs:string" />
      <xs:element name="Description" type="xs:string" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" />
  </xs:complexType>

  <!--  Inheritance with restriction  -->
  <xs:complexType name="TypeDevice">
    <xs:complexContent>
      <xs:restriction base="AbstractDevice">                                
        <xs:sequence>
          <xs:element name="Name" type="xs:string" />
        </xs:sequence>
        <xs:attribute name="id" type="xs:string" use="required" />
      </xs:restriction>                        
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="TypeRoot">
    <xs:sequence>
      <xs:element name="Device" type="TypeDevice" />
    </xs:sequence>                
  </xs:complexType>
  <xs:element name="Configuration" type="TypeRoot" />
</xs:schema>

person Bill    schedule 18.02.2013    source источник


Ответы (1)


Тип AbstractDevice имеет два обязательных элемента, тогда как тип TypeDevice имеет только один. Таким образом, TypeDevice не является допустимым экземпляром своего базового типа AbstractDevice. Чтобы сделать его действительным, вы должны добавить элемент minOccurs="0" к элементу Description или изменить вывод и использовать расширение.

person jasso    schedule 18.02.2013
comment
Спасибо за Ваш ответ. Но я подумал, что это именно то, что можно сделать с ограничением, наложенным на элемент. Связанный учебник делает именно это (ограничивает элемент Author базового типа Book в производном элементе Pamphlet ограничением. Может быть, я что-то здесь неправильно понимаю. Кстати, в моей реализации невозможно установить Description на minOccurs=0 в базовый элемент. - person Bill; 19.02.2013