gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:31:58 25 4
gpt4 key购买 nike

在通过 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/

25 4 0
文章推荐: java - 使用 Opendaylight 通过 NETCONF 检索列表时出现错误 "Duplicate namespace in XML input"
文章推荐: visual-studio-2005 - vcredist_x86.dll 和版本 8.0.50727.4053
文章推荐: java - 尝试在 Thymeleaf Spring Boot 中迭代 List() 时出现 "Exception evaluating SpringEL expression"错误