300 likes | 421 Views
第二十一课 :XML 基础. 李红蕾 周甫. 本章的主要内容. XML 的概念 定义 XML 文档 命名空间( Naming Space ) XML 文档规则 DTD SCHEMA 样式表( XSL ). XML 的概念.
E N D
第二十一课:XML基础 李红蕾 周甫
本章的主要内容 • XML的概念 • 定义XML文档 • 命名空间(Naming Space) • XML 文档规则 • DTD • SCHEMA • 样式表(XSL)
XML的概念 • XML,称为可扩展标记语言(Extensible Markup Language),用来创建自定义标记的标记语言。它由万维网协会(W3C)创建,用来克服 HTML(即超文本标记语言(Hypertext Markup Language),它是所有网页的基础)的局限。和 HTML 一样,XML 基于 SGML ― 标准通用标记语言(Standard Generalized Markup Language)。XML 是为 Web 设计的。 • XML是以数据为中心的,用来标记数据,说明数据是什么的。
XML的概念 应用领域为: • 信息存储和交换领域,类似于数据管理系统,来存储数据。这种数据处理与硬件,软件没有太大的关系,就是一个文本文件,具有可移植性。处理XML数据的时候,通过JAVA代码写的解析器就可以存取XML数据。 • 在J2EE服务器用的比较多,在服务器端通过XML文件来进行处理数据业务。配置文件几乎全是XML文件。在EJB,Hibernate等JAVA热门技术领域,XML的应用更加重要。
XML的概念 XML与HTML相同点: • XML与HTML都是基于文本的标记语言。 XML与HTML差别: • 在功能上最大的区别就是XML是标识数据的,HTML是显示数据的。 • 在内容上的最大的区别是HTML里面的标记(markup)都是定义好的,XML里面的标记都是自定义的。
比较html和xml片断: Html: <p> <b>张三</b> <br>男 <br>西安电子科技大学:电子信息工程 </p> XML: <person> <name>张三</name> <sex>男</sex> <daxue>西安电子科技大学</daxue> <zhuanye>电子信息工程</zhuanye> </person>
定义XML文档 有三个通用术语用来描述XML文档的组成部分:标记,元素和属性。 • 标记是左尖括号(<)和右尖括号(>)之间的文本。有开始标记(例如:<zhuanye>)和结束标记(例如:</zhuanye>)。 • 元素是开始标记,结束标记以及位于二者之间的所有内容。在上面的样本中,<person>元素包含四个子元素<name>,<sex>,<daxue>,<zhuanye>. • 属性是一个元素的开始标记中的名称-值对。如: <tizhong danwei='kg'>80</tizhong> danwei 是<tizhong>元素的属性。
定义XML文档 定义XML基本语法要求: • XML文档必须包含在一个单一元素中(只有一个根元素)。 • XML元素不能重叠。 • 不能省去任何结束标记。 • 空元素: • 元素是区分大小写的 • 属性必须有值 • 属性值必须用引号括起.属性值可以用单引号括起,也可以用双引号括起,但是要始终保持一致 . • 可以使用实体.如:实体"代表双引号,实体'代表单引号。
定义XML文档 XML声明: 大多数XML文档以XML声明作为开始,它向解析器提供了关于文档的基本信息。建议使用XML声明,但它不是必需的。如果有的话,那么它一定是文档的第一样东西。如下所示: <?xml version="1.0" encoding="gb2312" standalone="no"?> <?xml version="1.1" encoding="utf-8" ?> 声明最多可以包含三个名称-值对。 • version是使用的XML版本;目前最新版本为1.1 • encoding是该文档所使用的字符集。如没有指定encoding,XML解析器会假定字符在utf-8字符集中,这是一个几乎支持世界上所有语言的字符和象形文字的unicode标准。 • standalone(可以是yes或no)定义了是否可以在不读取任何其它文件的情况下处理该文档。因为standalone="no"是缺省值,所以您很少会在XML声明中看到standalone。
定义XML文档 注释 可以出现在文档的任何位置;它们甚至可以出现在根元素的前面或后面。注释以<!-- 开始,以 --> 结束。 处理指令 XML文件还可以包含处理指令(PI Processing Instruction),这些指令可以将命令或信息传给正在处理XML数据的应用。通常它用来传递信息给解析器的下游程序。一般写法如下: <?xml:stylesheet href="style.css" type="text/css"?>
命名空间(Naming Space) XML 命名空间提供了一种避免元素命名冲突的方法。 命名冲突 因为XML文档中使用的元素不是固定的,那么两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生。而这种情况又往往会导致命名冲突。请看下面两个例子 这个 XML 文档在table元素中携带了水果的信息: <table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> 这个 XML 文档在table元素中携带了桌子的信息(家具,不能吃的哦): <table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table> 如果上面两个XML文档片断碰巧在一起使用的话,那么将会出现命名冲突的情况。因为这两个片断都包含了<table>元素,而这两个table元素的定义与所包含的内容又各不相同。
命名空间(Naming Space) 使用前缀解决命名冲突问题 下面的XML文档在table元素中携带了信息: <h:table> <h:tr> <h:td>Apples</h:td><h:td>Bananas</h:td> </h:tr> </h:table> 下面的XML文档携带了家具table的信息: <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> 现在已经没有元素命名冲突的问题了,因为这两个文档对各自的table元素使用了不同的前缀,table元素在两个文档中分别是(<h:table> 和<f:table>)。通过使用前缀,我们创建了两个不同的table元素。
命名空间(Naming Space) 使用命名空间 下面的XML文档在table元素中携带了信息: <h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> 下面的XML文档携带了家具table的信息: <f:table xmlns:f="http://www.w3s.com/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> 在上面两个例子中除了使用前缀外,两个table元素都使用了xmlns属性,使元素和不同的命名空间关联到一起。
命名空间(Naming Space) 命名空间属性 命名空间属性一般放置在元素的开始标记处,其使用语法如下所示: xmlns:namespace-prefix="namespace" 在上面的例子中,命名空间定义了一个Internet 地址: xmlns:f="http://www.w3s.com/furniture" W3C 命名规范声明命名空间本身就是一个统一资源标示符,Uniform Resource Identifier (URI)。 当我们在元素的开始标记处使用命名空间时,该元素所有的子元素都将通过一个前缀与同一个命名空间相互关联。 使用命名空间 在后面讲SCHEMA和XSTL的时候会使用.
XML 文档规则 XML 文档规则是用来规定XML文档有那些标记组成,标记的多少,顺序,属性等方面的内容。也就是规定XML的格式及内容。目的是为了解析器解析该XML文档提供方便。 XML的文档规则有两种: DTD和XML Schema DTD(Document Type Definition)文档类型定义 DTD定义可以在XML文档中出现的元素,这些元素出现的次序,它们可以如何相互嵌套以及XML文档结构的其它详细信息。 XML Schema 模式可以定义您能在DTD中使用的所有文档结构,还可以定义数据类型和比DTD更复杂的规则。
XML 文档规则 有了XML文档规则之后,XML 文档可以分为三个类型: • 格式良好的:满足XML的基本的语法特点,但是不遵守DTD或者XML Schema。 • 有效的文档:即满足了XML的基本的语法特点,又遵守DTD或者 XML Schema。 • 无效的文档:不满足XML的基本的语法特点。或者该文档不遵守DTD或者XML Schema
XML 文档规则 DTD DTD可以包含在XML文档中,也可以独立为一个文件。一个符合DTD验证的XML文档是有效的文档。 请看下例:(student.dtd) <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT students (student*)> <!ELEMENT student (name,age,address,phone?)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ATTLIST age xusui CDATA #IMPLIED>
XML 文档规则 DTD 下面的XML文档是满足上面DTD的文档: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE students SYSTEM "D:\java\xml\student.dtd"> <students> <student> <name>andy</name> <age>49</age> <address>luohu luohukejidasha</address> </student> <student> <name>goudan</name> <age xusui="当年减出生年加1">28</age> <address>shanxi xi an</address> <phone>02988755660</phone> </student> </students>
XML 文档规则 DTD ATTLIST是一个XML语言的保留关键字,ElementName表示元素的名称,它相当于程序设计语言中变量的名称。一个元素可以包含多个属性,一个属性由三部分构成:AttributeName,Type和Default。AttributeName表示该属性的名字,Type表明该属性的类型,Default表明该属性的特点。 Default属性特点可以有四种形式:#REQUIRED,#IMPLIED,#FIXED value,Defaultvalue. (详细资料看对应的word讲义) 如: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT family (person+)> <!ELEMENT person EMPTY> <!ATTLIST person relID ID #REQUIRED parentID IDREFS #IMPLIED name CDATA #REQUIRED >
XML 文档规则 DTD 元素的定义语法为:<!ELEMENT NAME CONTENT> ELEMENT是XML语言的关键字,NAME表示元素的名称,CONTENT表示元素的类型。它指定了元素起始标记和结束标记之间允许包含的东西。CONTENT 的值 详见对应的word的文档.
XML 文档规则 DTD 有时我们还会在DTD中遇到一些实体的定义,一般分为以下两种情况: 内部实体: <!ENTITY texing "jdakdjfaldlfldsafdfdslkfdsa"〉 外部实体: <!ENTITY texing SYSTEM "http://www.5itjob.com/zhaosheng.xml"> 它们在XML文档中的使用是统一的: 〈computer〉&texing; </computer> 例: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT shenzhen (nanshan,luohu)> <!ELEMENT nanshan (#PCDATA)> <!ATTLIST nanshan mianji CDATA #REQUIRED> <!ELEMENT luohu (#PCDATA)> <!ATTLIST luohu mianji CDATA #REQUIRED> <!ENTITY miaoshu "shen zhen de zui hao de qu">
XML Schema XML Schema 上面我们讨论了用DTD来验证XML文档,虽然DTD胜任对XML文档结构的验证,但是它有很多局限。为此,微软提出了Schema的方案来改进DTD。Schema从字面意义上来说,可以翻译成架构,它的基本意思是为XML文档制定一种模式。Schema相对于DTD的明显好处是XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法。这就方便了用户和开发者,因为可以使用相同的工具来处理XML Schema和其他XML信息,而不必专门为Schema使用特殊的工具。Schema简单易懂,懂得XML语法规则的人都可以立刻理解它。Schema的概念提出已久,但W3C的标准最近才出来,相应的应用支持尚未完善,但采用Schema已成为XML发展的一个趋势。 如下面备注里的例子:
XML Schema Schema和DTD的区别: XML从SGML中继承了DTD,并用它来定义内容的模式,验证和组织元素。同时,它也有很多局限,如下所述(Schema的详细介绍参看word文档) • DTD不遵守XML语法; • DTD不可扩展; • DTD不支持命名空间的应用; • DTD没有提供强大的数据类型支持,只能表示很简单的数据类型。 • Schema完全克服了这些弱点,使得基于Web的应用系统交换XML数据更为容易。下面是它所展现的一些新特性: • Schema完全基于XML语法,不需要再学习特殊的语法; • Schema能用处理XML文档的工具处理,而不需要特殊的工具; • Schema大大扩充了数据类型,支持boolean,number,date and times,URI,integer,decimal number 等等 • Schema支持原型,也就是元素的继承。如:我们定义了一个"狗"数据类型,然后可以根据它产生"狼狗"和"纯狗"两种数据类型; • Schema支持属性组。我们一般声明一些公共属性,然后可以应用于所有的元素,属性组允许把元素,属性关系放于外部定义,组合; • 开放性。原来的DTD只能有一个DTD应用于一个XML文档,现在可以有多个Schema运用于一个XML文档。
样式表(XSL) XML是一种程序交换原始数据的简单而标准的方法,然而基于XML的数据本身并不包含数据显示的信息。为了使数据便于阅读理解,我们需要将信息更好地显示。类似于MVC模式,XML文档是M的部分,样式表就是V的部分,也就是说,同一个XML文档可以有多个显示效果(样式表)。样式表就是这样一种为XML文档"化妆"的文档,它是一种专门描述结构文档表现方式的文档,即可以描述这些文档如何在屏幕上显示,也可以描述它们的打印效果,甚至声音效果。使用样式表定义XML文档数据的显示方式,将XML数据与其表达形式分离的做法符合业界提倡的数据和表示层分开的思想(MVC)。这样一来,XML格式文档不会重蹈某些HTML文档(以显示数据为主)结构混杂,内容繁乱的覆辙,XML的编写者也可以集中精力于数据本身,而不受显示方式的细枝末节的影响。不仅如此,样式表还带来另一个好处,即定义不同的样式表可以使相同的数据呈现不同的显示外观,从而适合于不同应用,甚至能够在不同的显示设备上显示。这样,XML数据就可以得到最大程度上的重用性,满足不同的应用需求。迄今为止,W3C(WWW标准化组织)已经给出了两种样式表语言的推荐标准:一种是级联样式表CSS(Cascading Style Sheets),另一种是可扩展样式表语言XSL(eXtensible Stylesheet Language)。下面,我们就来讲述这两种样式表。
样式表(XSL) CSS样式表 级联样式表CSS是一种样式描述规则,是一种针对HTML而提出的样式表语言,现在同样可以很好地应用与描述XML文档的显示。利用CSS,我们可以定义HTML或XML文档中元素的显示效果,包括元素的位置,颜色,背景,边框,字体,排版格式等等。 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="test.css"?> <person> <name>andy</name> <age>49</age> <address>中国 香港 铜锣弯</address> </person> 我们定义显示上面XML文档的CSS样式表(test.css),如下备注.
样式表(XSL) XSL样式表 XSL是一种用来转换XML文档的样式表,它包含转换和格式化XML文档的规则。XSL在转换XML文档时分为明显的两个过程:首先转换文档结构,然后将文档格式化输出: XSL样式表运行的详细步骤,参看相应的word文档.
样式表(XSL) XSL样式表 为了让大家能够对XSL有一个感性认识,并很快地掌握它的精髓,我们先看一个简单例子。通过剖析这个例子,来掌握XSL的基本结构和一些基本语法。请看备注里的XML文档和相应的XSL:
样式表(XSL) XSL样式表 循环判断语句<xsl:for-each> 在XML文档中,如果存在两条以上的数据,必须使用<xsl:for-each >元素指定上层的节点元素,再用<xsl:value-of >设定要输出的内容,才能显示整个XML文档数据。这种循环结构能够遍历整个结果集合,而不必针对每一条结果都单独书写转换规则。它的标准语法格式为: <xsl:for-each select="student" > …. </xsl:for-each> 条件判断语句<xsl:if> <xsl:if>语句是简单地对条件进行判断,结果为真就执行条件内部的规则,因此可以把if条件与简单的布尔表达式联合使用。 <xsl:if>有三种不同的用法,如果要用元素的名称作为匹配条件,语法是: <xsl:if test="元素名称" > 请看备注里的例子:
内容总结 • 会写XML文档 • 理解XML命名空间概念 • 掌握DTD,SCHEMA的用法
独立实践 • 写一个关于学生课程信息的DTD和SHEMA文档 • 根据上面的DTD,SCHEMA文档写出XML文档,并定义XSL显示该XML • 写一个数据库连接的DTD和SHEMA文档 • 根据数据库连接的DTD和SHEMA文档,写出XML文档,为下一章解析XML,创建数据库连接做准备