04、DTD 元素

在DTD 中,使用 <!ELEMENT > 声明元素

声明元素的语法

在DTD 中,使用 !ELEMENT 声明元素

<!ELEMENT 元素名称 类别>

或者

<!ELEMENT 元素名称 (元素内容)>

空元素

空元素的类别为关键字 EMPTY :

<!ELEMENT 元素名称 EMPTY>

DTD 范例

<!ELEMENT hr EMPTY>

XML 范例:

<hr />

声明只有 PCDATA 的元素

通过 (#PCDATA) 声明只有 PCDATA 的元素:

<!ELEMENT 元素名称 (#PCDATA)>

DTD 范例:

<!ELEMENT name (#PCDATA)>

声明带有任何内容的元素

通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

<!ELEMENT 元素名称 ANY>

DTD 范例:

<!ELEMENT article ANY>

声明带有子元素(序列)的元素

带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

<!ELEMENT 元素名称 (子元素名称 1)>

或者

<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

例子:

<!ELEMENT article (author,created_at,summary,content)>

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。 在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。

article 元素的完整声明是:

<!ELEMENT article (author,created_at,summary,content)>
<!ELEMENT author      (#PCDATA)>
<!ELEMENT created_at  (#PCDATA)>
<!ELEMENT summary     (#PCDATA)>
<!ELEMENT content     (#PCDATA)>

声明只出现一次的元素

<!ELEMENT 元素名称 (子元素名称)>

DTD 范例:

下面的范例声明了:content 子元素必须出现一次,并且必须只在 "article" 元素中出现一次

<!ELEMENT article (content)>

声明至少出现一次的元素

<!ELEMENT 元素名称 (子元素名称+)>

DTD 范例:

下面的范例中的加号声明了:category 子元素必须在 "article" 元素内出现至少一次。

<!ELEMENT article (category+)>

声明可出现零次或多次的元素

<!ELEMENT 元素名称 (子元素名称*)>

DTD 范例:

下面的范例中的星号声明了:子元素 tag 可在 "article" 元素内出现零次或多次。

<!ELEMENT article (tag*)>

声明出现零次或一次的元素

<!ELEMENT 元素名称 (子元素名称?)>

DTD 范例:

下面的范例中的问号声明了:子元素 subtitle 可在 "article" 元素内出现零次或一次。

<!ELEMENT article (subtitle?)>

声明多选一类型的内容

DTD 范例:

<!ELEMENT article (author,created_at,summary,(content|body))>

上面的例子声明了:"article" 元素必须包含 "author" 元素、"created_at" 元素、"summary" 元素,以及在 content,body 中二选一的元素

声明混合型的内容

dtd:

<!ELEMENT article (#PCDATA|updated_at|tag|category)*>

上面的例子声明了:"article" 元素可包含出现零次或多次的 PCDATA、"updated_at"、"tag"、"category"。