我正在使用Eclipse IDE来构建XML架构以供JAXB处理,但是在以下方面出现验证错误:
<xsd:element name="testEl">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element name="testElChild">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="tec1"/>
<xsd:element name="tec2"/>
</xsd:sequence>
<xsd:attribute name="type" use="required" fixed="yes"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="testElChild">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="tec3"/>
<xsd:element name="tec4"/>
</xsd:sequence>
<xsd:attribute name="type" use="required" fixed="no"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
</xsd:element>
基本上,我试图指定如果元素testElChild
的type属性的值为“ yes”,则它应包含子元素tec1
和tec2
,但是如果type属性的值为“ no”,则它应包含子元素tec3
和tec4
。
上述架构有什么问题和/或如何通过有效的XML架构实现目标?
答案 0 :(得分:1)
显示验证错误将对您有很大帮助。我只能假设您在两个选择中都拥有相同的元素名称testElChild
。
要解决此问题,建议您遵循两种最佳实践来编写XML模式:
TestElChild
,并为每个选择定义了一个扩展类型,例如NoTypeTestElChild
和YesTypeTestElChild
。起初可能很乏味,但从长远来看会给您带来一些麻烦。如果您在根据这些做法编写XSD时遇到问题,请告诉我们。