DTD技术
1.DTD:是一门XML约束技术,用来约束XML写法。
2.如何在XML中引入一个DTD?
*外部引入:dtd约束文件存在在一个外部文件中,我们在XML中引入该约束。
(1)本地文件引入:该dtd文件存在在本地硬盘中
<!DOCTYPE 根元素的名称 SYSTEM "文件所在的路径">
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
note.dtd:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
(2)公共位置文件引入:dtd约束文件存在在一个公共网络上,我们在XML引入该约束
<!DOCTYPE 根元素的名称 PUBLIC "dtd名称" "dtd所在的URL">
*在XML内部写dtd约束: 在文档声明下<!DOCTYPE 根元素名称 [dtd约束的内容]>
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
3.利用dtd约束XML中的元素
<!ELEMENT 元素名称 元素约束>
*元素约束:
(1)存放类型
ANY:当前声明的元素可以包含任意子元素
EMPTY:当前声明的元素不能包含任何元素
(2)存放内容:利用小括号括起来的元素的名称,用来表示该元素中可以存放哪些内容
<!ELEMENT "元素名" (可以包含的元素的名称)>
小括号中的内容,可以有多个子元素的名称
如果用“,”分割这些子元素就表明这些子元素必须按指定的顺序出现
如果用“|”分割这些内容就表明这些子元素只能出现其中之一
使用“+”来表明内容可以出现一次或多次
使用“*”来表明内容可以出现零次或多次
使用“?”来表明内容可以出现零次或一次
#PCDATA表明该元素可以包含标签体
可以利用()进行组操作:
<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
4.利用dtd约束XML中的属性
<!ATTLIST 元素名
属性名 属性类型 属性约束
...>
*属性类型
(1)CDATA:表明该属性的值是一个普通的文本值。
(2)ENUMERATED:表明该属性的值只能取指定范围内的其中之一
(3)ID:表明该属性值在整个文档中必须唯一,注意ID类型的属性的值必须以字母下划线开头,并且不能以数字开头,不能包含空白字符
*属性约束
(1)#REQUIRED 来表明当前这个属性是必须存在的属性
(2)#IMPLIED 来表明当前这个属性是可选的属性
(3)#FIXED "固定值" 来表明当前这个属性具有一个默认的值,可以不明确指定该属性,解析器会帮你加上,如果你硬是指定了一个其他的值,会出错。
(4)"默认值" 来表明当前属性具有一个默认的值,如果给这个属性指定一个值就用指定的值,如果不指定呢,就使用默认值。
5.实体:可以理解为对一段内容的引用,如果有一段内容到处在被使用,可以将其设计为一个实体
(1) 引用实体:用在XML中的实体。
声明实体:<!ENTITY 实体名称 "实体内容">
引用引用实体:&实体名称;
(2)参数实体:用在DTD文件中的实体。
声明实体:<!ENTITY % 实体名称 "实体内容">
引用参数实体: %实体名称;