DTD 为XML 文档的编写者和处理者 提供了共同遵守的规则,为XML文档制定统一的标准,下面让我们来看一个简单的DTD文档的形式
<!DOCTYPE user [
<!ELEMENT user (user_id,user_name,user_password,user_message) >
<!ELEMENT user_id (#PCDATA) >
<!ELEMENT user_name (#PCDATA) >
<!ELEMENT user_password (#PCDATA) >
<!ELEMENT user_message (#PCDATA) >
]>
很简单 user 是根上的元素,而它包含了 user_id ,user_name 俩个子元素 而这俩个子元素的内容必须是 #PCDATA 也就是 必须是字符。
1 内部DTD
内部DTD 就是将DTD内容包含在XML文档的内部
2 外部DTD
外部DTD 是通过外部来引用DTD 在文档类型声明时 SYSTEM 或PUBLIC 来指出外部DTD 文件的位置。例如
<!DOCTYPE 根元素名字 SYSTEM “外部DTD文件的URI” >
<!DOCTYPE user SYSTEM “user.dtd” >
这里要注意 user.dtd 必须和XML文档在同一目录下。
如果位于不同位置的多个XML想使用同一个DTD 则需要使用绝对URI 来制定DTD 文件地址 假定user.dtd 位于 http://www.rocky.com/xml/dtd/user.dtd
<DOCTYPE user SYSTEM “http://www.rocky.com/xml/dtd/user.dtd” >
如果为了规范管理,个企业代表经过协商制定了DTD 我们则要PUBLIC 关键字来引用这个DTD
<!DOCTYPE 根元素的名字 PUBLIC “DTD的名称” “外部DTD的文件的URI” >
<!DOCTYPE HTML PUBLIC “-//rocky//DTD HR 1.0//ZH http://www.rocky.com/xml/dtds/hr.dtd >
DTD的结构
<!ELEMENT 元素名称 元素内容说明>
元素类型声明
a. #PCDATA:元素包含字符数据
b.子元素 :元素包含子元素
例如:<!ELEMENT salary (cash | credit_card) >表明工资必须要有cash 和 credit_card 中的其中一个子元素而 employee( interest* )表示 兴趣可以没有 也可以有多个
c.混合内容:例如<!ELEMENT employee ( #PCDATA | name)* )