Xml架构接口

时间:2011-07-10 14:31:03

标签: java inheritance xsd

我正在尝试编写XML模式来定义一些要在java中的jaxb中使用的模型类。

我希望能够在xsd中定义一个接口,但我不知道如何做到这一点。

例如,我的很多类都有一个名为id的属性,类型为xs:ID。它们将有一个名为ref的属性,类型为xs:IDREF,它们将具有一个名为extRef的属性,这意味着存在一个引用但是在给定的xml文件中未指定该元素。

理想情况下,当转换为java时,这将是一个接口,原因有两个。

  1. 实现此目的的类不一定是连接的。
  2. 我想为其中一些对象指定一个不同的继承树。
  3. 示例:

    <!-- 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接口并延长灯。

    如果问题不明确,请询问我。

1 个答案:

答案 0 :(得分:0)

IIRC,JAXB不会从XSD生成接口。

JAXB还支持从Java类生成XSD。我不确定它在这方面对接口做了什么,但也许你需要在相反的方向去做 - 从Java开始并生成XSD,虽然我不确定它会对你有所帮助。