0
我有一个定义下列类型XML模式 - 简单类型与继承属性列表
XML架构<xsd:complexType name="visualElement" abstract="true">
<xsd:attribute name="id" type="xsd:ID"></xsd:attribute>
<xsd:attribute name="style" type="xsd:string"></xsd:attribute>
</xsd:complexType>
<xsd:complexType name="textElement">
<xsd:complexContent>
<xsd:extension base="sa:visualElement">
<xsd:attribute name="label" type="xsd:string" use="required" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xs:element name="text" type="textElement"/>
的问题是,这意味着我们必须作如下
<text id="myText" style="Fancy" label="This is the display text" />
当定义一个文本元素我真正想要做的就是这样定义它
<text id="myText" style="Fancy">
This is the display text here.
</text>
我的textElement类型应该扩展vi sualElement类型,因为我们使用JAXB生成Java类来解析XML。然后使用JaxB CLasses继承以类似的方式处理所有视觉元素。
有没有一种方法来构建模式,以便我可以实现所需的XML格式,同时仍然继承VisualElement类型的属性?
您的第一个建议奏效。然而,因为我们使用visualElement的其他一些类型,其中一些不应该包含一个字符串,它仍然不是我们所需要的。我已经尝试过你的第二个建议,它是无效的。 –
事后看来,如果你仔细想想,我希望获得多重继承......我想这也解释了为什么我没有走得太远。为了方便起见,我们现在坚持使用标签。感谢您的建议。 –
@PaulHenry您不能拥有多重继承,但可以使用属性组进行聚合。你也可以使用继承插件来让你的类实现一个特定的接口 - 这与属性组相结合几乎和真正的多重继承一样好。 – lexicore