XML基础及相关技术.ppt
XML基础及相关技术杨德婷中科院网络中心2002.8.16提 纲n山山重水复疑无路,柳暗花明又一村重水复疑无路,柳暗花明又一村 XML的诞生的诞生n没有规矩,不成方圆XML语法n海纳百川,有容乃大DTD与Scheman花想衣裳云想容XML文件的显示n江山如画,一时多少豪杰XML标准体系框架n千帆竟发,百舸争流关于XML的编辑与浏览工具n问苍茫大地,谁主沉浮XML的应用和发展前景2002-8-162XML基础及相关技术山重水复疑无路,柳暗花明又一村XML的诞生n何谓XMLn为什么要XMLnXML的来龙去脉nXML实例2002-8-163XML基础及相关技术何谓XML(eXtensibleMarkupLanguage)什么是置标语言(MarkupLanguage)n超文本置标语言HTML(HyperTextMarkupLanguage)nXML和HTML同属一个大家族置标语言家族n“置标”的一个精确定义是:就数据本身的信息对数据进行编码的方法。nE.g.n用黄色荧光笔把课本上的某些句子加亮,或者干脆在这这些句子些句子 下面划线nHTMLnBOLDBOLD2002-8-164XML基础及相关技术何谓XML什么是置标语言(cont.)nHTML代码显示了一个客户联系信息列表:张三用户ID:001公司:A公司EMAIL:电话:(010)62345678地址:五街1234号城市:北京市省份:北京李四ID:002公司:B公司EMAIL:libbb.org电话:(021)87654321地址:南京路9876号城市:上海市省份:上海这段HTML置标数据在浏览器中的显示效果如下:n张三nID:001n公司:A公司nEMAIL:n电话:(010)62345678n地址:五街1234号n城市:北京市n省份:北京n李四nID:002n公司:B公司nEMAIL:libbb.orgn电话:(021)87654321n地址:南京路9876号n城市:上海市n省份:上海2002-8-165XML基础及相关技术何谓XML什么是XMLneXtensibleMarkupLanguageneXtensible:XML是一种可扩展的元置标语言,它可用以规定新的置标规则,并根据这个规则组织数据。n数据置标:一类偏重于语意描述;一类偏重于显示方式的描述n置标的语法:DTD,Scheman置标的含义:CSS,XSL2002-8-166XML基础及相关技术何谓XML什么是XML(cont.)n数据置标:一类偏重于语意描述;一类偏重于显示方式的描述(SVG,SMIL)nFCLML(F_companysClientListMarkupLanguage)F公司的客户列表置标语言(语义描述)张三001A公司(010)62345678五街1234号北京市北京李四002B公司libbb.org(021)87654321南京路9876号上海上海2002-8-167XML基础及相关技术何谓XML什么是XML(cont.)n置标的语法、句法和结构:DTD,Schemanfclml.dtd:n置标的含义,向应用程序,比如浏览器,提供如何处理显示的指示说明。nXSL,CSSn每当看到一个联系人标签,用一个UL标签显示它。同样,/联系人转换为一个/UL标签。n所有的姓名标签被转换为LI标签加以显示。同样,/姓名转换LI标签。n所有的EMAIL标签被转换为LI标签加以显示。同样,/EMAIL转换为/LI标签。2002-8-168XML基础及相关技术为什么要XML仍从HTML说起 “从网络使用之初,我们一直在所有文件中都使用近乎相同的格式,HTML格式.使用具有固定语法的固定标记集具有一定的好处,即简单性。但是,HTML非常有限,网页设计者希望能够对页面的表现能力具有更多的控制,这就需要求助于XML。”n专门为描述网页的表现形式而设计的,疏于对信息语意及其内部结构的描述。n对形式的描述能力实际也还是非常不够的,无法描述矢量图形、科技符号和一些其它的特殊显示效果。nIE和Netscape都给HTML加入了一些特殊的标记,以便为自己的浏览器增加一些特殊的显示效果。HTML的标记日益臃肿,文件结构混乱而缺乏条理,导致浏览器的设计越来越复杂,还降低了不同浏览器之间的兼容性。n搜索时间长.n动态内容需要下载的部件太多。nHTML可扩展性差.2002-8-169XML基础及相关技术为什么要XMLXML的第一大优势自由民主的网上世界n自由地制定你自己的标记语言。n允许各个组织、个人建立适合他们自己需要的标记库,并且,这个标记库可以迅速地投入使用n允许各个不同的行业根据自己独特的需要制定自己的一套标记,但它并不强迫所有浏览器都能处理这些成千上万个千奇百怪的标记,同样也不要求标记语言的制定者制定出一个非常详尽非常全面的语言从而适合各个行业各个领域的应用。n现在许多行业、机构都利用XML定义了自己的标记语言。比较早而且比较典型的是下面两个实例:n化学标记语言CML(ChemistryMarkupLanguage)n数学标记语言MathML(MathematicalMarkupLanguage)2002-8-1610XML基础及相关技术为什么要XMLXML的第二大优势超越于格式之上n在HTML中,显示方式内嵌于数据之中n在这些数据中寻找信息非常困难n数据自身的逻辑不得不屈服于HTML语言规范的逻辑n张三用户ID:001公司:A公司EMAIL:电话:(010)62345678地址:五街1234号城市:北京市省份:北京ZIP:100001 n在XML中,显示样式从数据信息中抽取出来,放在样式单文件中n在XML中数据搜索可以简单高效地进行nXML是自我描述语言n 张三 001 A公司 (010)62345678 五街1234号 北京市 北京 100001 。2002-8-1611XML基础及相关技术为什么要XMLXML的其它优点nXML遵循严格的语法要求(与HTML相比)n不但要求标记配对、嵌套,而且还要求严格遵守DTD的规定n提供较好的可读性和可维护性n减轻了浏览器开发人员的负担,也提高了浏览器的时间空间效率nXML便于不同系统之间信息的传输n各种不同的系统之间可以采用XML作为交流媒介。XML不但简单易读,而且可以标注各种文字、图像甚至二进制文件nXML具有较好的保值性2002-8-1612XML基础及相关技术为什么要XMLXML的一点缺陷?nXML固然好,但也有它不足的一面,阻碍了它的发展。而其中最大的不足,便是至今都没有什么能够充分支持它的应用处理程序。n随着越来越多的用户看到将他们的数据用XML组织的好处后,相信XML的分析算法和相应的工具也会逐渐完善起来,XML的后端支持将变得越来越简单。从IE和Netscape所提供的内置XML分析工具中,我们还是看到了无限希望嘛!2002-8-1613XML基础及相关技术为什么要XMLXML与HTML的比较2002-8-1614XML基础及相关技术XML的来龙去脉XML之发展史nXML的两个先驱SGML和HTMLnSGML(StandardGeneralizedMarkupLanguage)n它为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在分类和索引数据中非常有用。目前,SGML多用于科技文献和政府办公文件中。nSGML非常复杂,而且非常昂贵。nHTMLnHTML是一个非常简单的SGML语言,免费;获得了广泛的支持。nHTML有许多致命的弱点,正如前面所分析的那样。nXMLn国际互联网论坛W3C(World Wide Web Consortium):为WorldWideWeb的发展开发通用的协议和标准。n既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。SGML中所有非核心的、未被使用的和含义模糊的部分都被删除,剩下的就成为短小精干的置标工具XMLnW3C于1998年2月批准了XML的1.0版本2002-8-1615XML基础及相关技术XML的来龙去脉置标语言家族一览2002-8-1616XML基础及相关技术XML实例n为置标语言FCLML制定的DTDfclml.dtd 2002-8-1617XML基础及相关技术XML实例(cont.)n关于客户联系信息的标准XML文件client.xml 张三 001 A公司 (010)62345678 五街1234号 北京市 北京 李四 002 B公司 libbb.org(021)87654321 南京路9876号 上海 上海 2002-8-1618XML基础及相关技术XML实例(cont.)n为client.xml制定一个样式单mystyle.xsl F公司的客户联系信息 用户ID:公司:EMAIL:电话:街道:城市:省份:2002-8-1619XML基础及相关技术XML实例(cont.)nXML文件被样式单转换为下面的HTML文件F公司的客户联系信息 张三用户ID:001公司:A公司EMAIL:电话:(010)62345678地址:五街1234号城市:北京市省份:北京 李四ID:002公司:B公司EMAIL:libbb.org电话:(021)87654321地址:南京路9876号城市:上海市省份:上海2002-8-1620XML基础及相关技术XML实例(cont.)n所看到的显示结果,实际上同上面这个HTML文件的显示结果是相同的n张三 n用户ID:001 n公司:A公司 nEMAIL: n电话:(010)62345678 n地址:五街1234号 n城市:北京市 n省份:北京 n李四 nID:002 n公司:B公司 nEMAIL:libbb.org n电话:(021)87654321 n地址:南京路9876号 n城市:上海市 n省份:上海 2002-8-1621XML基础及相关技术提 纲n山重水复疑无路,柳暗花明又一村XML的诞生n没有规矩,不成方圆没有规矩,不成方圆XML语法语法n海纳百川,有容乃大DTD与Scheman花想衣裳云想容XML文件的显示n江山如画,一时多少豪杰XML标准体系框架n千帆竟发,百舸争流关于XML的编辑与浏览工具n问苍茫大地,谁主沉浮XML的应用和发展前景2002-8-1622XML基础及相关技术没有规矩,不成方圆XML语法n什么是什么是“形式良好的形式良好的”XML文件文件nXML文件的逻辑结构nXML文件的整体结构n用XML声明作为开头nXML文件的精髓XML元素nXML元素n字符数据n标记nCDATAn注释n处理指示nXML文件的物理结构n实体n实体的两种类型n实体的使用方式2002-8-1623XML基础及相关技术什么是“形式良好的”XML文件nXML是一个元置标语言,可以看作是用来产生置标语言的工具。因此,XML并没有预定义一个特定的标记集,而是描述了一个用来定义标记集的方法。当我们用这个方法规定好一个标记集,并根据这些规定填入文本内容后,这些标记就和纯文本一起构成了一个XML文件。nXML文件实际上是广义的文件,更准确的叫法应该是一个“数据对象”,但是为了简便起见,我们仍称它为“文件”。n在XML中,“形式良好”(well-formed)有着明确的标准,即是要遵要遵守守XML1.0规范中的语法规则规范中的语法规则。无论是从物理结构上讲,还是从逻辑结构上讲,XML都必须符合规范,才能被正确解释处理。nXML创建之初的目标就是希望XML文件既容易被人阅读,又容易被机器理解。所以,确保你的文件是“形式良好的”,这是一个最低标准,符合了这个标准,就能保证连最笨的机器也能阅读你的XML文件了。保证了XML严密的条理性、逻辑性和良好的结构性,XML的优点也正是依靠它们体现出来的。2002-8-1624XML基础及相关技术没有规矩,不成方圆XML语法n什么是“形式良好的”XML文件nXML文件的逻辑结构文件的逻辑结构nXML文件的整体结构文件的整体结构n用用XML声明作为开头声明作为开头nXML文件的精髓文件的精髓XML元素元素nXML元素元素n字符数据字符数据n标记标记nCDATAn注释注释n处理指示处理指示nXML文件的物理结构n实体n实体的两种类型n实体的使用方式2002-8-1625XML基础及相关技术XML文件的逻辑结构XML的整体结构n1 2 3 4 5 XML 6 XML是一种可扩展的源置标语言,它可用以规定新的置标规则,并根据这个规则组织数据7 8 9 !CDATA10 11 张三12 13 14 15 16 17nXML文件最基本的构成nXML声明:1n处理指示(可选):12nXML元素:317n标记:e.g.5n字符数据:e.g.5“XML”nCDATA:914n注释:82002-8-1626XML基础及相关技术XML文件的逻辑结构用XML声明作为开头n当写一个XML文件时,最好以一个XMLXML声明声明作为开始。XML声明在文件中是可选内容,但W3C推荐加入这一行声明。因此,作为一个良好的习惯,我们通常把XML声明作为XML文件的第一行。nXML声明是处理指示的一种。它的作用就是告诉XML处理程序:“下面这个文件是按照XML文件的标准对数据进行置标的”。n一个完整的XML声明是:?encoding=“GB2312”?nXML声明由“”结束。在“?”后面紧跟着处理指示的名称“xml”。2002-8-1627XML基础及相关技术XML文件的逻辑结构用XML声明作为开头(cont.)?version=“1.0”standalone=“no”encoding=“GB2312”?n三个属性nversion属性n在一个XML的处理指示中必须包括version属性指明所采用的XML的版本号,而且,它必须在属性列表中排在第一位。当前的XML最新版本是1.0.nstandalone属性(可选)n这个属性表明该XML文件是否和一个独立的置标声明文件配套使用。因此,如果该属性置为“yes”,说明没有另外一个配套的DTD文件来进行置标声明。相反,如果这个属性置为“no”,则有可能有这样一个文件。nencoding属性(可选)n所有的XML语法分析器都要支持8位和16位的编码标准。n几个常见的编码:简体中文码(GB2312)、繁体中文码(BIG5)、西欧字符(UTF-8)2002-8-1628XML基础及相关技术XML文件的逻辑结构XML元素n元素的形式:数据内容数据内容n元素中还可以再嵌套别的元素n所有的XML文件都至少包含一个形式良好的根元素。根元素,又称为文件标记,紧跟在XML声明之后,如果该XML文件中还内嵌了DTD,则这个根标记紧跟在DTD之后。根标记必须是一个非空的标记,其中包含了整个文件的数据内容。nXML中开始和结束标记之间的文字称作“字符数据”,而把置标内的标示文字称作“标记”。2002-8-1629XML基础及相关技术XML文件的逻辑结构字符数据n一对标记之间出现的字符数据可以是任何合法的UNICODE字符n为了避免把字符数据和标记中需要用到的一些特殊符号相混淆,XML还提供了一些有用的实体引用。当在字符数据中需要使用这些特殊符号时,我们采用它的实体引用来代替。n在“示例”这个标记中出现文本:“张三”n示例<姓名>张三</姓名>/示例n写为:n字符&“实体引用><&"'2002-8-1630XML基础及相关技术XML文件的逻辑结构标记nXML的标记和HTML的标记在模样上大体相同,除了注释和CDATA部分以外,所有符号“”和符号“”之间的内容都称为标记。其基本形式为:标记名标记名 (属性名(属性名=“=“属性取值属性取值”)*nXML对于标记的语法规定比HTML要严格得多n标记必不可少n大小写有所区分n要有正确的结束标记。n结束标记除了要和开始标记在拼写和大小写上完全相同,还必须在前面加上一个斜杠“/”。如果开始标记是HELLO,结束标记应该写作/HELLO。n当一对标记之间没有任何文本内容时,可以不写结束标记,而在开始标记的最后惯以斜杠“/”来确认。这样的标记称为“空标记”。如:n标记要正确嵌套2002-8-1631XML基础及相关技术XML文件的逻辑结构标记(cont.)n标记命名要合法n标记应该以字母、下划线“_”或冒号“:”开头,后面跟字母、数字、句号“.”、冒号、下划线或连字符“-”,但是中间不能有空格,而且任何标记不能以“xml”起始。另外,最好不要在标记的开头使用冒号,尽管它是合法的,但可能会带来混淆。n在XML1.0标准中允许使用任何长度的标记,不过,现实中的XML处理程序可能会要求标记的长度限制在一定范围内。n有效使用属性n标记中可以包含任意多个属性。在标记中,属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号“=”分隔,且取值用引号引起来。如:n属性命名的规范与标记命名规范大体相似,需要注意有效字母、大小写等一系列问题。不过,在必要的时候,属性中也可以包含空白符,标点和实体引用。需要特别注意的是,在XML中属性的取值必须用引号引起来,但在HTML中这一点并不严格要求。n属性的所有赋值都被看作是字符串。如:圆柱体 半径=“10”高=“13”程序应该能够把字符串“10”和“13”转化为它们所代表的数字。2002-8-1632XML基础及相关技术XML文件的逻辑结构CDATAn在一个特殊的标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当作字符数据看待。CDATA的形式如下:!CDATA CDATA 文本内容文本内容 nCDATA的文本内容中是不能出现字符串“”当你的文本数据中包含大量特殊符号时,你不得不通篇地使用实体引用,把本来很清晰的一段文字搞得乱七八糟。<联系人><姓名>张三</姓名><EMAIL></EMAIL></联系人>为了避免这种不便,你可以把这些字符数据放在一个CDATA数据块中,这样不管它看上去是一个标记还是一个实体引用,这些数据统统被当作字符照单全收。!CDATA张三 2002-8-1633XML基础及相关技术XML文件的逻辑结构注释n在HTML中,注释是用“!-”和“-”引起来的。在XML中,注释的方法完全相同。如:nXML处理器对于注释中的一切内容都会视而不见,注释中出现的标记也一同被忽略。n在XML文件中使用注释时,同样要遵守几个规则n在注释文本中不能出现字符“-”或字符串“-”n不要把注释文本放在标记之中,否则,它就不是一个“形式良好的”XML文件了。类似地,不要把注释文本放在实体声明中,也不要放在XML声明之前。n注释不能被嵌套。2002-8-1634XML基础及相关技术XML文件的逻辑结构处理指示n处理指示是用来给处理XML文件的应用程序提供信息的。也就是说,XML分析器可能对它并不感兴趣,而把这些信息原封不动地传给XML应用程序。然后,这个应用程序来解释这个指示,遵照它所提供的信息进行处理,或者再把它原封不动地传给下一个应用程序。正如我们前面看到的,XML声明就是一个处理指示。n所有的处理指示应该遵循下面的格式:?处理指示名?处理指示名 处理指示信息?处理指示信息?n一个处理指示来指定与这个XML文件配套使用的样式单的类型及文件名:2002-8-1635XML基础及相关技术没有规矩,不成方圆XML语法n什么是“形式良好的”XML文件nXML文件的逻辑结构nXML文件的整体结构n用XML声明作为开头nXML文件的精髓XML元素nXML元素n字符数据n标记nCDATAn注释n处理指示nXML文件的物理结构文件的物理结构n实体实体n实体的两种类型实体的两种类型n实体的使用方式实体的使用方式2002-8-1636XML基础及相关技术XML文件的物理结构实体n从物理结构上讲,XML文件归根结底是由一组“实体”构成的。n实体充当着和别名类似的角色。即,一个简单的实体名称可以用来代表一大段文本内容。象任何计算机别名系统一样,实体引用简化了你的录入工作,因为每当你要使用那一大段文本时,你只须使用它的别名就可以了,处理器会自动为你把这个别名替换为相应的文本。n所有的XML文件都包含了一个“根实体”,又称作“文件实体”。这个实体是由XML本身给出的,无须显式定义就可以使用,它指的其实就是整个文件的内容。假如你为你的信件署名定义了一个实体lettersign,它代表下面这一大段文本:张三 某网络公司销售部门 北京市海淀区中关村88号,100000信件 收件人李四/收件人 主题hello/主题 正文hello!&lettersignlettersign ;/正文/信件2002-8-1637XML基础及相关技术XML文件的物理结构实体的两种类型n一般实体n定义一般实体的格式!ENTITY ENTITY 实体名实体名“文本内容文本内容”n也可以指定一个实体代替一个外部文件的内容,此时要使用SYSTEM这个关键字。n参数实体n参数实体既可以是内部的也可以是外部的。不过,参数实体只用在DTD中。参数实体的格式与一般实体很类似,只不过中间要加上“%”符。!ENTITY%!ENTITY%实体名实体名 文本内容文本内容 !ENTITY lettersign张三某网络公司销售部门北京市海淀区中关村88号,100000!ENTITY lettersignSYSTEM http:/ 2002-8-1638XML基础及相关技术XML文件的物理结构实体的使用方式n实体声明n对于实体的声明应该放在文件类型DOCTYPE中。DOCTYPE一般放在文件头(即XML声明和DTD)之后,XML元素之前。n实体引用n一般实体&实体名;实体名;n参数实体%实体名;实体名;n实体引用的几点规则n在引用XML实体之前,必须已经在XML文件中对此实体进行过声明;n在实体引用中不能出现空格。也就是说,&lettersign;和&letterhead;的用法都会引起错误。n尽管在一个实体中可以再引用其它实体,但是不能出现循环引用。也就是说,一个实体不能引用它自己;同样,也不能出现实体A引用实体B,然后实体B再反过来引用实体A的情况。n实体引用不能在DOCTYPE声明中出现。n实体引用的文本必须是形式良好的XML。具体数据内容2002-8-1639XML基础及相关技术XML文件的物理结构实体的使用方式n实体引用不仅可以出现在字符数据中,还可以出现在标记的属性中。如:n如果在属性中出现实体引用,不但要遵守前面所述的实体引用的种种规则,还要注意以下两点:n在标记属性中不能引用一个外部实体。n引用的文本中不能出现字符“”,否则替换后就不再是一个“形式良好的”XML文件了。!DOCTYPE 联系人列表 张三 A公司&A公司地址;李四 B公司&B公司地址;/地址 王五 B公司&B公司地址;/地址 2002-8-1640XML基础及相关技术提 纲n山重水复疑无路,柳暗花明又一村XML的诞生n没有规矩,不成方圆XML语法n海纳百川,有容乃大海纳百川,有容乃大DTD与与Scheman花想衣裳云想容XML文件的显示n江山如画,一时多少豪杰XML标准体系框架n千帆竟发,百舸争流关于XML的编辑与浏览工具n问苍茫大地,谁主沉浮XML的应用和发展前景2002-8-1641XML基础及相关技术海纳百川,有容乃大DTD与SchemanDTD 的定义的定义nSchema的定义nXML命名空间2002-8-1642XML基础及相关技术DTD的定义nDTD的基本结构的基本结构nDTD引入引入“有效的有效的”XML文件中文件中n内部内部DTDn外部外部DTDn公用公用DTDn定义元素及其后代n元素类型声明n定义元素及其子元素n有顺序的子元素n重复元素n成组元素nOR或n可选子元素n混合内容n空元素n定义元素属性n定义有效的元素属性n属性缺省值n属性类型nCDATA类型n枚举类型nID和IDREFnNMTOKEN和NMTOKENSnNOTATION类型n实体属性类型与参数实体nDublinCoreMetadataDTD2002-8-1643XML基础及相关技术DTD的基本结构DTD引入“有效的”XML文件中n一个“有效的”(valid)文件首先应该是“形式良好”(well-formed)的。还必须遵守文件类型描述DTD(Document Type Definition)中定义的种种规定。nDTD实际上是“元标记”这个概念的产物,它描述了一个置标语言的语法和词汇表,也就是定义了文件的整体结构以及文件的语法。简而言之,DTD规定了一个语法分析器为了解释一个“有效的”XML文件所需要知道的所有规则的细节。n为了说明特定的语法规则,DTD采用了一系列正则式,语法分析器将这些正则式与XML文件内部的数据模式相匹配,从而判别一个文件是否是有效的。n一个“有效的”XML文件就是一个“形式良好的”SGML文件,也就是说,符合DTD中定义的语法是SGML文件的基本要求。从这个意义上说,XML把合法文件的范围扩大了,既包括“有效的”XML,也可包括“形式良好的”XML。2002-8-1644XML基础及相关技术DTD的基本结构内部DTDn最简单的使用DTD的方法是在XML文件的序言部分加入一个DTD描述,加入的位置是紧接在XML处理指示之后。一个包含DTD的XML文件的结构为:n文件体.nclient.xml!DOCTYPE 联系人列表 张三 001 A公司 (010)62345678 五街1234号 北京市 北京 李四 2002-8-1645XML基础及相关技术DTD的基本结构外部DTDn外部DTD的好处是:它可以方便高效地被多个XML文件所共享。当许多组织需要统一它们的数据交换格式时,它们就是通过外部DTD来完成的。n这样做不仅简化了输入工作,还保证当你需要对DTD做出改动时,不用一一去改每个引用了它的XML文件,只要改一个公用的DTD文件就足够了。n引用一个外部DTD,必须修改XML声明和DOCTYPE声明。nnn举例nnn2002-8-1646XML基础及相关技术DTD的基本结构外部DTDnn张三001A公司(010)62345678五街1234号北京市北京100001李四002B公司libbb.org(021)87654321南京路9876号上海上海2000022002-8-1647XML基础及相关技术DTD的基本结构公用DTDnSYSTEM不是引用外部DTD的唯一方法,这个关键字主要用于引用一个作者或组织所编写的众多XML文件中通用的DTD。还存在一种外部DTD,它是一个由权威机构制订的,提供给特定行业或公众使用的DTD。因此,另一个引用外部DTD的办法是使用关键字PUBLIC,引用这一类公开给公众使用的DTD。n当使用关键字PUBLIC进行引用时,这个外部DTD还需要得到一个标识名。引用公共DTD的形式为 !URL2002-8-1648XML基础及相关技术DTD的基本结构公用DTD(cont.)nDTD名称只能包含字母、数字、空格和下面的符号:_%$#()+:=/!*;?。同时,DTD名称还必须符合一些标准的规定。例如,ISO标准的DTD以“ISO”三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。n无论是哪一种情况,开始部分后面都跟着两个斜杠“/”及DTD所有者的名称。在这个名称之后又是两个斜杠“/”,再然后是DTD所描述的文件的类型。最后,在又一对斜杠之后是语言的种类(参见ISO 639)。n2002-8-1649XML基础及相关技术DTD的定义nDTD的基本结构nDTD引入“有效的”XML文件中n内部DTDn外部DTDn公用DTDn定义元素及其后代定义元素及其后代n元素类型声明元素类型声明n定义元素及其子元素定义元素及其子元素n有顺序的子元素有顺序的子元素n重复元素重复元素n成组元素成组元素nOR或或n可选子元素可选子元素n混合内容混合内容n空元素空元素n定义元素属性n定义有效的元素属性n属性缺省值n属性类型nCDATA类型n枚举类型nID和IDREFnNMTOKEN和NMTOKENSnNOTATION类型n实体属性类型与参数实体nDublinCoreMetadataDTD2002-8-1650XML基础及相关技术定义元素及其后代元素类型声明(ETD)nETD不但说明了每个文件中可能存在的元素,给出了元素的名字,而且给出了元素的具体类型。一个XML元素可以为空,也可以是一段纯文本,还可以有若干个子元素,而这些子元素同时又可以有它们的子元素。DTD正是通过元素之间的父子关系,描述了整个文件的结构关系。nETD应该采用如下的结构:!DOCTYPE 联系人列表 张三 2002-8-1651XML基础及相关技术定义元素及其后代元素类型声明(cont.)n注意1.除了根元素外,在定义其它元素时使用关键字ANY都是不好的习惯。一个定义明确的DTD,实际上会使你在书写XML文件时有规可循,方便了你的工作和语法分析器的工作。2.在定义元素时,ETD的顺序是无关紧要的。3.不能对不同的元素使用相同的元素名,即便这些元素的内容、包含的子元素不同也不行,因为它只会引起文件各个元素的混淆,使文件的可读性大打折扣。4.元素名的第一个字母必须是字母、或下划线(_)、或冒号(:),后跟字母、数字、句号(.)、冒号、下划线、连结号(-)的组合,并且不能包含空白符,不能以“xml”开头。5.尽管XML1.0标准允许使用任何长度的文件名,但是实际的XML处理器常常会限制标记名的长度。2002-8-1652XML基础及相关技术定义元素及其后代定义元素及其子元素n元素定义是由它们的元素内容模型(ECM)来描述的,也就是说,是由紧跟元素后面的括号中的内容来定义的。nECM中的内容采取一组正则表达式的形式。元字符定义+出现一次或多次*出现零次或多次?可选,不出现或出现一次()一组要共同匹配的表达式|OR,或,AND,要求严格遵从顺序要求元素A元素B元素C元素列表,无须遵从顺序要求2002-8-1653XML基础及相关技术定义元素及其后代有顺序的子元素n一个元素的各个子元素之间可以以任意顺序出现,也可以强制遵循一定的顺序。n不要求顺序的子元素:用空格分隔子元素n要求顺序的子元素:用逗号“,”分隔两个子元素 张三 张三2002-8-1654XML基础及相关技术定义元素及其后代重复元素 张三 张三2002-8-1655XML基础及相关技术定义元素及其后代成组元素n子元素可以使用括号并为一组。张三 李四 libbb.org 王五 wangccc.org 2002-8-1656XML基础及相关技术定义元素及其后代OR或 张三 张三 12345678 张三 张三 12345678 张三 在一个组中,只允许使用一种连接符(例如“,”或“|”)。2002-8-1657XML基础及相关技术定义元素及其后代可选子元素n 张三 五街1234号 北京市 北京 张三 2002-8-1658XML基础及相关技术定义元素及其后代混合内容!DOCTYPE CONTACTS 张三(010)62345678 这是关于张三的信息 2002-8-1659XML基础及相关技术定义元素及其后代空元素n还有一种情况是,一个元素中不包含任何子元素,也不包含纯文本。n对于这种情况,我们可以定义一个空标记。当然,定义这样一个标记很简单,你只需要使用关键字EMPTYEMPTY就可以了,例如:n这样,在你的XML文件中,就可以使用一个空元素。2002-8-1660XML基础及相关技术DTD的定义nDTD的基本结构nDTD引入“有效的”XML文件中n内部DTDn外部DTDn公用DTDn定义元素及其后代n元素类型声明n定义元素及其子元素n有顺序的子元素n重复元素n成组元素nOR或n可选子元素n混合内容n空元素n定义元素属性定义元素属性n定义有效的元素属性定义有效的元素属性n属性缺省值属性缺省值n属性类型属性类型nCDATA类型类型n枚举类型枚举类型nID和和IDREFnNMTOKEN和和NMTOKENSnNOTATION类型类型n实体属性类型与参数实体实体属性类型与参数实体nDublinCoreMetadataDTD2002-8-1661XML基础及相关技术定义元素属性定义有效的元素属性n n在DTD中定义属性时,我们使用下面的格式:!n元素名是属性所属的元素的名字;属性名是属性的命名;缺省值说明在XML文件中,如果没有特别说明属性的取值,语法分析器默认它具有的取值;属性类型则用来指定该属性是属于十个有效属性类型中的哪种类型。n注意:注意:由于ATTLIST是一个属性的列表,它可以包含很多属性,在实际应用中,一个元素也经常有多个属性。n2002-8-1662XML基础及相关技术定义元素属性属性缺省值n必须赋值的属性REQUIREDn不用提供缺省值。n属性值可有可无的属性IMPLIEDn文法解释器不再强行要求你在XML文件中给该属性赋值,而且也无须在DTD中为该属性提供缺省值。可以说,这是对属性值有无的最低要求,现实中经常用到。n固定取值的属性FIXEDn提供一个缺省值,并且不希望XML文件的编写者把你的缺省值替代掉。n定义缺省值的属性n不使用上面任何一种关键字的话,该种属性就是属于这种类型。对于这种属性,你需要在DTD中为它提供一个缺省值。而在XML文件中可以为该属性给出新的属性值来覆盖事先定义的缺省值,也可以不另外给出属性值,后一种情况下它就默认为采用DTD中给出的缺省值。2002-8-1663XML基础及相关技术定义元素属性属性类型n一个元素属性可以为以下十种类型中的任意一种:nCDATA nEnumerated nID nIDREF nIDREFS nENTITY nENTITIES nNMTOKEN nNMTOKENS nNOTATION 2002-8-1664XML基础及相关技术定义元素属性CDATA类型nCDATA指的是纯文本,即由字符、符号“&”、小于号“”和引号“”组成的字符串。n!DOCTYPE 剧本 我可不这么认为!为什么呢?2002-8-1665XML基础及相关技术定义元素属性枚举类型n属性也可以被描述为一组可接受的取值的列表,XML文件中对属性的赋值将从这个列表中选取一个值。这类属性属于枚举类型ENUMERATED,不过,关键字ENUMERATED是不出现在DTD定义中的。n!DOCTYPE 购物篮 2002-8-1666XML基础及相关技术定义元素属性ID类型nID是用属性值的方式为文件中的某个元素定义唯一标识的方法,它的作用类似于HTML文件中的内部链接。在大多数情况下,ID由处理文件的程序或脚本语言使用。nID的值必须是一个有效的XML名称,它由字母、数字或下划线开始,名字中不能出现空白符。n另外一般而言,不要给ID类型的属性事先指定缺省值,这很容易引起不同的元素具有相同的标识的情况,更不能使用FIXED型的缺省值。此类属性经常使用REQUIRED缺省类型,当然,这也不是必须的。有的应用并不要求每个元素都有自己的标识,所以,也可以使用IMPLIED缺省类型。n!DOCTYPE 联系人列表 张三 李四 libbb.org 2002-8-1667XML基础及相关技术定义元素属性IDREF类型nIDREF类型允许一个元素的属性使用文件中的另一个元素,方法就是把那个元素的ID标识值作为该属性的取值。n!DOCTYPE 联系人列表 张三 李四 2002-8-1668XML基础及相关技术定义元素属性NMTOKEN和NMTOKENSn类型NMTOKEN和NMTOKENS是诸多属性类型中面向处理程序的又一个类型。这两个类型用于指示一个有效的名字。当需要把一个元素和其它的元件,例如一个JAVA类或一个安全算法,相联系时,可以让它们助你一臂之力。n关于元素的定义:授权用户 NMTOKENS#IMPLIEDnXML文件:blah blah blah2002-8-1669XML基础及相关技术定义元素属性NOTATION类型n现实世界中存在着很多无法或不易用XML格式组织的数据,例如图象、声音、影象等