我正在尝试编写XML模式来定义一些要在java中的jaxb中使用的模型类。
我希望能够在xsd中定义一个接口,但我不知道如何做到这一点。
例如,我的很多类都有一个名为id的属性,类型为xs:ID。它们将有一个名为ref的属性,类型为xs:IDREF,它们将具有一个名为extRef的属性,这意味着存在一个引用但是在给定的xml文件中未指定该元素。
理想情况下,当转换为java时,这将是一个接口,原因有两个。
示例:
<!-- Utility type to be externally referenceable this is too keep all the
externally refrencable attributes in check -->
<xs:complexType name="ExternallyReferenceable" abstract="true">
<xs:attribute name="extRef" type="externalReference" />
<xs:attribute name="id" type="xs:ID" />
<xs:attribute name="ref" type="xs:IDREF" />
</xs:complexType>
<xs:complexType name="ExternalCarPart">
<xs:extension base ="ExternallyReferenceable" />
</xs:complexType>
<xs:complexType name="CarPart">
<xs:extension base ="ExternalCarPart">
<xs:sequence>
<xs:element type="xs:string" name="partName" />
</xs:sequence>
</xs:extension>
</xs:complexType>
<xs:complexType name="CarLamp">
<xs:extension base ="ExternalCarPart">
<xs:sequence>
<xs:element type="xs:string" name="glassPurity" />
</xs:sequence>
</xs:extension>
</xs:complexType>
所以在上面的例子中,如果exteranllyRefrencable是一个接口,并且carpart是一个接口,那将会更好。
这将允许CarLamp继承灯而不是外部汽车部件。 BicycleLamp还可以实现externalRefrencable接口并延长灯。
如果问题不明确,请询问我。
答案 0 :(得分:0)
IIRC,JAXB不会从XSD生成接口。
JAXB还支持从Java类生成XSD。我不确定它在这方面对接口做了什么,但也许你需要在相反的方向去做 - 从Java开始并生成XSD,虽然我不确定它会对你有所帮助。