有一个 XML 包含以下元素:
<localHeight>
<localFeet>5</localFeet>
<localInches>10</localInches>
</localHeight>
当我使用 Intellij 生成 DTD 时,它是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE localHeight[
<!ELEMENT localHeight (localFeet | localInches)*>
<!ELEMENT localFeet (#PCDATA)>
<!ELEMENT localInches (#PCDATA)>
]>
这甚至适用于此 XML :
<localHeight>
</localHeight>
其中没有任何其他元素。
使用|表示它包含 localFeet 或 localInches 标签。
我想出了以下 DTD:
<!DOCTYPE localHeight[
<!ELEMENT localHeight (localFeet, localInches)>
<!ELEMENT localFeet (#PCDATA)>
<!ELEMENT localInches (#PCDATA)>
]>
这也是正确的,但可能比 IntelliJ 生成的 DTD 表达得更精确。需要一些输入,因为我不确定我在这里的想法是否正确
模式(或 DTD)描述一类文档的共同特征。因此,从单个文档(尤其是仅包含三个元素的文档)推断模式涉及大量猜测。想象一下尝试从一个非常简单的网页制定出 HTML 规范!您的问题中关于 XML 文档存在“正确的 DTD”的想法是完全错误的;如果您只有一份文档,则有任意数量的正确 DTD。