有人可以解释以下 DTD 语句之间的区别吗?
<!ELEMENT all (book+, dvd+)>
和
<!ELEMENT all (book, dvd)+>
内容模型 (book+, dvd+) 匹配一系列元素:首先,一个或多个 book 元素(即book+
),然后(即,
)一个或多个 dvd 元素(即dvd+
)。所以以下匹配这个内容模型:
<book/><dvd/>
<book/><book/><book/><dvd/>
<book/><dvd/><dvd/><dvd/><dvd/><dvd/>
<book/><book/><book/><book/><dvd/><dvd/>
等等
内容模型 (book, dvd)+ 匹配由一本书和一个 dvd 组成的序列的一次或多次出现。所以下面匹配它:
<book/><dvd/>
<book/><dvd/><book/><dvd/>
<book/><dvd/><book/><dvd/><book/><dvd/>
<book/><dvd/><book/><dvd/><book/><dvd/><book/><dvd/>
等等
不同之处在于,在第一个表达式中,两个 + 运算符适用于单个元素名称 book 和 dvd;在第二个中,+ 适用于整个序列 (book, dvd)。
请注意,每个列表中的第一个示例在两种内容模型下都是合法的,而其他的都不合法。
对 dtd 的了解为 0:
我会说第一个应该包含至少 1 本书和1 个 dvd。但可能包含许多书籍和/或 DVD。
第二个包含应包含至少 1 本书或1 dvd。但可能包含许多书籍和/或 DVD。