【问题标题】:Is there an example of a DTD which has no valid document instances?是否有没有有效文档实例的 DTD 示例?
【发布时间】:2014-12-09 00:20:53
【问题描述】:

如果我们说如果有一个文档对 DTD 有效,那么 DTD 是可满足的,那么是否有任何 DTD 不可满足的示例?

【问题讨论】:

  • 实际上,XML 文档符合 DTD,而不是相反。 DTD 不能说是“符合”,因为它是以规则的形式规定了“符合”的特定含义的地方。
  • 这就像在问:如果源代码符合编程语言,我们说程序是有效的,有没有编程语言无效的例子?
  • 好吧,如果有一个符合的文档,假设 DTD 是可满足的,你有不能满足的示例 DTD?
  • @slebetman,是的,你是对的:这很像这里的问题。一旦我们克服了 OP 提出问题的困难,它同样有趣。不是特别难回答,但很有趣。我们可以定义一种没有符合要求的程序的编程语言吗?或者更笼统地说:我们可以使用 BNF 来定义一种没有句子的语言吗?并不是每个第一次接触 BNF 或编程语言规范工具或 DTD 的人都会发现答案显而易见。

标签: xml dtd


【解决方案1】:

有趣的问题(尽管 OP 最初很难找到合适的词)。

答案是:是的,有些 DTD 没有有效实例。以下是一些示例。

(1) 此 DTD 没有有限实例:元素类型 e 的每个实例都需要元素类型 e 的另一个实例。

<!ELEMENT e (e) >

这是 alex 在下面的评论中调用 DTD 中的无限循环的示例。

(2) 这个 DTD 也缺少实例:e 类型的每个实例都需要一个 IDREF 来引用文档中某处的 ID,但没有声明 ID 类型的属性,因此不能有任何 ID 指向。

<!ELEMENT e ANY >
<!ATTLIST e ref IDREF #REQUIRED >

(3) 此 DTD 也没有有效实例:每个实例都需要一个 f 元素,但没有声明 f 元素。

<!ELEMENT e (f) >

任何不包含元素声明的 DTD 也是不可满足的。

【讨论】:

  • 如果DTD中存在无限循环,那么就不会有符合该DTD的XML,例如.
猜你喜欢
  • 2014-11-06
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2019-10-02
相关资源
最近更新 更多