XML历史gml(1969)-sgml(1985)-html(1993)-xml(1998)主讲:韩顺平为什么需要XML需求1两个程序间进行数据通信?需求2给一台服务器,做一个配置文件,当服务器程序启动时,去读取它应当监听的端口号、还有连接数据库的用户名和密码.?主讲:韩顺平为什么需要XML需求3-红楼梦关系图:如何让程序去理解?XML技术用于解决什么问题??xmlversion=1.0encoding=UTF-8?贾府贾演贾代化贾敬/贾敬/贾代化/贾演贾源贾代善贾政/贾政/贾代善/贾源/贾府XML语言出现还可以描述上图那种,在现实生活中经常出现的有关系的数据。在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。例如:主讲:韩顺平XML常见应用xml的出现解决了程序间数据传输的问题:比如qq之间的数据传送做案例进行详细讲解,用xml格式来传送数据,具有良好的可读性性,可维护性。xml可以做配置文件xml文件做配置文件可以说非常的普遍,比如我们的tomcat服务器的server.xml,web.xml。在比如我们的struts中的struts-config.xml文件,和hibernate的hibernate.cfg.xml.....xml可以充当小型的数据库xml文件做小型数据库,也是不错的选择,我们程序中可能用到一些经常要人工配置的数据,如果放在数据库中读取不合适(因为你要增加维护数据库工作),则可以考虑直接用xm来做小型数据库【比如msn中保存用户聊天记录就是用xml文件的】,而且直接读取文件显然要比读取数据库快。主讲:韩顺平XML语法一个XML文件分为如下几部分内容:•文档声明•元素•属性•注释•CDATA区、特殊字符•处理指令(processinginstruction)主讲:韩顺平XML语法-文档声明?xmlversion=1.0encoding=“gb2312standalone=yes?XML声明放在XML文档的第一行XML声明由以下几个部分组成:version--文档符合XML1.0规范,我们学习1.0encoding--文档字符编码,比如”gb2312”standalone--文档定义是否独立使用standalone=yes“standalone=“no”默认主讲:韩顺平元素(1)•每个XML文档必须有且只有一个根元素。•根元素是一个完全包括文档中其他所有元素的元素。•根元素的起始标记要放在所有其他元素的起始标记之前。•根元素的结束标记要放在所有其他元素的结束标记之后。主讲:韩顺平元素(2)XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:•包含标签体:a•不含标签体的:a/a,简写为:a/一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套,例如:awelcometob主讲:韩顺平元素(3)对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。第一段:stuxiaoming/stu第二段:stuxiaoming/stu由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,要特别注意。主讲:韩顺平元素(4)——命名规范一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:区分大小写,例如,P和p是两个不同的标记。不能以数字或_(下划线)开头。不能包含空格。名称中间不能包含冒号(:)。主讲:韩顺平属性StudentID=100NameTOM/Name/Student•属性值用双引号()或单引号(')分隔(如果属性值中有',用分隔;有,用'分隔)•一个元素可以有多个属性,它的基本格式为:元素名属性名=属性值•特定的属性名称在同一个元素标记中只能出现一次•属性值不能包括,,&主讲:韩顺平注释!--这是一个注释--注释内容中不要出现--;不要把注释放在标记中间;•Name!--thename--TOM/Name注释不能嵌套;可以在除标记以外的任何地方放注释。主讲:韩顺平注释Xml文件中的注释采用:“!--注释--”格式。注意:•XML声明之前不能有注释•注释不能嵌套,例如:!--大段注释……!--局部注释--……--主讲:韩顺平CDATA节•有些内容可能不想让解析引擎解析执行,而是当作原始内容处理,用于把整段文本解释为纯字符数据而不是标记的情况。包含大量、、&或者字符。CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记。•语法:![CDATA[。。。。。。。。]]•可以输入任意字符(除]]外)•不能嵌套•示例主讲:韩顺平转义字符对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。转义符符号<>&&"''主讲:韩顺平处理指令处理指令,简称PI(processinginstruction)。处理指令用来指挥解析引擎如何解析XML文档内容。例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。?xml-stylesheettype=text/csshref=“my.css?处理指令必须以“?”作为开头,以“?”作为结尾,XML声明语句就是最常见的一种处理指令。主讲:韩顺平格式正规的XML文档-小结遵循如下规则的XML文档称为格式正规的XML文档:语法规范–XML声明语句?xmlversion=1.0encoding=gb2312?–必须有且仅有一个根元素–标记大小写敏感–属性值用引号–标记成对–空标记关闭–元素正确嵌套主讲:韩顺平格式正规的XML文档-小结元素语法–名称中可以包含字母、数字或者其它字符–名称中不能含空格测–名称中不能含冒号(注:冒号留给命名空间使用)测主讲:韩顺平xml文件约束-dtddtd主讲:韩顺平XML约束概述什么是XML约束•在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。为什么需要XML约束问题:myclass.xml-stu-添加面积元素?常用的约束技术•XMLDTD•XMLSchema主讲:韩顺平DTD约束快速入门DTD(DocumentTypeDefinition),全称为文档类型定义。文件清单:myClass.xml?xmlversion=1.0?!DOCTYPE班级SYSTEM“myClass.dtd班级学生名字周星驰/名字年龄23/年龄介绍学习刻苦/介绍/学生学生名字林青霞/名字年龄32/年龄介绍是一个好学生/介绍/学生/班级dtd文件:myClass.dtd!ELEMENT班级(学生+)!ELEMENT学生(名字,年龄,介绍)!ELEMENT名字(#PCDATA)!ELEMENT年龄(#PCDATA)!ELEMENT介绍(#PCDATA)DTD文件应使用UTF-8或Unicode主讲:韩顺平编程校验XML文档正确性(xmlspy)IE5以上浏览器内置了XML解析工具:Microsort.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。创建xml文档解析器对象varxmldoc=newActiveXObject(Microsoft.XMLDOM);开启xml校验xmldoc.validateOnParse=true;装载xml文档xmldoc.load(book.xml);获取错误信息xmldoc.parseError.reason;xmldoc.parseError.line主讲:韩顺平DTD文档的声明及引用DTD文档的声明及引用–内部DTD文档!DOCTYPE根元素[定义内容]–外部DTD文档!DOCTYPE根元素SYSTEMDTD文件路径–内外部DTD文档结合!DOCTYPE根元素SYSTEMDTD文件路径[定义内容]主讲:韩顺平内部dtd?xmlversion='1.0'encoding='gb2312'?!DOCTYPEpoem[----------------根元素的名称!ELEMENTpoem(author,title,content)---------------------子元素的名称及顺序!ELEMENTauthor(#PCDATA)------------------子元素的数据类型!ELEMENTtitle(#PCDATA)!ELEMENTcontent(#PCDATA)]------------------------结束标签poemauthor王维/authortitle鹿柴/titlecontent空山不见人,但闻人语声.返景入深林,复照青苔上./content/poem注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与数据类型之间也要有空格。内部DTD示例主讲:韩顺平外部dtd?xmlversion='1.0'encoding='gb2312'?!DOCTYPEpoemSYSTEMex2.dtdpoemauthor王维/authortitle鹿柴/titlecontent空山不见人,但闻人语声.返景入深林,复照青苔上./content/poem?xmlversion=1.0encoding=gb2312?!ELEMENTpoem(author,title,content)!ELEMENTauthor(#PCDATA)!ELEMENTtitle(#PCDATA)!ELEMENTcontent(#PCDATA)外部DTD示例主讲:韩顺平引用DTD约束XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:•当引用的文件在本地时,采用如下方式:!DOCTYPE文档根结点SYSTEMDTD文件的URL例如:!DOCTYPE书架SYSTEM“book.dtd”。•当引用的文件是一个公共的文件时,采用如下方式:!DOCTYPE文档根结点PUBLICDTD名称DTD文件的URL例如:!DOCTYPEweb-appPUBLIC-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN主讲:韩顺平DTD元素(1)语法!ELEMENTNAMECONTENT关键字元素名称EMPTY-该元素不能包含子元素和文本,但可以有属性-(空元素)ANY-该元素可以包含任何在DTD中定义的元素内容#PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素其它类型(组合)元素类型(大写)主讲:韩顺平dtd元素(2)EMPTY示例--空元素!ELEMENT人EMPTY家庭人名字=皮诺曹性别=男年龄=6//家庭家庭人皮诺曹/人人大人皮诺曹爸爸/大人/人/家庭√×主讲:韩顺平dtd元素(3)ANY示例!ELEMENT人ANY家庭人皮诺曹/人人大人