1.包含子元素的元素
声明语法格式:
<!ELEMENT element—name(child1,child2,......)>
实例:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE student[
<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*)>
]>
这表明student元素中必须包含sno,sname,sex,sdepartment,hobby这四个子元素,而且他们在具体是XML文档中的出现顺序不能颠倒。
上面出现了“*”这一符号,它表示hobby元素可以没有,也可以有多个,我们知道,有点人兴趣爱好很多,而有点人没有兴趣爱好,下面是在内容模型的描述中常用到的符号含义.
符 号 |
含 义 |
示 例 |
,
|
用于分隔元素序列中的每一项,必须按照说明的顺序出现 |
如上例所示:sno,sname,......在实例文档中sname必须出现在sno之后 |
| |
表示可以从前后的参数中任选一项 |
如上例所示:......,(sdepartment|dormitory),......在实例文档中可以在指定位置包含sdepartment子元素或者dormitory子元素 |
( )
|
表示括号中的内容为一个整体,可以看为一个元素组 |
如上例所示:(sno,sname,sex,(sdepartment|dormitory),hobby*)为student元素的子元素组 |
?
|
表示相应的元素或组,出现一次或者不出现 |
......,element?,......表示该内容模板所描述的元素,可以在指定的位置包含一个element元素或者没有element元素 |
+
|
表示相应的元素或组,出现一次或者多次 |
......,element+,......表示该内容模板所描述的元素,可以在指定位置包含一个或者连续多个element元素 |
*
|
表示相应的元素或组,出现零次或者多次 |
如上例所示:......,hobby*,表示在实例文档中可以没有hobby,也可以有多个hobby |
2.包含文本内容的元素
声明语法格式:
<!ELEMENT element—name (#PCDATA)>
实例:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE student[
<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*)>
<!ELEMENT sno (#PCDATA)>
<!ELEMENT sname (#PCDATA)>
......
]>
这表明sno和sname元素中只包含文本内容,不能包含子元素。PCDATA表示将被XML解析器进行解析的字符数据(Parsed Character DATA),其中不能包含任何XML标记。
3.空元素
声明语法格式:
<!ELEMENT element EMPTY>
实例:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE student[
<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*)>
......
<!ELEMENT sex EMPTY>
......
]>
这项表示sex元素的内容为空,不包含子元素或者文本
4.包含任意文本的元素
声明语法格式:
<!ELEMENT element—name ANY>
实例:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE student[
<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*,mark)>
......
<!ELEMENT mark ANY>
......
]>
这项声明表示mark元素中可以包含任何没有具体限制且可以进行解析的内容。
5.包含指定元素以及文本内容的元素
声明一个包含文本内容以及指定子元素的元素,声明语法格式:
<!ELEMENT element—name (#PCDATA | child1 | child2)>
实例:
<!ELEMENT course (#PCDATA | cno | grade)*>
这项声明表示course元素中可以包含文本内容、cno、grade的任意组合(任意个数、任意顺序)。