您的位置:首页 > 大数据 > 人工智能

XML学习(二)DTD

2006-09-20 18:40 183 查看
 第二章DTD(Document Type Definition)
内部DTD
最简单的使用DTD的方法是在XML文件的序言部分加入一个DTD描述,加入的位置是紧接在XML处理指示之后。
<?xml version = "1.0" encoding="Gb2312" standalone = "yes"?>
<?DOCTYPE 根元素名[
元素描述
]>
文件体.......

外部DTD
它可以方便高效地被多个XML文件所共享。只要写一个DTD文件,就能被多个XML文件所引用。
XML声明中必须说明这个文件不是自成一体的,即standalone属性的属性值不再是yes了:
<?xml version = "1.0"  encoding="Gb2312"  standalone = "no"?>

公用DTD

使用外部Dtd时,要在DOCTYPE中使用关键字SYSTEM。实际上,SYSTEM不是引用外部Dtd的唯一方法,这个关键字主要用于引用一个作者或组织所编写的众多 XML文件中通用的Dtd。还存在一种外部Dtd,它是一个由权威机构制订的,提供给特定行业或公众使用的Dtd。因此,另一个引用外部Dtd的办法是使用关键字 PUbLIC,引用这一类公开给公众使用的Dtd。

当使用关键字PUbLIC进行引用时,这个外部Dtd还需要得到一个标识名。引用公共Dtd的形式为: <!DOCTYPE 根元素 PUbLIC "Dtd名称" "外部Dtd的URL">


<!DOCTYPE 示例 PUbLIC "-//Luna Dong//Contact Data//CN" "http://www.mydomain.com/dtds/fclml.dtd">

元素类型声明:


<?xml version="1.0" encoding="utf-8" standalone="yes"?>


<!DOCTYPE 学校[


<!ELEMENT 学校 ANY>


<!ELEMENT 学生(姓名)>


<!ELEMENT 姓名(#PCDATA)>


]>
<学校>
  <学生>
     <姓名>米岩</姓名>
  </学生>
</学校>

          首先解释一下ANY,它是说这个元素可以有任何类型的子元素,也可以是文本,还可以为空。#PCDATA的意义是说明这个元素只能是文本类型的。
       这个文档说,有一个根元素学校,学校有一个子元素学生,子元素学生下有一个子元素姓名。姓名元素必须是文本类型的。
写DTD时应该注意以下几点
1、除了根元素外,任何元素不应为ANY
2、在定义元素时,ETD的顺序是无关紧要的
3、元素名要唯一
4、元素名的一个字母必须是字母、_、:后面跟字母、数字、.、:、_、-的组合,不能有空白符,不能以".xml"开头

定义元素、子元素及其属性


<?xml version="1.0" encoding="UTF-8"?>


<!--DTD 由 XMLSpy v2006 U 创建 (http://www.altova.com)-->


<!ELEMENT email (#PCDATA)>


<!ELEMENT 姓名 (#PCDATA)>


<!ELEMENT 手机 (#PCDATA)>


<!ELEMENT 座机 (#PCDATA)>


<!ELEMENT 地址 (#PCDATA)>


<!ELEMENT 学校 (学生+)>


<!ELEMENT 学生 (姓名, 性别, email+, (手机|座机), 地址?)>


<!ELEMENT 性别 (#PCDATA)>


<!ATTLIST 学生 


学号 CDATA #REQUIRED


QQ CDATA #IMPLIED


籍贯 CDATA "北京"


职业 CDATA #FIXED "学生">

这是一个DTD,email,姓名,手机,座机,地址都是元素,全为文本类型。学校(学生+)这个+号是说一个学校里可以有很多学生,也就是学校元素可以有很多相同的子元素学生,这就是+号的意义。学生的一个子元素地址后有一个?,这个?说明地址元素是可选的,这个元素可有可无。<!ATTLIST>是属性,学生元素有学号,QQ,籍贯,职业属性。属性的#REQUIRED,#MPLIED,#FIXED是属性的缺省值类型。
根据XML文件是否必须为一个属性提供取值,属性的缺省值又可以分为以下三类:

必须赋值的属性
关键字REQUIRED说明XML文件中必须为这个属性给出一个属性值。例如,假设你想定义一个"页面作者"元素,并把这个元素加入所有网站中的每一个页面。之所以定义这个元素,是为了页面编辑者能够提供他的联系信息,以便当发现页面错误或无效链接时,可以及时地通知他。在这种情况下,每个页面作者都有不同的个人信息,所以你无法事先知道应该用什么作为缺省值,但你又的确需要提供每个人的信息。这时候,你就可以把与联系信息相关的属性定义为必须的(REQUIRED),而且不用提供缺省值。

属性值可有可无的属性
当使用IMPLIED关键字时,文法解释器不再强行要求你在XML文件中给该属性赋值,而且也无须在Dtd中为该属性提供缺省值。可以说,这是对属性值有无的最低要求,现实中经常用到。

固定取值的属性
还有一种特殊情况,你需要为一个特定的属性提供一个缺省值,并且不希望XML 文件的编写者把你的缺省值替代掉。这时候,就应该使用FIXED关键字,同时为该属性提供一个缺省值。

定义缺省值的属性
如果不使用上面任何一种关键字的话,该种属性就是属于这种类型。对于这种属性,你需要在Dtd中为它提供一个缺省值。而在XML文件中可以为该属性给出新的属性值来覆盖事先定义的缺省值,也可以不另外给出属性值,后一种情况下它就默认为采用Dtd中给出的缺省值。

以下就是依赖上面DTD写的XML文件


<?xml version="1.0" encoding="utf-8"?>


<!DOCTYPE 学校 SYSTEM "D:Documents and Settingsmiyan桌面 d.dtd">


<学校>


    <学生 学号="36" QQ="389602347" 籍贯="北京" 职业="学生">


        <姓名>米岩</姓名>


        <性别>男</性别>


        <email>black11september@yahoo.com.cn</email>


        <email>showme@163.com</email>


    </学生>


    <学生 学号="389602347" QQ="547895321" 籍贯="北京" 职业="学生">


        <姓名>miyan</姓名>


        <性别>nan</性别>


        <email>black11september@yahoo.com.cn</email>


        <email>showme@163.com</email>


    </学生>


</学校>



今天累了,明天再写。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息