W3C XML架构和maxOccurs的最大整数
我使用W3CXML模式(不是我写的)。一个工具,xmllint, 拒绝使用架构:W3C XML架构和maxOccurs的最大整数,xml,xsd,Xml,Xsd,我使用W3CXML模式(不是我写的)。一个工具,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:nonNegativeIntege
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是对的吗?该标准显然没有限制该产品的尺寸
整数:
非负整数的值空间
是无限集{0,1,2,…}
所以,实现者应该使用无限整数
最佳实践是什么
实现者应该使用bigint或类似的东西吗?(在这种情况下,
xmllint是错误的。)
模式作者是否应该将自己限制为
maxOccurs?(在这种情况下,我将向模式报告问题
虽然这可能是
maxOccurs
属性的“技术”正确用法,但这种用法(依我看)并不是打算如何使用maxOccurs
模式编写器似乎有意表示此元素可以出现任意次数,在这种情况下,定义的正确值将是无界的
当前的定义意味着,对于小于等于4294967295的元素计数,使用此模式的系统将表现得完全正确,但对于大于4294967295的元素计数,系统将失败
我认为这是一个有意义的技术要求——许多系统将int32
编码为最大元素数,因此在理想情况下,您可能希望强制执行此限制,但我认为在现实世界中尝试在模式中捕获并捕获并不是一件真正合理或有用的事情
此外,如果要发送那么多元素,那么XML可能是错误的数据格式
我建议模式作者使用
unbounded
属性值,或者使用与使用此XML的系统的限制和要求实际匹配的值。最后,模式作者已对其进行了修改。它已在中发布,现在包含:
<xs:element maxOccurs="2147483647" minOccurs="0"
name="Measurement">
<xs:complexType>
<xs:sequence>
maxOccurs的最大值为4095
如果您想要更多,请将其设置为“无界”。
参考: 希望这有帮助 那么,“2147483647”是maxOccurs可以处理的最大值吗?maxOccurs可以处理的最大值是多少@波茨迈耶