XML Schema validation(XSD)



我只想知道XSD验证是如何在幕后进行的。如果我定义 XSD 如下

<xs:simpleType name="MaxText">
    <xs:restriction base="xs:string">
        <xs:minLength value="1"/>
        <xs:maxLength value="10000000000000"/>
    </xs:restriction>
</xs:simpleType>

要对字符串长度进行实际验证,Java 是否需要将 XML 的整个字符串值加载到内存中?如果是这种情况,则存在抛出"java.lang.OutOfMemoryError: Java heap space"的潜在问题。

感谢任何评论。

问候马兰

嗯,这取决于XML解析器和模式验证器的实现,但我认为大多数实现很可能要求每个文本节点(或属性值)适合Java(等)字符串的限制。

我认为在接下来的几年里,随着字符串、数组等大小达到 2^31 的限制,我们将看到问题的发生率增加。重新设计像Java这样的编程语言来克服这个问题将是非常困难的,因为使用(int)数据类型来寻址到这样的结构是非常普遍的。