java 带有 DTD 验证的 DocumentBuilder 验证无效 XML

java DocumentBuilder with DTD validation validates invalid XML

我得到了一个简单的 XML 文档,该文档在 DTD 验证下具有以下结构:

people.xml

<?xml version='1.0' encoding='ISO-8859-15' ?>

<!DOCTYPE people SYSTEM "people.dtd">

<people>
    <person dni="1234345F" >
        <name>pepe</name>
        Description for pepe
        <age>12</age>
        <subject>maths</subject>
        <subject>history</subject>
    </person>
    <person dni="12343sdfF" >
        Description for marcos
        <name>marcos</name>
        <age>12</age>
        <subject>music</subject>
        <subject>Spanish</subject>
    </person>
    <person dni="345634345F" >
        <name>JL</name>
        <age>25</age>
        <subject>science</subject>
        <subject>maths</subject>
        Description for JL
    </person>
</people>

如您所见,每个人的描述文本节点的位置在验证时刻是未知的。我写了这个 DTD:

people.dtd

<!ELEMENT people (person+)>
<!ELEMENT person (name|age|subject+|#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ATTLIST person dni CDATA #REQUIRED>

我已经尝试了这一行的几乎所有组合 (name|age|subject+|#PCDATA) 但我仍然无法让它与 xml 匹配文件.

混合内容时无法指定顺序(http://www.w3.org/TR/xml/#sec-mixed-content)。

您必须这样声明 person

<!ELEMENT person (#PCDATA|name|age|subject)*>