java - Xml 架构接口(interface)

标签 java inheritance xsd

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

我希望能够在 xsd 中定义一个接口(interface),但我不知道该怎么做。

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

理想情况下,由于两个原因,这将是转换为 java 时的接口(interface)。

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

例子:

<!-- 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 是一个接口(interface),carpart 是一个接口(interface)会更好。

这将允许 CarLamp 继承自 lamp 而不是外部汽车部件。 BicycleLamp 还可以实现 externallyRefrencable 接口(interface)并扩展 lamp。

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

最佳答案

IIRC,JAXB 不从 XSD 生成接口(interface)。

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

关于java - Xml 架构接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6641661/

相关文章:

xsd - 为什么 W3C XML Schema 规范允许整数有前导零?

xml - 根据 XSD 中的属性值使 XML 元素成为必需

java - 查找总和达到给定总和的最小子数组(允许重复)

java - 如何根据以前的选择顺序对购物 list 进行排序?

java - 如何判断向下转型在 Java 中是否合法?

具有继承性的 Python unittest 测试用例

java - 是否可以更改 XSD 文件的限制,而无需 Web 服务消费者进行任何调整?

java - 了解关闭时的关闭请求标志

java - 从方法中获取 String 或 Int 并将其发送到另一个 Activity

java - 无法在 SWIG 包装器中公开私有(private)基类成员函数