
文档类型定义DTD课件.ppt
31页第第3章章 文档类型定义文档类型定义DTD DTD与XML文档 定义元素及其后代 定义元素的属性 1DTD与XML文档(1)为什么需要文档类型定义(DTD)?XML文档的基本要求是必须满足格式良好(WellFormed)的要求格式良好的XML文档是非常简单的如何根据需要对XML文档进行限制?如何公布一个XML文档的结构?如何重用XML文档的数据?为了解决这些问题,就得需要DTD来解决什么是文档类型定义(DTD)?DTD描述了一个标记语言的语法和词汇表,也就是定义了可以在XML文档中出现的元素、这些元素出现的次序、它们可以如何相互嵌套以及XML文档结构的其它详细信息DTD引入有效的XML文档一个“有效的(Valid)”XML文档既是“格式良好”的,又必须遵守文档类型描述DTD中定义的种种规定DTD=Document Type Definition1DTD与XML文档(2)内部DTD:最简单的使用DTD的方法是在XML文档的内部分加入一个DTD描述加入的位置是紧接在XML处理指示之后XML数据这样,我们就定义了一个文件,它以DOCTYPE中规定的根元素名作为其根元素的名字例3-1:内部DTD1DTD与XML文档(3)?xml version=1.0 encoding=GB2312 standalone=no?!DOCTYPE!DOCTYPE 联系人列表联系人列表 !ELEMENT )*!ELEMENT )!ELEMENT )!ELEMENT (#PCDATA)!ELEMENT (#PCDATA)!ELEMENT (#PCDATA)!ELEMENT (#PCDATA)!ELEMENT (#PCDATA)!ELEMENT (#PCDATA)张三张三/001 001 AA公司公司/ (010)62345678(010)62345678 五街五街12341234号号/北京市北京市/北京北京/李四李四/002 002 BB公司公司/libbb.orglibbb.org (021)87654321(021)87654321 南京路南京路98769876号号/上海上海/上海上海/1DTD与XML文档(4)外部DTD:将DTD置于XML文档之外的文件中。
主要用于引用一个作者或组织所编写的众多XML文件中通用的DTDXML数据例3-2:外部DTD1DTD与XML文档(5)!DOCTYPE 张三张三/001 001 AA公司公司/ (010)62345678(010)62345678 五街五街12341234号号/北京市北京市/北京北京/李四李四/002 002 BB公司公司/libbb.orglibbb.org (021)87654321(021)87654321 南京路南京路98769876号号/上海上海/上海上海/fclml.dtd:!ELEMENT)*!ELEMENT)!ELEMENT)!ELEMENT(#PCDATA)!ELEMENT(#PCDATA)!ELEMENT(#PCDATA)!ELEMENT(#PCDATA)!ELEMENT(#PCDATA)!ELEMENT(#PCDATA)1DTD与XML文档(6)公用DTD:它是一个由权威机构制订的,提供给特定行业或公众使用的外部DTD引用公共DTD的形式为:例:这个“DTD标识名”的命名规则和XML文件的命名规则稍有不同ISO的以ISO开头,改进的非ISO以+开头,未改进的非ISO的以-开头。
后面由多个双斜线组成:/所有者/类型描述/语言/版本例:“-/W3C/DTDHTML4.0/EN”;“-/IETF/ENTITIESLatin1/EN”;“-/W3C/DTDHTML/EN/4.1”1DTD与XML文档(7)IEXMLTOOL是微软的IE插件,其功能是在IE中对XML文档进行有效性检查和浏览XSLT输出的代码从下面的网址下载iexmltls.exe:http:/ 联系人联系人 张三张三 001 A公司公司 (010)62345678 2定义元素及其后代(4)复合型元素的声明,即定义元素及其子元素:DTD尽管要求严格,但也有它的灵活性使用正则表达式,我们就可以描述父元素与子元素之间非常复杂的关系下面就是描述子元素的正则式:元 字 符含 义+出现一次或多次*出现零次或多次?不出现或出现一次()一组要共同匹配的表达式|OR,或,AND,要求严格遵从顺序要求2定义元素及其后代(5)要求顺序的子元素DTD定义(,:有序)下面的XML片断是有效的:张三而下面这个XML片断不是不是有效的:张三2定义元素及其后代(6)重复元素DTD定义(+:至少出现一次)下面的XML片断是有效的:张三而下面这个XML片断不是不是有效的:张三2定义元素及其后代(7)DTD定义(*:出现任意次)成组元素:一组元素放在括号内DTD定义(元素组)符合这个DTD的XML片断可以是:张三李四libbb.org王五wangccc.org2定义元素及其后代(8)OR或:符号“|”描述了一个OR操作。
联系人”元素应该有一个“姓名”子元素,在此之后还应该有一个“”或一个“EMAIL”元素,但不能同时有“”和“EMAIL”下面都是无效无效的XML片段张三张三张三2定义元素及其后代(9)符合上述DTD定义的有效的XML片段应该是:张三12345678或者是:张三注意:在一个组中,只允许使用一种连接符(例如“,”或“|”)下面这样定义的DTD是不合法不合法的:2定义元素及其后代(10)可选子元素:字符“?”说明一个子元素是可选的,可出现,也可不出现下面的XML片段是“有效的”:张三五街1234号北京市北京张三2定义元素及其后代(11)混合内容:在一个元素中可能包含子元素,也可能包含纯文本把这种元素称为混合内容的元素在下面的例子中,“联系人”就是一个混合元素不推荐使用)!DOCTYPE联系人列表张三(010)这是关于张三的信息3定义元素的属性(1)在DTD中定义属性时,使用下面的格式:其中:元素名是属性所属的元素的名字;属性名是属性的命名;属性类型是用来指定该属性是属于十个有效属性类型中的哪种类型缺省值是在没有特别说明属性时的取值,可定义也可不定义;注意:注意:ATTLIST是一个属性的列表,它可以包含很多属性的定义。
例:3定义元素的属性(2)属性缺省值属性缺省值在DTD中定义的属性的缺省值可以分为以下四类:必须赋值的属性必须赋值的属性关键字REQUIRED说明XML文件中必须为这个属性给出一个属性值属性值可有可无的属性属性值可有可无的属性当使用IMPLIED关键字时,不强行要求在XML文件中给该属性赋值,也无须在DTD中为该属性提供缺省值固定取值的属性固定取值的属性还有一种特殊情况,你需要为一个特定的属性提供一个缺省值,并且不希望XML文件的编写者把你的缺省值替代掉这时候,就应该使用FIXED关键字,同时为该属性提供一个缺省值定义缺省值的属性定义缺省值的属性如果不使用上面任何一种关键字的话,就需要在DTD中为它提供一个缺省值在XML文件中可以为该属性给出新的属性值来覆盖事先定义的缺省值,也可以不另外给出属性值,默认为采用DTD中给出的缺省值3定义元素的属性(3)下面给出一个具体的例子:属性类型一个元素的属性可以为以下八种类型中的任意一种:1.CDATA6.ENTITY2.Enumerated7.NMTOKEN3.ID8.NMTOKENS4.IDREF5.IDREFS3定义元素的属性(4)CDATA类型CDATA指的是纯文本,即由字符、符号“&”、小于号“”和引号“”组成的字符串。
当然,应该使用实体&代替“&”,<代替“”,"代替“”请看下面这个关于剧本的例子:!DOCTYPE剧本我可不这么认为!为什么呢?3定义元素的属性(5)枚举类型ENUMERATED属性也可以被描述为一组可接受的取值的列表,XML文件中对属性的赋值将从这个列表中选取一个值这类属性属于枚举类型ENUMERATED,不过,关键字ENUMERATED是不出现在DTD定义中的例:!DOCTYPE购物篮注意,在上面这个例子中,给属性“种类”定义的缺省值是“鸡肉”,所以“购物篮”中的第三个元素的“种类”属性取值为“鸡肉”3定义元素的属性(6)ID类型类型ID是用属性值的方式为文件中的某个元素定义唯一标识的方法ID的值必须是一个有效的XML名称,不要给ID类型的属性事先指定缺省值,更不能使用FIXED型的缺省值DOCTYPE联系人列表张三李四libbb.org3定义元素的属性(7)IDREF类型类型IDREF类型允许一个元素的属性使用文件中的另一个元素的ID标识值作为该属性的取值例如下面的例子:!DOCTYPE联系人列表张三李四3定义元素的属性(8)NMTOKEN和NMTOKENS:名称记号类型NMTOKEN和NMTOKENS是诸多属性类型中面向处理程序的又一个类型。
这两个类型用于指示一个有效的XML名称例如可以通过NMTOKEN类型的属性来访问一个JAVA类等等关于元素的定义:授权用户NMTOKENS#IMPLIEDXML片段:blahblahblah4实体(1)l实体(ENTITY):是XML中用来指代其它复杂结构的机制一个简单的实体可以代表一大段文本内容l实体可分为内部实体和外部实体l实体声明:内部实体:外部实体:l实体引用:&实体名;l其实像”>;”、”<;”等特殊实体就是一种内部预定义的实体.4实体(2):内部实体!DOCTYPE 联系人列表 张三A公司&A公司地址;李四B公司&B公司地址;王五B公司&B公司地址;4实体(3):外部实体 张三A公司&A公司地址;李四B公司&B公司地址;王五B公司&B公司地址;Fclml.dtd:查看实例查看实例5 DTD中声明的类型小结DTD格式:元素声明:属性声明:属性类型:1.CDATA6.ENTITY2.Enumerated7.NMTOKEN3.ID8.NMTOKENS4.IDREF5.IDREFS。
