DTD 允许缺少标记

DTD allows missing tag

这是我的 DTD:

<!ELEMENT my-root (element1,element2+)> 

    <!ELEMENT element1 (#PCDATA)>

    <!ELEMENT element2 (element3,(element4?|element5+))>

    <!ELEMENT element3 (#PCDATA)>

    <!ELEMENT element5 (#PCDATA)>

    <!ELEMENT element4 (element6*)>

    <!ELEMENT element6 (element5*,element7*)>

    <!ELEMENT element7 (#PCDATA)>

这是我的 XML 文件:

<?xml version="1.0"?>
<!DOCTYPE my-root SYSTEM "my-root.dtd">

<my-root>

    <element1>a-location</element1>

    <element2>
        <element3>a-value</element3>
        <element4>
            <element6>
                <element5>test</element5>
                <element5>test2</element5>
                <element7>test3</element7>
            </element6>
        </element4>
    </element2>

    <element2>
        <element3>test4</element3>
        <element5>test5</element5>
        <element5>test6</element5>
    </element2>

    <element2>
        <element3>test7</element3>
    </element2>
</my-root>

我的问题是为什么最后一个element2中没有element5标签也是有效的

或者更确切地说,我如何告诉 DTD 在 element2 标记内没有 element4 的情况下至少需要 1 个 element5。

您可以只使用逗号 (,) 而不是竖线 (|) 符号:

<!ELEMENT element2 (element3,(element4?,element5+))>

您可以将 element4 设置为必填项,因此它正好是一个 element4 或一个或多个 element5...

<!ELEMENT element2 (element3,(element4|element5+))>