为什么这个 DTD 是递归的?

Why this DTD is recursive?

我得到了以下 DTD:

<!ELEMENT book (title, author+, section+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT section (title, (p | figure | section)* )>
<!ATTLIST section
id ID #IMPLIED
difficulty CDATA #IMPLIED>
<!ELEMENT p (#PCDATA)>
<!ELEMENT figure (title, image)>
<!ATTLIST figure
width CDATA #REQUIRED
height CDATA #REQUIRED >
<!ELEMENT image EMPTY>
<!ATTLIST image
source CDATA #REQUIRED >

有人问我:

This DTD is recursive! How does the recursion end?

额...我不明白为什么要递归?唯一递归的接缝是存在 0 或更多 section(s).

This DTD is recursive!

我不会说 DTD 是递归的;我会说 section 的内容模型是递归的,因为它允许零个或多个子 section 元素。

How does the recursion end?

在 XML 实例中,当 section 不包含子 section 时,递归结束。由于子 section 元素不是必需的,因此它不会强制执行某种失控的递归,而您永远无法验证您的实例。