Java对象的XML模式定义(XSD)中的继承

Java对象的XML模式定义(XSD)中的继承,java,xml,inheritance,xsd,schema-design,Java,Xml,Inheritance,Xsd,Schema Design,我需要创建一个描述Java对象的XML模式定义(XSD) 我想知道当所讨论的对象继承自一个带有类型参数的公共基类时,如何做到这一点 public abstract class Rule<T> { ... } public abstract class TimeRule extends Rule<XTime> { ... } public abstract class LocationRule extends Rule<Location> { ... }

我需要创建一个描述Java对象的XML模式定义(XSD)

我想知道当所讨论的对象继承自一个带有类型参数的公共基类时,如何做到这一点

public abstract class Rule<T> { ... }

public abstract class TimeRule extends Rule<XTime> { ... }

public abstract class LocationRule extends Rule<Location> { ... }

public abstract class IntRule extends Rule<Integer> { ... }

....
公共抽象类规则{…}
公共抽象类TimeRule扩展规则{…}
公共抽象类LocationRule扩展规则{…}
公共抽象类IntRule扩展了规则{…}
....
(其中
XTime
Location
是在别处定义的自定义类)

我如何构建一个XSD,这样我就可以拥有代表
规则
的每个子类的XML节点,而不必为每个子类重复它们的公共内容而使用XSD

谢谢大家!

XML模式的Conisder->Java编译

XML模式为iheritance建模提供了一些可能性:

<xs:complexType name="baseType">
    <xs:sequence>
        <xs:element name="a" type="xs:string"/>
        <xs:element name="b" type="xs:long"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="extendedType">
    <xs:complexContent>
        <xs:extension base="baseType">
            <xs:sequence>
                <xs:element name="c" type="xs:dateTime"/>
                <xs:element name="d" type="xs:base64Binary"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

然而,我认为您不能完全实现您发布的Java代码。尽管如此,您还是可以使用。

Conisder for XML Schema->Java编译

XML模式为iheritance建模提供了一些可能性:

<xs:complexType name="baseType">
    <xs:sequence>
        <xs:element name="a" type="xs:string"/>
        <xs:element name="b" type="xs:long"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="extendedType">
    <xs:complexContent>
        <xs:extension base="baseType">
            <xs:sequence>
                <xs:element name="c" type="xs:dateTime"/>
                <xs:element name="d" type="xs:base64Binary"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>


然而,我认为您不能完全实现您发布的Java代码。尽管如此,您还是可以接近词典。

@lexicore谢谢您的回答!我不需要真正地为继承本身建模——只要它达到效果,我就很高兴。同样有趣的是,我定义模式的最终目的是将其与JAXB结合使用。@bguiz好的,然后我使用基于模式的扩展和继承插件来扩展/实现类/接口。该插件目前不支持参数化类/接口。顺便说一句,这是一个不错的功能。我将考虑实现它。+ 1,并且检查@ ListICORE:是的,我已经得出了与前面所说的相同的结论——XSDs不支持用类参数继承。XSD也不能支持完全面向对象意义上的继承,除非使用您提到的插件。@lexicore谢谢您的回答!我不需要真正地为继承本身建模——只要它达到效果,我就很高兴。同样有趣的是,我定义模式的最终目的是将其与JAXB结合使用。@bguiz好的,然后我使用基于模式的扩展和继承插件来扩展/实现类/接口。该插件目前不支持参数化类/接口。顺便说一句,这是一个不错的功能。我将考虑实现它。+ 1,并且检查@ ListICORE:是的,我已经得出了与前面所说的相同的结论——XSDs不支持用类参数继承。XSD也不能支持完全面向对象意义上的继承,除非使用您提到的插件。