xsd从头开始重新定义类型

时间:2019-04-19 21:54:05

标签: java xml xsd jaxb xjc

有一个复杂的复杂类型定义,它在choice中具有相同元素的不同组合。

这使Java的xjc生成器发疯。它为所有元素生成一个List<Object>而不是单独的属性。

我想知道是否有一种方法可以使用<xs:redefine>或其他方法重新定义复杂类型。我不想创建原始xsd的完整副本,而是想将其包含在一个较小的文件中。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.editeur.org/onix/2.1/reference"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.editeur.org/onix/2.1/reference"
    elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="Header">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:sequence>
                        <xs:element ref="A" />
                        <xs:element ref="B" minOccurs="0"/>
                    </xs:sequence>
                    <xs:element ref="B" />
                </xs:choice>
                <xs:element ref="C" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="A">
        <xs:complexType></xs:complexType>
    </xs:element>

    <xs:element name="B">
        <xs:complexType></xs:complexType>
    </xs:element>

    <xs:element name="C">
        <xs:complexType></xs:complexType>
    </xs:element>

</xs:schema>

所需的重新定义:

<xs:element name="Header">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="A" minOccurs="0"/>
            <xs:element ref="B" minOccurs="0"/>
            <xs:element ref="C" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

更新

choiceContentProperty中设置<jaxb:globalBindings>不能解决问题,因为现在我有两个属性:List<Object> aAndBOrBC c

0 个答案:

没有答案