【发布时间】:2011-02-19 02:05:03
【问题描述】:
我正在尝试从 xsd 架构中的基本类型获取派生的复杂类型。
当我这样做时效果很好(灵感来自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>
但是,如果我想在其中包含 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>
当使用 xmllint(在 linux 下)使用该架构验证 xml 时,我会收到以下错误消息:
config.xsd:12: 元素复杂类型: 模式解析器错误:元素 '{http://www.w3.org/2001/XMLSchema}序列': 内容无效。预期是 (注释?,(元素 | 组 | 选择 |序列 |任何)*)。 WXS 架构 config.xsd 编译失败
知道有什么问题吗?
大卫
【问题讨论】: