Java Xml模式接口

Java Xml模式接口,java,inheritance,xsd,Java,Inheritance,Xsd,我正试图编写一个XML模式,以定义一些要在java中的jaxb中使用的模型类 我希望能够在xsd中定义接口,但我不知道如何做到这一点 例如,我的很多类都有一个名为id的属性,该属性的类型为xs:id。它们有一个名为ref的属性,该属性的类型为xs:IDREF,它们有一个名为extRef的属性,这意味着有一个reference,但在给定的xml文件中没有指定元素 理想情况下,当转换为java时,这将是一个接口,原因有二 实现这一点的类不一定是连接的 我想为其中一些对象指定一个不同的继承树 例如:

我正试图编写一个XML模式,以定义一些要在java中的jaxb中使用的模型类

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

例如,我的很多类都有一个名为id的属性,该属性的类型为xs:id。它们有一个名为ref的属性,该属性的类型为xs:IDREF,它们有一个名为extRef的属性,这意味着有一个reference,但在给定的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>
    
    
    
    因此,在上面的示例中,如果ExternallyRefracable是一个接口,而carpart是一个接口,则会更好

    这将允许CarLamp从车灯继承,而不是从外部汽车部件继承。BicycleLamp还可以实现外部可折射接口并扩展lamp


    如果问题不清楚,请让我澄清。

    IIRC,JAXB不会从XSD生成接口


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

    IIRC,JAXB不会从XSD生成接口

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