我想從xsd模式中的基本類型派生複雜類型。使用xml類型屬性派生複雜類型
它運作良好,當我這樣做(由this啓發):
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>
但是,如果我想擁有的人元素內部,例如,另一個複雜類型的序列,它不再有效:
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:元素complexType: 模式解析器錯誤:元素 '{http://www.w3.org/2001/XMLSchema}序列': 內容無效。期待是 (註釋①,(元| 選擇)*)。 WXS模式 config.xsd編譯失敗
任何想法是什麼錯?
大衛
沒有必要將元素的定義與元素的定義分開。如果給定的類型只用於一個元素,那麼它可以在該元素中定義。 – 2010-05-13 14:09:10