java - 无序 XSD 序列的标准解决方案

标签 java xml xsd xjc

在通过 XSD 生成类并通过 moxy 读取它们时,我遇到了一个有趣的障碍(可能与该问题无关)。我有一个包含多个基础元素的元素,其中几个元素出现 0 到 N 次,几个元素最多出现一次,还有一个或两个必须始终提供。

此问题的标准解决方案是通过序列:

<xs:complexType name="element1">
    <xs:sequence>
        <xs:element name="element2" type="xs:string" />
        <xs:element name="element3" type="element3Type" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="element4" type="xs:boolean" default="false" minOccurs="0" />
        <xs:element name="element5" type="element5Type" minOccurs="0" />
        <xs:element name="element6" type="element6Type" minOccurs="0" />
        <xs:element name="element7" type="element7Type" minOccurs="0" />
        <xs:element name="element8" type="element7Type" minOccurs="0" />

        <xs:element name="element9" minOccurs="0" maxOccurs="1">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="element10" type="xs:short" />
                    <xs:element name="element11" type="xs:short" />
                    <xs:element name="element12" type="xs:short" />
                    <xs:element name="element13" type="xs:short" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="element14" type="element5Type" minOccurs="0" />

        <xs:element name="element15" type="element7Type" minOccurs="0" />

        <xs:element name="element16" type="element16Type" minOccurs="0"/>
        <xs:element name="element17" type="element16Type" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

如您所见 - 复杂。我们的用户在手动编写脚本或针对我们的服务编写脚本时遇到很多麻烦,因为很难记住所有内容必须按照该顺序进行的顺序,否则通过 moxy 进行解析会失败。我相信这是由于 @xmlType(propOrder=...) xjc 在生成的类上添加的属性。结果,我们的用户讨厌它,希望改变它,我不怪他们。

显然,我们无法替换 <xsd:sequence /><xsd:all />由于元素频率的差异。

我开始怀疑这不是 XSD 的限制,但可能是我们对此类配置的整体方法的限制。

基于此,是否有一个我们没有考虑的解决此类问题的标准方法?最合适的解决方案是什么?

最佳答案

XSD 1.1 允许 xs:all 具有除 [0,1] 和 [1,1] 之外的出现限制。

关于java - 无序 XSD 序列的标准解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61103157/

相关文章:

java - 在 ZK 中打开外部应用程序和网页

java - 如何增加 android Log 类的控制台输出

xml - 为什么这个 raptor 代码解析 NTriples 而不是 RDFXML?

xsd - SOAPUI - 缺少带有名称的消息部分 - 架构合规性错误

java - 关闭ApplicationContext仍然没有关闭spring boot应用程序

java - 如何获得 Cucumber 特征的结果

c# - 相当于Config的字典

c++ - 解析 xml 时无法获取属性的名称和值

C# - 解析 XSD 架构 - 将所有元素获取到组合框

.net - 在 C# 中验证 XSD,就好像它是 XML : doesn't give expected warnings