提问人:pensee 提问时间:8/19/2023 更新时间:8/19/2023 访问量:25
更正 XML 的 DTD,分析 Intellij 生成的 DTD
Correct DTD for XML, analyzing Intellij generated DTD
问:
有一个 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 更精确地表达它。需要一些输入,因为我不确定我在这里是否在思考正确的路线
答:
1赞
Michael Kay
8/19/2023
#1
架构(或 DTD)描述一类文档的共同特征。因此,从单个文档(尤其是仅包含三个元素的文档)推断架构涉及大量的猜测。想象一下,试图从一个非常简单的网页中制定出 HTML 的规范!您的问题中认为 XML 文档存在“正确的 DTD”的想法是完全错误的;如果只有一个文档,则有任意数量的正确 DTD。
特别是,当您从一个文档甚至一组文档推断架构或 DTD 时,结果通常要么过于精确(它排除了有效的东西:例如,它假设因为每个示例文档都有偶数个段落,那么这是一个必要的特征),要么不够精确(例如, 它无法发现数值属性必须始终小于 200)。一般来说,从一组有限的例子中制定出一般规则是不可能的。
评论