XML文档约束之——文档类型定义DTD
文档类型定义(DTD):是一种将约束置于XML文档上的方法。
一个DTD例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE games[
<!ELEMENT games (game*)>
<!ELEMENT game (#PCDATE)>
]>
<games>
<game> i am lulu </game>
</games>
1.这个DTD有两个元素类型声明,由<!ELEMENT>指定。
2.DTD可以用来描述元素、每个元素包含几个子元素、元素在文档中的次序。
3.DTD还能够为元素的属性提供约束信息
4.但是,DTD不是必须的,只是为了XML指定约束时,提供的标准机制。
简述指定DTD语法
1.<!DOCTYPE>来指定XML文档使用的DTD
例:
<!DOCTYPE root SYSTEM "uri">
其中,
root来知道该DTD属于哪个文档,即必须与“根元素”匹配;
SYSTEM来表明此DTD是私有的,一般用于外部的DTD;
uri当使用外部DTD时,来指定其位置。
2.外部的DTD
即DTD的相关内容在XML文本外
例:
a.可以是一个完整的URL:
<!DOCTYPE root SYSTEM "http://www.xmlgames.com.games.dtd">
b.如果XML文档和DTD在同一个物理位置,那也可以是一个简单的文件名:
<!DOCTYPE root SYSTEM "games.dtd">
3.内部的DTD
即之前的第一个小例子
4. 元素声明
元素声明包括:声明的起始标记、声明的元素名称、指定元素的内容(可指定为EMPTY,ANY,Mixed,children)
<!ELEMENT games EMPTY>
表明元素的内容可以为空或者不包含任何值.
<!ELEMENT games ANY>
表明元素可以编写为包含普通的元素和字符数据.
<!ELEMENT game (game,#PCDATE)>
Mixed不是一个真正的值,可以表示该元素包含已经解析的字符数据和子元素;
其中,#PCDATE表示该元素必须包含“字符数据的子元素”;
Mixed不能指定子元素的顺序和出现次数.
<!ELEMENT games (game1,game2)>
children不是一个真正的值,表明该元素包含子元素并且为其指定了名称和出现次序.
<?xml version="1.0" encoding="UTF-8"?>
<games>
<game>
<game1/>
<game2/>
</game>
</games>
<!ELEMENT games (game1 | game2)>
<?xml version="1.0" encoding="UTF-8"?>
<games>
<game>
<game1/>
</game>
</games>
<!ELEMENT games (#PCDATE)>
<?xml version="1.0" encoding="UTF-8"?>
<games>
<game>
i am lulu
</game>
</games>
5.元素的出现次数
无 子元素只能出现一次
? 子元素出现0次或1次
* 子元素出现0次或多次
+ 子元素出现1次或多次
例:
<!ELEMENT games (game*)>中game元素可以出现0次或者多次
6.元素的出现顺序
(,)表示元素按指定顺序出现
(|)表示可以按任意顺序出现,并且只有一个是必需的
7.属性列表声明
<!ATTLIST 元素名 属性名 类型 默认值>
a.类型:一般是CDATA,代表不是标记的字符数据
b.默认值:#REQUIRED(属性是必需的,且只有一个值)
#IMPLIED (属性不是必需的,且无值)
#FIXED(属性是必需的,且有指定的值)
例:为元素game声明了两个属性name1和name2
<!ATTLIST game name1 CDATA #REQUIRED
name2 CDATA #IMPLIED
name3 CDATA #FIXIED “lulu”>
下一篇: PL/SQL 2之——复合变量