DTD限定符 - 将它们放在括号内部或外部之间的区别

时间:2013-04-24 17:52:01

标签: xml xml-dtd

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

声明

之间有什么区别
<!ELEMENT students (student)*> 

<!ELEMENT students (student+)>

他们都在验证。

1 个答案:

答案 0 :(得分:3)

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

OP在他关于事件指示符是否在括号内部或外部的重要性的推测评论中是正确的。

附加到名称的发生指标(如(student+))适用于该名称的元素。附加到括号组的发生指标(如(student)*)适用于整个组。当括号组仅包含一个标记时,如在这些情况下,发生指示符的位置无效。所以(student+)(student)+意味着相同的事情,相应的配对星号而不是加号。

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