DTD:Document Type Definition 文档定类型定义。
作用:是用来约束XML的书写规范。
写法:
内部声明:
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 !DOCTYPE 声明中:<!DOCTYPE根元素 [元素声明]>
外部声明:
本地:
<!DOCTYPE 根元素 SYSTEM "dtd文件名">
外地(网上):
<!DOCTYPE 根元素 PUBLIC “dtd的名称” “dtd的路径”>
DTD语法:
<!ELEMENT 元素名称 使用规则>
使用规则:
- (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
- EMPTY:用于指示元素的主体为空。比如<br/>
- ANY:用于指示元素的主体内容为任意类型。
- (子元素):指示元素中包含的子元素
定义子元素及描述它们的关系:
- 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)>
- 如果子元素用“|”分开,说明任选其一。
如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)>
- 用+、*、?来表示元素出现的次数
-
- 如果元素后面没有+*?:表示必须且只能出现一次
- +:表示至少出现一次,一次或多次
- *:表示可有可无,零次、一次或多次
- ?:表示可以有也可以无,有的话只能有一次。零次或一次
如: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
定义属性:在DTD文档中使用ATTLIST关键字来为一个元素声明属性。
语法:
<!ATTLIST 元素名 属性名1 属性值类型 设置说明 属性名2 属性值类型 设置说明 … > 如: <!ATTLIST 商品 类别 CDATA #REQUIRED 颜色 CDATA #IMPLIED > 对应的XML为:<商品 类别=“服装” 颜色=“***”/>
属性值类型:
设置说明:
CDATA:表示属性的取值为普通的文本字符串
ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
ID:表示属性的取值不能重复
#REQUIRED:表示该属性必须出现
#IMPLIED:表示该属性可有可无
#FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"
直接值:表示属性的取值为该默认值
定义实体:
为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容。
在DTD文档中使用ENTITY关键字来声明一个实体。
实体可分为:引用实体和参数实体,两者的语法不同
引用实体语法:<!ENTITY 实体名称 “实体内容”>
在XML中引用方式:&实体名称
参数实体语法:<!ENTITY % 实体名称 “实体内容”>
在DTD中引用方式:%实体名称
示例(网上搜的):
<?xmlversion="1.0"?> <!DOCTYPE note[ <!ELEMENT note(to,from,heading,body)> <!ELEMENT to(#PCDATA)> <!ELEMENT from(#PCDATA)> <!ELEMENT heading(#PCDATA)> <!ELEMENT body(#PCDATA)> ]> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don‘tforgetmethisweekend</body> </note>
!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型