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

标签 java xml inheritance xsd schema-design

我需要创建一个描述 Java 对象的 XML 架构定义 (XSD)。

我想知道当相关对象继承自具有类型参数的公共(public)基类时如何执行此操作。

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> { ... }

....

(其中 XTimeLocation 是在其他地方定义的自定义类)

我将如何构建一个 XSD,以便我可以拥有代表 Rule<T> 的每个子类的 XML 节点。 - 没有每个人的 XSD 重复其共同内容?

谢谢!

最佳答案

考虑JAXB用于 XML 架构 -> Java 编译。

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

<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 代码。不过,您可以稍微接近 inheritance plugin .

关于java - Java 对象的 XML 模式定义 (XSD) 中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2651221/

相关文章:

c++ - 导数使用基函数而不是自己的函数

java - 用于检测变量值变化的更改监听器的替代方案

java - 在段重复的情况下如何使用 Terser.get() 方法从特定段获取值?

java mysql select函数总是返回0

java - 如何在java中从xml实体字符串值创建不同的pojo

java - 找不到适用于 jdbc :mysql//http://localhost:8080/hibernate_test 的合适驱动程序

java - 继承类无法编译

java - 重写 hashCode,为什么不使用 this.hashCode() ?

xml - 使用 "InsertBefore"参数 : "2" 调用 "The reference node is not a child of this node."时出现异常

Javascript:为什么在子类中声明属性会覆盖父类(super class)中的相同属性为null