1、第二章 XML语法规则,XML技术基础,主讲:蔡体健,回顾,XML简介及发展历史; 理解XML与HTML的关系; 了解XML的进一步认识; 了解XML的技术规范;XML解析器、浏览器及编辑软件 XML文档的编写,本章目标,XML标记语法 XML文档组成 元素(element) 属性(attribute) 文本(PCDATA-parsed character data) 注释(comment) 处理指令(PI-processing instruction) DOCTYPE 实体(ENTITIES) CDATA(character data) 小结,标记语言的基本概念,标记语言的基本特点:在表示数
2、据内容的基础上,插入各种具有明确含义的标记,以起到对数据内容进行解释、说明、限制等作用。 标记的表示方法:,一般成对使用。 yahoo 标记的命名规则 名称的开头是字母或下划线“_”; 标记名称中不能有空格; 名称的字符串只能包含英文字母、数字、“_”、“-”、“.”等字符。,标记的使用规则,XML文档必须具有根标记且根标记必须唯一 XML文档中的第一个元素就是根元素。 开始标记和结束标记需配对使用 This is a paragraph 【HTML】 This is another paragraph【XML】 标记不能交错使用,所有的XML元素必须合理包含 This text is bol
3、d and italic 【HTML】 This text is bold and italic 【XML】,标记的使用规则,XML标记都是大小写敏感的; This is incorrect This is correct 空标记的使用 空标记指的是标记只有开始没有结束,又称为孤立标记 形式:属性值必须使用引号,标记的使用规则,两个基本的概念 1,格式良好的 XML文档 符合语法的XML文档称为结构良好的XML文档 。 2,有效XML文档 有效XML文档:内容结构严格遵守它自身的标记说明,能通过自身的语法检查;通过DTD验证的XML文档称为有效的XML文档 。 格式良好的XML文档与有效的XM
4、L文档的区别? 有效地XML文档肯定是格式良好的XML文档。反过来,一个格式良好的XML文档不一定是有效的XML文档。有效的XML文档遵守DTD或Schema定义的规则。,返回目标,一个完整的XML实例,李华男1978.9.1292此学生爱好编程,以下是它编的代码function f1(a,b) if (name=“cai“ C#,根元素,元素,注释,文档 类型 声明,XML声明,文本,预处理指令,CDATA,实体,返回目标,XML声明,XML声明一般是XML文档的第一行第一个字符 XML声明由以下几个部分组成: version - -文档符合XML1.0规范,现在只有1.0 是必须定义的部分
5、; encoding - -文档字符编码,默认为“UTF-8“ 还可以定义为“GB2312”等; 当使用UTF-8时,XML文档可以使用中文、日文、英文等; 当使用GB2312时,XML文档可以使用中文和ASCII字符;standalone - -是否需要从其他外部资源获得自定义标记的说明,并检查XML文档的有效性。 standalone=“yes”(不需要外部文档) standalone=“no”(缺省),返回实例,处理指令PI,语法: 或 目标命名: 名称必须以字母、下划线或冒号开头; 名称可以包括字母、下划线、冒号、数字、横线和句号; 处理指令PI用于将XML文档与XML应用程序联系起来
6、,用来向XML应用程序传递信息。 样式表处理指令 这个处理指令必须出现在序言部分,在根元素之前。type=“text/css“ 或者 type=“text/xsl“,传递的信息,应用程序的名字,返回实例,注释,注释不能出现在声明之前; 不要把注释放在标记中间; TOM 注释内容中不要出现-; 注释不能嵌套; 可以在除以上限制以外的任何地方放注释。 注释中的内容在解析时会被忽略;,返回实例,文档类型声明,文档类型定义(DTD)是用来定义XML文档数据结构; 文档类型声明是用来声明文档类型定义;文档类型声明必须包括或引用文档类型定义; 文档类型声明使用DOCTYPE标记声明DTD ;DTD的分类:
7、 内部DTD子集、外部DTD子集,一个XML文档只有一个DTD声明,声明内部DTD子集,例如:李亮男1978.2.5 ,内部DTD子集通常声明语法:,Standalone=?,声明外部DTD子集,例:,该DTD是私有的,该DTD是公有的,1:,声明语法:,Standalone=?,将上一个例题由内部DTD改为外部DTD,文档类型声明(续),一个XML文档可以同时拥有内部DTD和外部DTD子集,语法: 当同时拥有外部和内部子集,若这两者出现矛盾时,不同的解析器有不同的策略。一般以内部DTD子集为准。,文档类型声明(续),URI、URL、URN的关系 1、URI统一资源标识符是所有名称/地址的一般
8、集合,它们是指向资源的简短字符串。 2、URL统一资源定位符的结构:协议-域名-路径-文件名 URL是URI模式的集合,是URI的子集,它显示的说明怎样访问Internet上的资源。 3、URN统一资源名称,是一个持久、可用的URI,返回实例,元素,XML技术基础.,开始标记,结束标记,内容,空元素TITLE,空元素TITLE,元素(续),XML元素是可以扩展的,它们之间有关联。 XML元素的内容 XML元素有简单的命名规则 XML的根元素 每个XML文档必须有且只有一个根元素。 根元素是一个完全包括文档中其他所有元素的元素。,返回实例,元素(续),元素是可以扩展的,以携带更多的信息 XML便
9、条例子: 全体同学Mike请大家学好XML,因为它有用:P,元素(续),让我们来设想一个能够读取此XML文档的并能解读其中XML元素(, , 和)的软件,可能的输出如下:MESSAGE To: 全体同学 From: Mike 请大家学好XML,因为它有用:P,元素(续),我们再来设想,如果便条的作者在这个XML文档中加入一些额外的信息,如下所示:2005-02-24 全体同学 Mike 注意哟 请大家学好XML,因为它有用:P,元素(续),那么原来的应用程序会中断或者崩溃么?,不会。应用程序仍然会正确的解读, , 和 等元素,并且产生同样的输出。,元素(续),XML文档是可以扩展的!,返回到元
10、素,元素(续),元素之间的关系:子元素/父元素、祖先/后代,设想有这样一本书: 署名: XML 指南 第一章: XML入门简介什么是HTML 什么是XML 第二章: XML语法XML元素必须有结束标记 XML元素必须正确的嵌套,元素(续),我们可以用XML文档来描述这本书: XML 指南 XML入门简介什么是HTML 什么是XML XML语法 XML元素必须有结束标记 XML元素必须正确的嵌套 ,返回到元素,元素(续),XML元素的内容 : 元素内容的类型:嵌套元素/字符数据/实体引用/ CDATA节/处理指令/注释 有三类XML元素的内容: 混合内容 简单内容 空内容,返回到元素,元素(续)
11、,XML元素命名与Java、C的命名规则类似: 元素名必须是以字母、下划线开始的字符串; 元素名可以包含字母、数字、连字符、下划线、句号。 元素的名字不能以XML(或者xml,Xml,xMl.)开头。 元素的名字不能包含空格。 应该使元素的名字具有可读性 。XML文档往往都对应着数据表,我们应该尽量让数据库中的字段的命名和相应的XML文档中的元素命名保持一致,这样可以方便数据变换。 在XML元素命名中不要使用“:“,因为XML命名空间需要用到这个十分特殊的字符。,返回到元素,属性,属性值用双引号(“)或单引号()分隔(如果属性值中有,用”分隔;有“,用分隔) 一个元素可以有多个属性,它的基本格
12、式为: 特定的属性名称在同一个元素标记中只能出现一次 属性值不能包括,如果需要用则应用替代符; 属性只能包含在开始标记中。 属性的命名规则同元素命名。,属性与子元素的有关问题,属性的表达方式:TOM子元素的表达方式:100TOM ,属性与子元素的有关问题(续),一般来说子元素可以完全代替属性。 要采用子元素的情况: 一个属性不能包含子属性,但子元素可以包含自己的子元素。故对复杂的信息,要采用复合的子元素来说明。 若元素的开始标记中包含过多的属性,造成整个开始标记过长而降低程序的可读性,则可以考虑使用子元素代替属性。 属性不容易扩展。 属性不能够描述文档结构(子元素可以)。 属性很难被程序代码处
13、理。 属性值很难通过DTD进行测试。 但属性很简洁,有很好的可读性,如果使用过多的子元素会降低可读性。,属性(续), 这样对不对? 这样好不好?,属性(续),Tove Jani 1299Reminder Dont forget me this weekend! ,属性(续),结论: 与元素关系紧密的数据常以属性的方式存储,而数据本身应该以元素的形式存储。,返回实例,实体,概念:? 指代其他复杂的结构, 可以避免重复的输入 两步操作:声明和引用 分类: 内嵌替代符(预定义实体) 一般实体:指代文本、文件等 参数实体:指代数据类型的定义 (留到后续章节),文本、文件、二进制数据等,Visual Basic C#,