xml DTD正确性,为什么在声明xml节点时要在圆括号内使用圆括号?

xml DTD正确性,为什么在声明xml节点时要在圆括号内使用圆括号?,xml,dtd,Xml,Dtd,我正在看这段xml(在DTD文件中): 将(node1?、node2?、node3?放在圆括号中的原因是什么?这是否意味着节点1、节点2和节点3是可选的?->但是,它们不都是可选的,因为它们已经添加了问号吗?括号用于分组。分组允许您在模式的某些部分上放置限定符,如(node6 | node16),或控制优先级,如(node25)|(node26?、node27?。在(node1?,node2?,node3?的情况下,括号是完全冗余的。它的意思与node1?、node2?、node3?相同 有

我正在看这段xml(在DTD文件中):



(node1?、node2?、node3?
放在圆括号中的原因是什么?这是否意味着节点1、节点2和节点3是可选的?->但是,它们不都是可选的,因为它们已经添加了问号吗?

括号用于分组。分组允许您在模式的某些部分上放置限定符,如
(node6 | node16)
,或控制优先级,如
(node25)|(node26?、node27?
。在
(node1?,node2?,node3?
的情况下,括号是完全冗余的。它的意思与
node1?、node2?、node3?
相同

有时,人们会添加额外的括号,因为他们认为这会使事情更容易阅读,或者强调模式的相关部分。有时人们只是因为没有好的理由而打字太多

<!ELEMENT entry ((node1?, node2?, node3?), node4, node5?, (node6 | node16)?,
(node17, node18?, (node19, node20)?)*, node21?, node22?, node23*, node24*,
((node25) | (node26?, node27?))?, node28*, node29?, node30*, node31*)>