<!ELEMENT name (#PCDATA)>
-
子元素,可指明元素的子元素。下面声明表示name元素必须包含且只包含一个desc元素。
<!ELEMENT name (desc)>
也可用逗号为分隔符,指明多个子元素。并且子元素出现的次序必须按定义时的顺序。如:
<!ELEMENT name (id,desc)>
name元素的id子元素必须在desc子元素前面,否则验证会出错,该文档不是一个有效的XML文档。
下面这个文档是有效的
<name>
<id>1</id>
<desc>dtd test</desc>
</name>
下面这个文档是无效的,顺序颠倒了
<name>
<desc>dtd test</desc>
<id>1</id>
</name>
下面的文档也是无效的,有多余的元素
<name>
<id>1</id>
<desc>dtd test</desc>
<date>2005/01/31</date>
</name>
-
子元素的个数,我们可通过正则表达式来规定子元素的个数。
-
?,允许零个或一个该元素
-
*,允许零个或多个该元素
-
+,允许一个或多个该元素
下面我们可利用这些符号规定id子元素必须出现,且只能出现一次,而desc子元素可选。本文
<!ELEMENT name (id,desc*)>
根据上面的声明,下面的name元素都是有效的。
<name>
<id>1</id>
<desc>dtd test</desc>
</name>
<name>
<id>2</id>
</name>
<name>
<id>3</id>
<desc>dtd test</desc>
<desc>another test</desc>
</name>
-
可选项(|),选项是一个参数列表,每个参数间用“|”分隔,代表能且只能选一个子元素。
<!ELEMENT choice (good | bad)>
上例的choice元素可选一个good子元素,或bad子元素,且只能从选一个。可选的参数列可以多项,不限于两项。如:
<!ELEMENT choice (one | two | three | four)>
-
小括号,可用小括号把选项括起来,以表达更丰富的意思,如我们想表示choice元素必须包含一个good子元素,并且必须包含ok子元素或bad子元素的一个。
<!ELEMENT choice (good,(ok|bad))>
-
混合内容,在一些文档中,一个元素可能既包含子元素,也包含字符串,这些内容叫混合内容。可用以下方式表示:
<!EMEMENT description (#PCDATA | term)* )>
该声明表示description元素可包含已析的字符串和term子元素,且允许出现零次或多次,如:
<description>
this is a <term>dtd</term> test.
</description>
#PCDATA必须在第一位,可选的子元素可任意多项。
-
空元素,某些元素不用包含任何内容,称之为空元素。写成以/>结束的独立标签。
<!ELEMENT image EMPTY>
示例:
<image src="http://www.xml.com/dtd.jpg" />
-
ANY,允许元素内包含任意内容。该选项在dtd测试时很有用,在生产系统中尽量不要使用。
<!ELEMENT page ANY>