




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 XML文档类型定义返回主页上一章 下一章教学提示:XML的可扩展性表现在我们可以自己定义标记和标记之间的嵌套关系,而DTD(Document Type Definitions)就是进行这种定义的语言。它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。根据DTD可检查XML文档中的数据,以验证其是否符合规定和要求,这可以保证XML文档数据的正确性和有效性。本章介绍DTD的语法,包括元素、属性和实体的语法,结合例子给出DTD的使用方法并给出综合实例。教学目标:了解DTD的作用,熟悉元素、属性、及实体的运用,掌握引用DTD的方法,能够为特定的系统设计标记语言。4.1 DTD的作用4.2 DTD元素4.3 DTD属性4.4 DTD中的实体4.5使用DTD4.6综合实例小结习题进入DOS状态写字版绘图板 进入XMLwriter进入Editplus4.1 DTD的作用 本章开头 下一节XML文档是一种元标记语言,即一种定义标记语言的语言。在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(DTD, Document Type Definitions)来定义。DTD文档是这些新的标记语言的法律性文档。如果XML文档的语法合乎DTD的定义和规定,XML文档就称为一个合法的XML文档,否则就是非法的XML文档。合法的XML文档在实际应用中地位很重要,因为只有合法的XML文档才能被应用软件有效地处理。DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。其作用主要表现在以下几个方面:1使用DTD可以提供一种统一的格式。XML的可扩展性为文档的作者提供了很高的灵活性,可我们有时候需要的是统一,我们要求某一类文档具有相同的结构。2使用DTD可以保证数据交流和共享的顺利进行。3DTD使我们能够不依赖具体的数据就能知道文档的逻辑结构。在没有XML文档的时候,也可以根据DTD为XML文档编写样式单,编写处理程序,这样可以有效地提高工作效率。4使用DTD可以验证数据的有效性。DTD对文档的逻辑结构进行了约束,这种约束可以比较宽松,也可以十分严格。可以根据DTD检查数据,以验证其是否符合规定和要求,这可以保证数据的正确和有效。4.2 DTD元素 上一节 下一节 本章开头DTD中描述的基本部件是元素和属性,它们负责确定XML文档的逻辑结构。元素表示一个信息对象,而属性表示这个对象的性质。所有元素中有且只有一个根元素,其他的元素都是它的子元素,除根元素外,每个元素都被其他元素包含,一个元素可以有几个不同类型的子元素。4.2.1元素的基本类型元素的基本类型大致可分为两种,一种称为简单类型,另一种称为复合类型。简单类型具有文本数据,即可析字符数据,该类型也称为上下文中的#PCADTA;复合类型可以包含其他元素和文本数据。1.简单型#PCDATA(Parsed character data)表示标记的内容是可解析文本,所谓的可解析文本就是非标记文本。用#PCDATA规范了的元素不能再包含子元素。例如“How do you do”是不包含标记的文本,而“How do you do”就不是可解析的数据类型,因为其中包含有标记和。另外数据类型定义文档中不同元素定义的次序没有先后关系,但文档的语法对大小写敏感。#PCDATA的声明格式如下:【例4.1】#PCDATA的用法,code4_1.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 高等教育出版社 19.7显示结果如图4.1。图4.1 #PCDATA的用法2.复合型复合型元素与简单型元素相对,复合型元素可包含其它元素。【例4.2】复合型元素的用法,code4_2.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 高等教育出版社 7-04-014768-8 2004.6 19.7显示结果如图4.2。图4.2 复合型元素的用法4.2.2元素的声明1.元素声明的基本语法元素声明的语法如下:其中Element_Name为声明的元素名称,Element_Defination为元素的内容格式的定义。合法的元素声明语句如:2.空元素的声明在第3章中已介绍了空标记的使用方法,那么在DTD中如何对与其对应的空元素进行声明呢?其声明语法如下:例如下面语句:3.不限定元素的内容的声明ANY是DTD中使用很频繁的一个关键字,特别是对于文档根元素的声明。我们在定义一个DTD文档时通常很难准确地确定一个标记是否具有子标记的情况,此时一般的做法是指定该标记的子标记为ANY型(表示可以是任意的标记),这样在它之中可以包含任何数据、任何声明的子元素及其数据和子元素的组合。ANY元素的声明格式如下:而在文档刚开始定义时,我们并不明确将来的应用领域要有多少个标记,所以惟一的做法就是标记为ANY类型,表示可以包含任何标记和可解析数据。例如:然后在文档的实际开发过程中再逐步完善该标记的子标记的具体定义,将ANY关键字替换掉。【例4.3】ANY的用法,code4_3.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 高等教育出版社 19.7显示结果与图4.1相同。文档当中能否有多个ANY型的标记呢?这是完全可以的,因为ANY型的标记不一定是根标记。【例4.4】包含多个ANY型标记的XML文档,code4_4.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 高等教育出版社 19.7ANY型的标记在文档中应尽量少使用,因为这与XML文档的数据结构性相违背。但多数情况之下在定义一个标记的所有子标记之前,总是首先以ANY代替,最后再以实际的子标记替代ANY关键字,定义出具体的DTD文档。4.子元素列表的设定在XML中有一种针对复合元素的最为严格的设定方法,称为子元素列表的设定。这种方式下,元素都拥有哪些子元素、每个子元素出现的次数和位置都有明确的规定,在具体文档实现时,必须严格执行。子元素列表的设定语法如下:其中(Child_Element1, Child_Element2,)部分为Element_Name所拥有的子元素列表。【例4.5】子元素列表的设定,code4_5.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 高等教育出版社 2004.6 7-04-014768-8 19.7上面程序是一个不合法的文档,原因在于,子标记与的使用顺序与DTD中定义的顺序不一致。DTD中一个标记后面的子标记列表中,子标记出现的次序代表了将来XML文档中的子标记出现次序,而且这种次序不能被违背。5.可选择的子标记有些时候,需要在两个或多个互斥的元素中进行选择。即多选一的情况,如一个人的性别可以是男或女,两者中只能有一种情况。DTD有专门的语法来处理这种情况,其语法如下:其中(Child_Element1|Child_Element2|)部分为选择性元素组合,具体使用时必须要在这个列表中选择其一。【例4.6】子元素列表的设定,code4_6.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 高等教育出版社 19.76.元素出现次数的控制在DTD中元素定义一个标记的子标记无非是解决该标记可以包含什么标记,各个子标记的出现次序以及能够出现的次数的问题。DTD可以在一定程度上控制出现的次数。太精确太复杂的控制是不必要的。如明确规定一个元素出现3次、4次,是容易作到的,使用上面介绍的子元素列表的设定方法即可实现,但如果重复出现的次数较多时,这种方法就显得十分笨拙,这时可用以下方法来对其进行控制:(1)一个元素可能出现1次,也可能不出现。这时可通过在元素名后面加上一个“?”来实现。(2)一个元素可能不出现,也可能出现多次。这时可通过在元素名后面加上一个“*”来实现。(3)一个元素可能出现1次,也可能出现多次,但至少也要出现一次。这时可通过在元素名后面加上一个“+”来实现。7.元素组在声明复合型元素的时候,可以使用括号将其部分子元素组合在一起,成为一个“元素组”,该元素组在特性上与普通元素没什么区别,可以对其应用“?”、“*”、“+”等控制字符。【例4.7】元素组的使用,code4_7.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 19.7 三国演义 罗贯中 50.0显示结果如图4.3。图4.3 元素组的使用在实际应用中,使用分组可能不是一种最好的方案。这时我们也可以先将准备分组的元素定义为一个复合元素,再在原来的元素中引用刚定义的复合元素,这样文档的结构更清晰。【例4.8】较好的方案,code4_8.xml。!DOCTYPE bookinfo 2 计算机导论 丁跃潮等 19.7 三国演义 罗贯中 50.0 显示结果如图4.4。图4.4 较好的方案8.混合型元素还有另一种元素,其内容既可以为字符数据,也可以为子元素,这种元素称为混合型元素。混合型元素声明格式如下:混合型元素的存在破坏了文档的层次结构化,不利于应用软件对XML文档的处理,在XML文档开发过程中,它可以作为一个不成熟的DTD文档,一步一步地在XML文档中添加标记,边添加边测试其正确性,这时可将尚未处理的部分作为字符数据组织到一个混合型元素中,以使文档通过测试。但在文档最后完成时,要通过添加新标记的方法来清除这种非结构化信息。4.3 DTD属性 上一节 本章开头什么是属性,简单的讲就是元素的附加特性,在DTD中声明元素时,也必须对该元素的属性进行声明。4.3.1属性的声明在DTD中,属性声明的格式如下:其中为属性声明的关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,Default_value为没有设定属性值时的默认值。【例4.9】属性的声明,code4_9.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 高等教育出版社 19.7显示结果如图4.5。图4.5 属性的声明在声明属性时有如下需注意的事项:1.可以多次为一个标记声明其中所包含的属性。如在XML文档中有下面语句:属性声明可以为:2.属性的声明在文档中的次序没有严格的要求,可位于与其相连的元素声明之前或之后。如在XML文档中有下面语句:属性声明可以为:3.所有标记的属性,都要在各自所对应的标记中声明。如在XML文档中有下面语句:属性声明可以为:4.属性有四种不同类型的缺省值,可在属性声明中的Default_value部分指定: default:表示使用提供的缺省值,default不是一个关键字,它代表一个预设的字符串。 上例句表示当在XML文档中省略了对bookinfo元素的bookcategory属性值进行设定时,该属性的缺省值就是“文艺”。 #REQUIRED:表示属性值必须指定 #IMPLIED:表示标记的这个属性可用可不用 #FIXED:表示标记的某个属性值是一个固定值,且必须是指定的值。 4.3.2属性的类型在属性的声明中TYPE部分为属性的类型设定,DTD中属性的类型有10种,下面将对这些数据类型进行逐一的介绍。1.CDATA型CDATA型表明属性值为不包含“”和“”的任意字符串,如果属性值中需要包含“”和“”,则可使用特殊字符来代替。2.Enumerated型如果属性值并不是任意的字符串,而是在几个可能的值中进行选择,如书籍的“类别”属性,其值可为“文艺”,或为“自然科学”,而不可能为其他情况时,则可以将书籍的“类别”属性设定为Enumerated型。3.ID型当元素的某个属性值是不能重复时,如书籍的“ISBN”属性、个人的“身份证号”属性等,要定义这样的属性则需使用属性的ID类型。在一个XML文档中,所有元素的ID类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID类型的属性。4.IDREF与IDREFS型IDREF为Identifier Reference的缩写,IDREF与ID类型属性的关系为子元素与父元素的关系,即IDREF类型属性的值必须是其它元素的ID类型属性的值,且该ID类型属性的值必须在文档的其他地方被设定过。IDREFS类型属性的属性值可有多个,每一个都必须是在文档其它地方被设定了的ID类型的属性值,而这多个属性值之间用空格来隔开。【例4.10】IDREFS的使用,code4_10.xml。!DOCTYPE school 丁潇 PowerBuilder AutoCAD XML 显示结果如图4.6。图4.6 IDREFS的使用5.ENTITY与ENTITIES型ENTITY类型的属性提供了把外部二进制形式的文件(如JPEG、MP3等)和外部不可解析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的通用实体名。ENTITIES类型属性的属性值可由多个不可解析的外部实体名称组成,各实体名称之间使用空格来分隔。【例4.11】ENTITY与ENTITIES的使用,code4_11.xml。!DOCTYPE customers cheaperget 12345678 dreamingboy 22345678 本例不是所有XML浏览器可以自动识别的通用格式,仅仅是某些浏览器和应用程序可能采用的在文档中嵌入非XML数据的方法而已。6.NMTOKEN与NMTOKENS型NMTOKEN属性类型限定属性值是有效的XML名称,这个属性值可以是由英文、数字、“.”、 “_”、“-”、“:”等组成,这里有几点需要注意。 不能包括空格 以上字符中除“:”以外,其它字符都可以作为开头字符 “:”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。 正因为NMTOKEN属性类型对于字符的严格要求,使得它在一些常用编程语言中,都是合法的数据,这就为这些编程语言对XML文档数据的操作打下了良好的基础。NMTOKENS属性类型是与NMTOKEN属性相近的形式。这种类型的属性可以使如下情况合法属性由若干XML名称组成,彼此间由空格分隔。通常可为使用NMTOKEN属性相同的理由而使用NMTOKENS属性,但仅仅在需要多个名字的时候。7.NOTATION型XML文档中引入了外部不可解析实体后,解析器无法解析这些二进制文件,这时,我们就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进行处理。【例4.12】NOTATION的使用,code4_12.xml。!DOCTYPE customers cheaperget 12345678 dreamingboy 22345678 4.4 DTD中的实体 上一节 下一节 本章开头在第3章中我们已接触了预定义的实体,在DTD中,还存在自定义实体,定义后,依照一定的语法规则可在XML文档或DTD中进行引用。4.4.1实体的概念实体是包含了文档片段的虚拟存储单元,其可用来存储XML声明、DTD、其它形式文本、二进制数据等。简单的讲就是一段代码或数据的代称,这个代称即为实体的名字。当我们需要在文档中引用某段代码或数据时,则可以引用与这段代码或数据相对应的实体名称来代替实体的具体内容。具有正确性检查功能的XML处理器在提交文档给最终应用程序之前,或在显示文档以前,将先把所有不同的实体引用替换为与其对应的具体内容,从而构成一个结构完整的文档。4.4.2实体的分类按照实体的具体内容来分类,实体可分为可解析与不可解析两类。可解析实体其具体内容为简单的字符、数字、文本块;而不可解析实体其具体内容则为图片、声音等二进制文件。按照逻辑存储来分类,实体可分为内部实体与外部实体两类。内部实体,其内容是在文档内部设定的;而外部实体,则是一个外部独立的物理存储对象,如某个外部文件。按照使用的范围来分类,实体可分为一般实体与参数实体两类。一般实体都是用来构成文档的具体内容,可出现在XML文档中,也可出现在DTD中;而参数实体只能出现在DTD中,不能出现在XML文档中。1.内部一般实体内部一般实体就是在文档实体内部定义和使用的实体,其内容通常是一段文本字符。这种实体要在DTD中通过DTD语句定义,可以在XML文档中使用,亦可在DTD中使用。其定义的基本语法为:其中为关键字,Eentity_name为实体名称,Replacement为实体所代替的文本内容。引用内部一般实体的方法为:&Eentity_name;【例4.13】内部一般实体的使用,code4_13.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 &thepublisher; 7-04-014768-8 2004.6 19.7显示结果与本章第二节图4.2相同。当内部一般实体在DTD中引用时,有以下几方面需注意: 不能在元素及属性的声明中引用内部一般实体。如下面的声明就是非法的: 在语句中不能出现循环。如下面的语句即为非法的: 2.外部一般实体所谓外部一般实体就是在文档实体以外定义的,要通过一个URL才能引用到的实体。外部实体为独立的文件,其可被多个文档所引用。正因为每一个完整的XML文档都是一个合法的实体,所以XML通过对外部实体的引用,可以在一个XML文档中嵌入另一个XML文档,或者将多个文档组合成一个文档。其定义的基本语法为:其中URL为引用的外部实体的URL地址。引用外部实体也与引用内部一般实体的方法一样:&Eentity_name;假如有一个XML文档code4_14out.xml如下: 高等教育出版社7-04-014768-82004.6我们可以通过下面的例子把它作为外部实体来引用。【例4.14】外部一般实体的使用,code4_14.xml。!DOCTYPE bookinfo 计算机导论 丁跃潮等 &pub; 19.7显示结果仍与本章第二节图4.2相同。在引用外部一般实体时,有以下几方面需注意: 因为在一个文档中需引用某些外部文件,所以该文档声明中的standalone属性不再是默认值“yes”,而应该为“no”。 作为外部一般实体的文档,如果使用的是XML的默认字符集即UTF-8或UNICODE,则可以在文档头部不进行XML声明,否则,必须有XML声明,且声明时,一定要说明ecoding属性。 3.内部参数实体内部参数实体是指在独立的外部DTD文档的内部定义和使用的实体,其内容为仅能为DTD而非XML文档内容的书写文本。这里提到参数实体,参数实体与前面所讲的一般实体是有区别的: 在引用形式上,一般实体的引用为“&Eentity_name;”,而参数实体的引用则为“%Eentity_name;” 在引用范围上,一般实体可在XML主本文档中引用,也可在DTD中引用,而参数实体只可在DTD中引用 定义内部参数实体的基本语法如下:【例4.15】内部参数实体的使用,code4_15.dtd。4.外部参数实体外部参数实体是指在独立的外部DTD文档的外部定义和使用的实体,外部参数实体用于将多个独立的DTD文档组合成一个大的DTD文档。定义外部参数实体的基本语法为:【例4.16】外部参数实体的使用,code4_16.xml。 计算机导论 丁跃潮等 高等教育出版社 7-04-014768-8 2004.6 19.7程序code4_16_1.dtd为:%pub;程序code4_16_2.dtd为:经过几次引用,显示结果仍然同前,如图4.2。4.5 使用DTD 上一节 下一节 本章开头前面几节讲述了DTD的各组成部分的基本语法。这一小节将讲述如何引用DTD。引用DTD的方法有两种:内部DTD引用与外部DTD引用。内部DTD引用即在XML文档中直接设定DTD;外部DTD引用则是在XML文档中引用一个扩展名为.dtd的独立文件。4.5.1内部DTD内部DTD的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省杭州市萧山区城厢片2026届八年级物理第一学期期末联考模拟试题含解析
- 2026届福建省漳州市云霄县物理八年级第一学期期末达标测试试题含解析
- 2026届江苏省南京市南京航天大附属初级中学八年级物理第一学期期末检测试题含解析
- 2026届广西北海市、南宁市、钦州市、防城港市物理八上期末联考试题含解析
- 2026届湖北省黄石市物理八年级第一学期期末检测试题含解析
- 2026届北京市海淀区中学关村中学物理八年级第一学期期末学业水平测试模拟试题含解析
- 2026届陕西省渭南市临渭区物理八年级第一学期期末教学质量检测试题含解析
- 江西省吉安八中学2026届八年级物理第一学期期末检测模拟试题含解析
- 宁夏吴忠市盐池一中学2026届物理八上期末达标检测试题含解析
- 2026届河北省唐山市路北区物理八上期末考试试题含解析
- 2025年度中国工商银行河南省分行社会招聘120人备考练习试题及答案解析
- (2025年标准)酒店政府采购协议书
- 2025河北保定市唐县招聘社区工作者64人考试备考试题及答案解析
- 2025云南昆明巫家坝建设发展有限责任公司招聘23人笔试参考题库附答案解析
- 逐梦飞翔·奋进高二-高二上学期开学第一课主题班会课件
- 国航特殊餐食代码表
- 多媒体技术与应用ppt课件(完整版)
- AS9100D体系标准中文版
- 免疫细胞治疗中心管理制度和质量保障措施
- 《中国人民警察警歌》歌词
- 科技文献检索与利用
评论
0/150
提交评论