gpt4 book ai didi

java - XSD XML 架构中 maxOccurs 的最大整数是多少?

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

“2147483647”是 maxOccurs 可以处理的最大值吗? maxOccurs 可以处理的最大值是多少?将 maxOccurs 值设置为无界可能会导致资源耗尽并最终导致拒绝服务

这里是一个 XSD 示例,其中 maxOccurs 设置为我认为 maxOccurs 可以处理的最大值,请验证:

mySchema.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="family">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="person" maxOccurs="2147483647">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="age" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="address" type="xs:string" minOccurs="1"/>
</xs:choice>
</xs:complexType>
</xs:element>

最佳答案

从规范来看,答案是:没有限制。以下是来自the spec的片段(链接到 XSD 1.0):

maxOccurs =(非负整数 | 无界):1

对于nonNegativeInteger ,“nonNegativeInteger 的·值空间·是无限集 {0,1,2,...}。”

由于实际上不存在任何限制,因此每个实现都会设置自己的...

无论是“某些 Microsoft 库”(如某人之前评论的那样),还是 Java(如您的情况),还是 XML 设备,限制可能是明确定义的(如 Microsoft 的情况)或难以理解,或在外部进行管理通过与 XML 处理器关联的策略(最明显的是存在于 XML 设备中)。

例如,Xerces 可能为数字 maxOccurs 返回的最大值受到 Java 中 int 含义的限制,即 2^31-1。如果您在 XSD 中将 2^31 作为 maxOccurs,有些人可能会说 Xerces 不会正常运行...我相信它会翻转为无界...

我确信将 maxOccurs 设置为较高的数字以阻止 DoS,实际上可能会产生相反的效果(看看 this post )...

关于java - XSD XML 架构中 maxOccurs 的最大整数是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354344/

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