Я пытаюсь получить производные сложные типы из базового типа в схеме xsd.
это хорошо работает, когда я делаю это (вдохновленный этим ):
XML-файл:
<person
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Employee">
<name>John</name>
<height>59</height>
<jobDescription>manager</jobDescription>
</person>
xsd файл:
<xs:element name="person" type="Person"/>
<xs:complexType name="Person" abstract="true">
<xs:sequence>
<xs:element name= "name" type="xs:string"/>
<xs:element name= "height" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Employee">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="jobDescription" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Однако, если я хочу, чтобы элемент person был внутри, например, последовательности другого сложного типа, он больше не работает:
XML:
<staffRecord>
<company>mycompany</company>
<dpt>sales</dpt>
<person
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Employee">
<name>John</name>
<height>59</height>
<jobDescription>manager</jobDescription>
</person>
</staffRecord>
xsd файл:
<xs:element name="staffRecord">
<xs:complexType>
<xs:sequence>
<xs:element name="company" type="xs:string"/>
<xs:element name="dpt" type="xs:string"/>
<xs:element name="person" type="Person"/>
<xs:complexType name="Person" abstract="true">
<xs:sequence>
<xs:element name= "name" type="xs:string"/>
<xs:element name= "height" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Employee">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="jobDescription" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:sequence>
</xs:complexType>
</xs:element>
При проверке xml с этой схемой с помощью xmllint (под linux) я получаю следующее сообщение об ошибке:
config.xsd: 12: element complexType:
Ошибка синтаксического анализатора схем: Элемент
{http://www.w3.org/2001/XMLSchema}sequence':
Содержание не является действительным. Ожидаемый
(аннотация ?, (элемент | группа |
выбор | последовательность | любой)*). Схема WXS
config.xsd не удалось скомпилировать
Есть идеи, что не так?
David