gpt4 book ai didi

xml - 在 XML 模式中的未知元素内声明已知元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:35:41 27 4
gpt4 key购买 nike

我正在创建一个 XML 架构,描述来自各种来源的 XML 集合。这些来源有各种/未知的元素名称,但我想验证一个已知的、常见的子元素。

例如:

<foo>
<common bar="bar" />
</foo>

<baz>
<common bar="bar" />
</baz>

我想用必需的参数 bar 描述 common 元素,但不知道父元素的名称(foo和示例中的 baz,但实际上可以是任何东西)

我有以下内容,但不知道如何在任何元素中强制执行 common 元素。

<xs:complexType name="vendor">
<xs:sequence>
<xs:any namespace="##any" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

W3C 文档告诉我您不能将 xs:sequence 标签放在 xs:any 标签内,所以我不知道如何继续。

最佳答案

在一般情况下,这无法通过 XSD 1.0 实现;那就是除非:- 公共(public)元素始终是第一个元素,在这种情况下,您首先设置该元素,然后根据需要在其后加上 xsd:any- common 元素在一个命名空间中,可以相对于 xsd:any 考虑到你的命名空间的命名空间子句来挑选出来,在这种情况下,你可以在这样一个强制性 common 之前和之后使用任意数量的 xsd:any 实例。

或者,如果您保留 minOccurs=1,将 processContents 设置为 lax,并确保 common 的架构在验证期间对 XSD 处理器可用,那么至少可以保证,应该common 发生,说明它是有效的。遗憾的是,您不能保证它至少会出现一次。

如果以上方法都不适合您,那么您可以轻松地为您的 XSD 1.0 定义一个 Schematron 附件;如果您负担得起 XSLT 运行,这应该可行。

最后,如果 XSD 1.1 是一个选项,一个简单的断言将完全满足您的需要。问题是 XSD 1.1 在支持方面仍处于起步阶段。

关于xml - 在 XML 模式中的未知元素内声明已知元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19838339/

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