第二章-XML的语法基础课件_第1页
第二章-XML的语法基础课件_第2页
第二章-XML的语法基础课件_第3页
第二章-XML的语法基础课件_第4页
第二章-XML的语法基础课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 XML的语法基础 2.1 XML的语法基础 2.2 XML的文档结构 2.3 名称空间 2.4 语言标识 2.1 XML的语法基础 为了便于讨论,先给出一个XML文档的样本,通过分析,逐渐展开。 数据通信与计算机网络 王震江 高等教育 2000.7 23.9 操作系统 薛智文 中国铁道 2003.6 32.00 2.1 XML的语法基础 这是一个描述图书信息的XML文档。根元素是booklist,下面有若干个子元素book,在 book中有表示具体数据的子元素name、author、press、pubdate、price 五个元素。另外,book元素还包含一个附属于它的属性isbn。2

2、.1.1 结构良好性 结构良好性(well-formedness)是XML规范中特别强调的重要概念,XML文档的书写必须满足“结构良好(well-formed)”的原则。所谓的结构良好的必要条件是: (1) 它总体是一个XML文档。 (2)它满足所有在XML1.0规范中提出的关于结构良好性的约束。 2.1.1 结构良好性 (3) 在XML文档中被直接或间接引用的每一个实体也是结构良好的。 其中关于XML文档的定义如下: 它包含至少一个元素。 有一个叫做根或文档的元素,它不能作为任何其他元素的内容出现。2.1.1 结构良好性 是什么原因使W3C对结构良好性如此重视,以至于在XML1.0规范的开篇

3、之处就讨论结构良好的问题?这是因为,过去几年来,WWW在Internet上取得了巨大成就,但是,用于描写WWW的基本编程语言是HTML。相当数量的人在书写HTML时的不规范性和随意性,使得HTML文件的可读性大大降低,甚至出现混乱的局面,如写标签时不写结束标签,写属性值2.1.1 结构良好性不用引号(”或),不区分大小写等。W3C的专家们期望XML规范是下一代的WWW的主要编程语言和标准,他们不希望几年后,XML的使用也象HTML一样出现任何问题。 所以,把结构良好性写在了XML1.0规范的重要位置,用以强调XML文档中的所有词素和语法必须是定义明确的,结构良好的。2.1.2 XML声明 在例

4、2.1中的第一行出现的是XML规范规定的所有XML文件必须具有的一行,称为XML声明,并规定,这个声明必须写在每一个XML文档的第一行,以标记这是一个XML文档,否则它就不是一个XML文档,并依此来区别于其他文档。1、XML声明 XML声明的格式为:2.1.2 XML声明 version属性 一个简单的XML声明中可以只包含属性version,目前该属性的值可以取1.0,指出该XML文件使用的XML版本。一般情况下,上面格式中可以省去encoding和standalone。XML的解析程序可以正确地得到上面文本的正确结果。对于其它的字符集合,必须事先声明。2022/7/2592.1.2 XML

5、声明 encoding属性 encoding属性规定XML文件采用哪种字符集进行编码,该属性的默认值是“UTF-8” . 注: encoding属性值不同, XML文件保存时的编码要与之对应。 1. 如果XML使用UTF-8编码,那么标记的名字以及标记包含文本内容中就可以使用汉字、日文、英文等,XML解析器就会识别标记的名字并正确解析标记中的文本内容。这时XML文件必须选择“UTF-8”编码来保存 。2. 如果在编写XML文件时只准备使用ASCII字符和汉字, 可以将encoding属性的值设置为“gb2312”。例: 这时XML文件必须使用“ANSI”编码保存 。 3. 如果在编写XML文件

6、时只准备使用ASCII字符,可以将encoding属性的值设置为“ISO-8859-1”。例如: 这时XML文件也必须使用“ANSI”编码保存 。2.1.2 XML声明 【例2.3】字符集为ISO-8859-1的XML文档。 Good morning!【例2.4】字符集为ISO-8859-1的XML文档。 早上好! 要想使用其他字符集,可以如法炮制。实验编辑这些程序,然后用IE浏览器浏览,查看其结果如何?以理解XML的代码集合的正确使用。如果要使用中文字符集,必须有2.1.2 XML声明 encoding = GB2312声明。因为,GB2312中列出了基本的汉字交换标准。如下的字符声明。【例

7、2.5】字符集为GB2312的XML文档。 你好,世界! 请读者用浏览器浏览,看看结果怎样。如果删除encoding = “GB2312”,情况又会怎样?3、standalone属性 独立文档声明(standalone),以XML声明的成分出现,告2.1.2 XML声明 诉文档是否存在一个外部的文档实体或参数实体。即,在XML声明中的standalone 属性用来定义是否存在外部的标记声明。如果不存在外部的标记声明,standalone 取值为“yes”。如果可能存在这类外部标记声明,则取值为“no”。如果不存在外部的标记声明,standalone声明没有意义。如果存在外部标记声明而又没有写明

8、standalone的取值,则系统取值为“no”。2.1.3 XML的元素 1.元素标记 元素标记简称标记(tag)。XML的标记与HTML中的标记一样,所不同的是HTML的标记由HTML规范规定,XML的标记由用户自己规定。 在XML中,标记分为开始标记和结束标记。开始标记由小于符号“”大于符号把标记名括起来。结束标记是在开始标记的小于符号“”后紧跟符号“/”。如上例中的,是开始标记,它们的结束标记分别是,。2.1.3 XML的元素 在开始标记和结束标记中包含的任意字符串称为元素值。除了包含元素值以外,在开始标记和结束标记还可以包含下一级子元素。如,数据通信与计算机网络定义了一个图书书名的元

9、素,元素值是“数据通信与计算机网络”。而包含的就是多个下一级子元素。 标记的一般命名规则要求具有确切含义,如booklist定义了图书列表,author定义了作者元素,press定义了出版社元素等。除此之外,还有如下要求: 首字符是英文、汉字字符或其他字符,后跟数字或其他符号。 2.1.3 XML的元素 严格区分英文字母的大小写。 不能使用XML或xml作为元素名称。 不能独立使用数字作为元素名。 在元素名中可以使用“_”、“.”等符号。 不能使用“、?、/、&、+、*”等符号作为元素名。 为了便于理解上述定义,下面是一些合法和非法的标记名示例。 2.1.3 XML的元素 不合法的元素标记:

10、数字开头 大小写不匹配 大小写不匹配 使用非法字符 高等教育出版社没有结束标记2.1.3 XML的元素 合法的元素标记: 2.1.3 XML的元素 2、元素嵌套 每个XML文档必须有一个且只能有一个称之为“根”(root)的元素,如例2.1中的。其他元素必须写在一对根元素和之间。 元素可以包含值,可以为空值,还可以有下层子元素。 某元素的子元素写在该元素的开始标记之后和结束标记之前,如每一个元素下的所有子元素写在之后和之前,这种结构称为元素嵌套。 2.1.3 XML的元素 元素嵌套子元素,子元素可以嵌套下一级子元素。这种嵌套必须严格。图2.1是几种嵌套情况,在(a)中的元素有两个平级子元素、,

11、、元素书写正确。(b)中元素有两级子元素、,其中又是的子元素,元素书写正确。(c)中元素有、,但、元素交叉嵌套,因此错误。(d)中和是同级元素,但交叉嵌套,因此错误。 2.1.3 XML的元素 (a) (b) (c) (d)图2.1 上述嵌套中(a)(b)正确,(c)(d)错误。2.1.3 XML的元素3、空元素 当元素标记之间没有元素值时,这样的元素叫空元素。如图2.1(a)中的元素、是空元素,但是不是空元素,因为它包含了两个子元素,虽然其子元素为空。 当元素为空值时,其表示可以简化成用“”包括元素名。如:简化成,可以简写成。 对于在XML转换文档中的出现的某些无结束元素的HTML元素,如、

12、,为了满足结构良好性,在XML转换2.1.3 XML的元素程序中使用时应该写成、。这样就保证即可以满足XML的结构良好性要求,又可以在XML应用中使用HMTL中的既定元素。 与HTML一样,XML元素也有属性。为了便于理解XML中的属性,我们先看几个HTML中几个元素的属性。如:、 对于熟悉HTML语法的读者,很容易理解上面两个标签的含义和用法。前者是定义字符的标签,其中color、face、size2.1.4 属性 都是属性分别定义颜色、字体、字大小。后者定义图形,其中src、width、height、alt也是属性。这说明在HTML中大量使用了属性。1. 属性的定义 在XML文档中,属性是

13、用来与元素联系起来的一对“名字-值”,属性的定义不能出现在元素的开始标记和空元素标记之外。元素的属性可以是一个,也可以是多个。当出现多个属性时,每个属性之间用空格分隔。多个属性又叫属性列表,对于一个给定的元素,属性列表是附属于这个元素的属性集合,2.1.4 属性 可以确定这些属性的类型约束,可以为属性提供默认的属性值。属性和属性值之间用“=”号连接,属性值必须用英文的引号(”或)括起来。在例2.1中,每个元素中定义了一个isbn的属性,其取值是每本书的isbn号,其形式是isbn=“7-04-008653-0”。 例2.6是关于服装中衬衫的XML文档,在该文档中为元素定义了currency和u

14、nit两个属性,currency定义了衬衫价格的货币种类是人民币(RMB),unit定义了衬衫价格的货币单位是元(Yuan)。这样的定义容易使人把price元素与货币种类currency和货币单位unit这两个属性关联起来,使之2.1.4 属性 成为一个整体。 【例2.6】关于服装的XML文档 金利来 170/92A 420.00 在XML文档中,属性和元素之间是没有本质差别,例2.6中价格的属性可以分别设计成独立的元素,这并不违反XML的语2.1.4 属性 法规则。如例2.7所示。此时currency和unit这两个原来是price元素的属性,现在成为的子元素,与price元素形成平级关系,

15、这并不违反XML的语法规则。但是这样做,消除了currency和unit这两个元素跟price元素之间的直接关联关系,可以把它们理解成是与其它元素平级的元素,这与原来的设计意图是矛盾的。另外作为独立元素的unit到底是想表示价格的单位还是衬衫的单位,意义就不明确。所以在设计元素和元素属性时,事先应该仔细考虑。2.1.4 属性 【例2.7】把例2.6中price 元素的属性写成元素 金利来 170/92A 420.00 RMB Yuan 2.1.4 属性 2、属性类型 XML属性类型有三种:字符串类型、标记化类型和枚举类型。字符串类型可以取任意的文字串作为值。标记化类型有不同的词法和语义约束。有

16、关属性的定义、使用和说明将在第三章DTD和第四章XML Schema中进行。2.1.5 特殊字符的使用2.1.5特殊字符的使用在XML文档中,所有文本都会被解析器解析。但如果在实际应用中,需要在XML文档中引用”、”&”、”、等特殊符号时该如何解决这些问题?实体应用:在字符数据中需要这些特殊符号时,采用它的实体引用来代替。实体引用必须以&开头,以;结尾。2.1.5特殊字符的使用如: xz表示x小于y,y大于z x&y 表示x与y的连接运算,或表示x和y的逻辑与 xy?x=0:x=yC程序表达式 在XML文档中表示上述表达式时,由于使用了XML 规范规定的保留字符,在系统解析时就会产生错误,得到

17、错误的信息和字符。为了解决这个问题,XML提供了五种预定义实体,在文档中需要表示这些字符数据时,使用这些预定义实体对这几个保留字进行转义。表2.1所示。2.1.5特殊字符的使用实体引用特殊字符意义大于号&和或连接符'单引号“双引号2.1.6处理指令 处理指令允许XML文档包含用于应用程序的指令,简称PI。其格式如下: 处理指令用“”包括起来。从形式上说,就是处理指令,它的作用就是对XML文档进行标识。如下面的样式表转换引用的说明也是处理指令。 2.1.6处理指令 前者是在样式表转换中引入了CSS文档对XML文档进行转换,后者是用XSL对XML文档进行格式转换。2.1.7CDATA节

18、在XML中出现的字符分为可解析的字符数据和不可解析的字符数据CDATA。如下面的程序片段是一段C程序,其功能用来实现在给定字符串的指定位置插入字符。insert(int y10,k,a) int l; if (k10) printf(Error!); else for(l=10;l=k;l-) yl=yl-1; yk=a; 2.1.7CDATA节其中出现了XML规范不允许出现的字符实体,如“”等符号,按照XML规范,这类数据必须经过实体引用转换,才能正确表示出来。如果不使用实体引用,在系统解析时,将出现错误。为了解决这类数据在XML中的表示问题,在XML规范中引入了CDATA类型的数据,用来处

19、理这种表示。 CDATA节的定义格式为: 在CDATA节中,只有“”被识别为标记,所以“”和“&”可以出现在CDATA的文字中,它们不需要使用“”和“&”来换码。2.1.7CDATA节 这样在XML中表示上述程序作为一个代码段,可以写成下面的形式:!CDATAinsert(int y10,k,a) int l; if (k10) printf(Error!); else for(l=10;l=k;l-) yl=yl-1; yk=a; 2.1.7CDATA节 如果要在文本中表示XML文档的片段,也可以用这个方法来实现。如要表示例2.1的某个部分,可以表示成:!CDATA 数据通信与计算机网络 王

20、震江 高等教育 2000.7 CDATA节 这样,在系统解析时,那些包含符号的成分不会作为元素识别,而是作为CDATA数据原样显示出来。 把CDATA写进XML文档时,要为其设计一个包含CDATA节内容的根元素,否则解析器将报告错误。参考图2.1和图2.2。 另外,CDATA节中不允许嵌套。2.1.7CDATA节图2.1 CDATA示例1图2.2 CDATA示例22.1.8注释 与其他所有的程序设计语言一样,XML文档中也可以使用注释。系统在解析注释的时候,不把它当作可解析数据处理,并默认其正确性。注释的格式为: 注释的作用是对XML文档的某些部分进行说明,使文档具有较好的可

21、读性。 注释的书写要注意下面的规则: 注释不能出现在XML文档的第一行。因为XML规范要求,XML的声明必须位于XML文档的第一行。2.1.8 注释 注释可以出现在元素标记(”)外的任何地方 注释不能嵌套注释。例如,正确的注释。 数据通信与计算机网络 .错误的注释:!- -This is a example of embedded comment- -因为使用嵌套,这是一个错误的注释。2.2 XML的文档结构 如图:2.5 XML文档结构。 XML规范规定,XML文档由序言、文档数据和其他三部分构成。如图2.3所示. 其中,序言部分以XML声明开始,然后是DTD声明,名称空间声明,调用转换文本

22、语句行,注释等构成。 XML的数据部分以一个根元素包含的数据文档为主体,根元素内包含所有数据元素、属性、字符串。其他序言XML数据其他图2.5 XML文档结构2.2 XML的文档结构部分是可选项,包含注释和其他非元素标记的组合。 一个典型的XML序言包含如下的语句成分: 上面的语句中,如果仅在单纯XML文档的意义上讲,除了第一行外,其余的都不是必须的,是可以选择的。2.2.1 XML的序言1、DTD 以例2.2为例进行说明。在该程序中,虽然具有XML声明,但它不是一个有效的XML文档,因为,在文档中没有对元素类型进行说明,因而无法验证此文档元素的有效性,所以说它不是一个有效的XML文档。 为了

23、定义文档的有效性,在XML1.0规范中,引入了文档类型声明DTD。 DTD分为内部和外部DTD。内部DTD的定义和用法在例3.16进行了说明。有关内部和外部DTD的内容请参考3.4。2.2.1 XML的序言 2、XML表单 浏览器在解析和显示XML文档时没有附加任何格式信息,所以只要是格式良好的XML文档,浏览器均以根元素的树型结构形式显示出来。 这种显示方法无法满足Web应用,需要引入专门的转换技术对XML文档进行转换,目前主要使用CSS和XSL两种技术。用这两种编写的文档称为XML表单文件,简称XML表单。3、名称空间 名称空间本身不是XML规范包含的内容。引入名称空间的主要原因有两点:当

24、文本中出现不同对象使用相同元素标记2.2.1 XML的序言的情况下,可以消除同名带来的命名冲突,解决浏览器解析时产生名称歧义的问题。 另外,在应用程序调用XML文档数据时,因为有名称空间定义,可以直接使用XML文档中的元素,且不产生任何错误。2.2.2XML数据 数据是XML文档的主体部分,必须有一个根元素开头,所有的数据都包含在这个根元素中。如果XML文档不包含任何内容,这个根元素也必须存在,否则文件是非法的XML文档,也就是说,一个XML文档必须包含一个顶级元素,哪怕它是空,也必须存在,否则该文档将被视为非法的XML文档,这个顶级元素就是根元素。例如: 尽管这个XML文档,除声明外没有任何

25、内容,根元素是空元素,但它是一个合格的XML文档。 2.2.2XML数据 从处理数据的形式上看,XML数据大体分为以数据为中心和以文本为中心两大类。 1、数据为中心 以数据为中心的XML文档,一般具有可以转化为表格形式的数据形态,如例2.1可以用表2.2表示。因此在如何判断XML文档是否以数据为中心,只要看它的数据大体上能否与一个表格相对应。 对于以数据为中心的XML文档,可以把它作为关系数据库中的表使用,每个元素对应数据表的列元素(字段),每一2.2.2 XML数据个包含下一级子元素的元素可以看成是一条记录(如book),而根元素可以当作数据库的表名使用(如booklist)。这样的转换,使

26、人容易想到把XML文档作为数据库的表格看待。2、文本为中心 以文本为中心的XML文档,数据主要是文本,各个文本长短不一,没有结构。 以文本为主是今天Web应用中的主要形式之一,所以,研究文本为主的XML文档与研究以数据为主的XML文档一样的重要。2.3 名称空间 为了说明名称空间,先考查下面的例子。【例2.11】一个关于商品的XML文档 金利来 170/92A 22.00 2004-02-21 李宁 MID 120.00 2003-10-02 2.3.1 名称空间的概念 海尔 台 34英寸 4220.00 在例2.11文档中,有clothes和e_appliances两大类商品,每一种商品都有

27、name、size、 price等名称相同的元素。在使用不同商品的名称相同的元素时,如何区分它们,如裤子的name与衬衫的name如何区别,clothes大类中的shirt中2.3.1 名称空间的概念的name和e_appliances 大类中TV的name 又如何区分?它们是完全不同的对象名称,却具有相同的元素名。这种区分在XML文档的转换、查询,应用程序调用XML文档中是十分重要的。这就是为什么引入名称空间的主要原因。 使用名称空间,你可以定义元素名和属性名,把元素限定在特定的名称空间中,从而消除元素名称的不确定性,并允许支持名称空间的程序正确处理该文档。 XML允许文档设计者和开发者使用自己命名的元素,并以各种方式扩展这些元素。这就是XML的名称空间。2.3.2 声明名称空间 在XML文档中用名称空间声明来声明名称空间,语法如下: xmlns:prefix=”URI”其中,xmlns是关键字,用它来表示从这里开始是XML的名称空间声明。 prefix可以根据需要选择单个字符或者是字符串。如s或shirt,t 或trouser,TV或Television等,都可以作为prefix使用。例如例2.13的名称空间可以在根元素go

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论