DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。 DTD的实例:
<!DOCTYPE NEWSPAPER [ <!ELEMENT NEWSPAPER (ARTICLE+)> <!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)> <!ELEMENT HEADLINE (#PCDATA)> <!ELEMENT BYLINE (#PCDATA)> <!ELEMENT LEAD (#PCDATA)> <!ELEMENT BODY (#PCDATA)> <!ELEMENT NOTES (#PCDATA)> <!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED> <!ATTLIST ARTICLE EDITOR CDATA #IMPLIED> <!ATTLIST ARTICLE DATE CDATA #IMPLIED> <!ATTLIST ARTICLE EDITION CDATA #IMPLIED> ]>以上为声明在XML文件中的一个DTD示例 简单来说,dtd可以约束你在XML文件中写的标签和属性等相关信息。
(1)引入外部的dtd文件
<!DOCTYPE 根元素的名称 SYSTEM “dtd文件路径”>(2)使用内部dtd,即将dtd内容直接写在XML文件中
<!DOCTYPE 根元素的名称 [DTD文件中的内容]>(3)使用网络上的dtd文件
<!DOCTYPE 根元素的名称 PUBLIC “DTD名称” “DTD文档的url”>上图是一个使用网络dtd文件的示例。
(1)语法
<!ELEMENT 元素名称 元素约束>(2)简单元素和复杂元素 简单元素:就是没有子元素的元素
<!ELEMENT name (#PCDATA)>(#PCDATA)就代表一种约束,约束简单元素name标签内部只能放字符串,相似的还有EMPTY和ANY表示简单元素里面不放东西,为一个空标签或者里面可以放任意类型(可以为空,也可以放字符串) 复杂元素:有子元素的元素
<!ELEMENT 元素名称 (子元素)>例如:
<!ELEMENT person (name,age,school)>则代表person元素只有三个子元素name,age,school
<person> <name>zhangsan</name> <age>20</name> <school>ZJU</school> </person>但是以上定义的子元素只能出现一次,但要是想出现多次,就需要用到一些特殊符号(这和正则匹配的规则有相似之处)
+ :表示一次或者多次 * :表示0次或者多次 ? :表示0次或者一次例如
<!ELEMENT person (name+,age*,school?)>则代表person内子标签name至少得出现一次,age可以出现0次或者多次,school可以出现0次或者一次
(1)语法
<!ATTLIST 元素名称 属性名称 属性类型 属性约束 >(2)属性类型 有三种:
CDATA:表示属性的取值为普通的字符串
ENUMERATED:表示枚举,只能从枚举类型中任选其一
ID:表示属性的取值不能重复,属性的值只能由字母、下划线开头,不能出现空白字符 (3)属性约束 有三种:
#REQUIRED:表示该属性必须出现
#IMPLIED:表示该属性可有可无
#FIXED:表示该属性为一个固定值,语法:#FIXED “固定值”
直接值:表示填写了该属性时为填写的属性值,没有填写为该默认值 定义属性示例:
(1)语法:
<!ENTITY 实体名称 “实体内容”>定义了实体之后,就可以在XML中使用
&实体名称;XML中会自动用实体内容替代,这样可以简化代码