gpt4 book ai didi

java - XSD - 任何(未知)元素的无限数量,但定义了序列中的最后一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:45 25 4
gpt4 key购买 nike

是否可以使用一个或多个 XSD 来验证以下 xml 结构

<container>
<unkownA />
<unkownB />
<unkownC />
...
<data />
</container>

按照这些规则

  1. 存在无限数量的未知元素
  2. 至少存在一个未知元素
  3. 最后一个元素是数据
  4. 数据仅出现一次
  5. 数据根据提供的规则进行验证

xml 中的所有元素都具有相同的命名空间 (""),我们无法更改。我们很可能也无法更改元素的顺序,尽管我知道这可能是最简单的解决方案。一般来说,更改 xml 不是一个可行的选择,因为它是由我们无法控制的外部系统生成的。

我尝试过这样的事情

<xs:sequence>
<xs:any minOccurs="1" maxOccurs="unbounded" processContents="lax" />
<xs:element ref="data" minOccurs="1" />
</xs:sequence>

这当然是不明确的,违反了“唯一粒子属性”。

我还在这里阅读了有关第二个命名空间的使用 Creating a 'flexible' XML schema但由于我们无法更改 xml,这似乎不是一个解决方案,或者我显然没有正确理解它。

由于我们使用 Java 处理 xml/xsd,xsd 驻留在类路径中,因此从 xsd 中导入 xs:可能会出现问题。

如果答案是“在这些限制内,xsd 无法完成此操作”,我对此表示同意。

有什么想法吗?

最佳答案

您尝试的架构在 XSD 1.1 中有效 - 使用最新版本的 Saxon 或 Xerces 再试一次。

关于java - XSD - 任何(未知)元素的无限数量,但定义了序列中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com