一、定义标记:
1、规定子标记的标记:
<!ELEMENT 标记名称 (子标记列表)>
<!ELEMENT 标记名称 (子标记1+,子标记2*,自标记3?)>
<!ELEMENT 标记名称 (子标记1+,(子标记2|子标记3|子标记4)*,(子标记5|子标记6)?)>
2、限制只有文本数据的标记:
<!ELEMENT 标记名称 (#PCDATA)>
3、有混合内容的标记:
<!ELEMENT 标记名称 (#PCDATA|子标记1|子标记2|子标记3)*>
其中最外层括号外的“*”必不可少
4、EMPTY和ANY:
<!ELEMENT 标记名称 EMPTY>
以上定义一个空标记,或只含空字符的非空标记
<!ELEMENT 标记名称 ANY>
以上定义一个没有任何约束的标记
二、DTD的完整性:
不允许无穷嵌套:如果某个标记可以出现某个子标记,那么该子标记不能再被定义成它的父标记;XML文件中的每个标记都必须在DTD中有相应的元素进行约束。
三、标记的属性的定义:
<!ATTLIST 标记名称
属性名称1 属性类型1 默认值情况1
属性名称2 属性类型2 默认值情况2
属性名称3 属性类型3 默认值情况3
>
对于XML文件中出现的每个标记的每个属性,都必须进行如上的定义
1、默认值情况总结:
"字符串" ——标记必须有该属性,且有默认值
#IMPLIED——标记可以没有该属性,没有默认值
#REQUIRED——标记必须有该属性,没有默认值
#FIXED "字符串"——标记可以没有该属性,但一旦有,属性值就固定不变
2、属性类型总结:
CDATA:
即CHARACTER DATA,是不能含有“<”、“>”、“|”、“'”、“"”的字符串,如果想使用这些符号,应使用字符引用和实体引用。
Enumerated:
它不是关键字,是指类型定义的格式,表示该属性只能取枚举出来的值,如:
<!ATTLIST 标记名称 属性名称 (属性值1|属性值2|属性值3|属性值4) 默认值情况>
NMTOKEN:
属性值可由字母、数字、“_”、“.”、“-”组成,不能有空格。
NMTOKENS:
同上,但可以有空格。
ID:
属性值可由字母、数字、“_”、“.”、“-”组成,具有专有性,即不允许其它同类属性与自己有相同的值。其“默认值情况”只能是“#REQUIRED”和“#IMPLIED”。
IDREF:
该属性值只能取某个标记中ID类型的属性的属性值。用于通过标记的属性值来判断标记之间的关系。
IDREFS:
同上,但可以有空格来分割多个值。