gpt4 book ai didi

xml - W3C XML Schema 和 maxOccurs 的最大整数

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

我致力于 W3C XML Schema(不是我写的)。一个工具,xmllint,拒绝使用架构:

traceroute.xsd:658: element element: Schemas parser error : Element
'{http://www.w3.org/2001/XMLSchema}element', attribute 'maxOccurs': The value
'4294967295' is not valid. Expected is '(xs:nonNegativeInteger | unbounded)'.

4294967295 是 2^32-1 所以,很明显,xmllint 实现整数有符号的 32 位数字,这还不够。

xmllint 对吗?该标准显然没有限制的大小整数:

http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#p-max_occurs http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#nonNegativeInteger

The value space of nonNegativeInteger is the infinite set {0,1,2,...}.

所以,实现者应该使用无限整数...

最佳做法是什么?

实现者应该使用 bigints 或类似的东西吗? (在这种情况下,xmllint 是错误的。)

模式作者是否应该将自己限制为“合理”的值最大发生? (在那种情况下,我会将问题报告给模式作者。)

最佳答案

虽然这可能是对 maxOccurs 的“技术上”正确用法属性,这种用法不是(IMO)如何maxOccurs旨在使用。

看起来模式编写者的意思是这个元素可以出现任意次数,在这种情况下,定义的正确值将是 unbounded .

当前定义暗示的是,使用此架构的系统对于元素计数达到 4294967295 的行为将完美无缺。但对于任何更大的东西都会失败。

我想这是一个有意义的技术要求——很多系统都会有 int32编码为元素的最大数量,因此在理想世界中您可能希望强制执行此限制,但我认为在现实世界中 try catch 模式并不是真正合理或有用的事情。

此外,如果您要发送那么多元素,那么 XML 可能是错误的数据格式。

我建议架构作者使用 unbounded属性值,或使用实际匹配使用此 XML 的系统的限制和要求的值。

关于xml - W3C XML Schema 和 maxOccurs 的最大整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/300196/

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