0

I'm a writing a DTD for an XML document that has <students> as its root element and may contain 0+ <student> elements.

What is the difference between declaring

<!ELEMENT students (student)*> 

and

<!ELEMENT students (student+)>

They are both validating.

4

1 回答 1

4

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

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

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

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

于 2013-04-25T01:01:45.130 回答