DTD +(标签 1,标签 2)

DTD +(tag1,tag2)

我是 DTD 的新手,不确定我是否正确理解这段代码。

<!ELEMENT P         - - (#PCDATA) +(tag1 | tag2 | tag3) >

这段代码是否允许P标签包含tag1、tag2和tag3?

这是 SGML 语法,而不是 XML。您可以看到它是因为在声明的元素名称 (P) 和内容声明 (#PCDATA) 之间,您遇到了“- -”,这意味着既不是开始标记也不是结束标签可以省略(否则你可以有类似“- O”的东西,这意味着结束标签可以省略)。

+(tag1 | tag2 | tag3) 表示您可以在 tag1tag2tag3 任何您想要的地方使用,嵌套在 P 元素中。它是递归的,这意味着,假设 P 中允许其他元素,您也可以允许此标记出现,即使它们未在元素的同一级别声明。

以相反的方式,为了防止这些元素进一步出现在您的元素及其子元素中,您将使用 -(tag1 | tag2 | tag3).