【问题标题】:DTD Qualifiers - difference between placing them inside or outside the parenthesesDTD 限定符 - 将它们放在括号内或括号外的区别
【发布时间】:2013-04-25 09:01:45
【问题描述】:

我正在为一个以 <students> 作为其根元素并且可能包含 0+ 个 <student> 元素的 XML 文档编写 DTD。

声明和声明有什么区别

<!ELEMENT students (student)*> 

<!ELEMENT students (student+)>

他们都在验证。

【问题讨论】:

  • 它们是相同的...你是说发布不同的定义吗?
  • 糟糕,我的错!谢谢吉姆。我更新了它
  • 看起来他们真的只在一个案例谎言&lt;!ELEMENT release-date (#PCDATA|year)*&gt; 中有所作为,您希望限定符适用于括号中的所有内容,而不仅仅是一件事。有人可以验证这是唯一的区别吗?

标签: xml dtd


【解决方案1】:

内容模型(student)* 接受零个或多个student 元素;内容模型(student+) 接受一个或多个。

OP 在他关于发生指示符在括号内还是括号外何时重要的推测性评论中是正确的。

附加到名称的出现指示符(如(student+))适用于该名称的元素。附加到带括号的组(如(student)*)的出现指示符适用于整个组。当括号内的组仅包含一个标记时,如在这些情况下,出现指示符的位置无效。所以(student+)(student)+ 的意思是一样的,对应的一对是星号而不是加号。

当组包含多个标记时,指示符的位置确实会有所不同:(a | b)+ 接受混合的 ab 元素的任何非空序列,而 (a+ | b+) 接受非空元素a 元素的序列或b 元素的非空序列,但没有混合。 (有些学习者对此有问题,但值得学习。)同样,(a, b)+(a+, b+) 定义了两种不同的语言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2013-08-16
    • 2019-02-22
    • 2022-11-19
    • 2015-05-08
    • 2013-04-20
    相关资源
    最近更新 更多