电子商务第3章xmlnew.ppt

上传人:小飞机 文档编号:6390770 上传时间:2023-10-26 格式:PPT 页数:152 大小:619KB
返回 下载 相关 举报
电子商务第3章xmlnew.ppt_第1页
第1页 / 共152页
电子商务第3章xmlnew.ppt_第2页
第2页 / 共152页
电子商务第3章xmlnew.ppt_第3页
第3页 / 共152页
电子商务第3章xmlnew.ppt_第4页
第4页 / 共152页
电子商务第3章xmlnew.ppt_第5页
第5页 / 共152页
点击查看更多>>
资源描述

《电子商务第3章xmlnew.ppt》由会员分享,可在线阅读,更多相关《电子商务第3章xmlnew.ppt(152页珍藏版)》请在三一办公上搜索。

1、第3章 标记语言与XML技术,XML 概论和基本语法XML 名字空间DTD XML SchemaXSLT,XML概论和基本语法,XML(Extensible Markup Language),即可扩展标记语言(W3C,1998年),一种可以定义自己的标签的元标记语言,也就是说它没有一套固定的标签和元素,所以可以用来定义其他的标记规范。XML非常灵活,可用在各种网站、电子数据交换、语音邮件、远程程序调用甚至程序配置文件和操作系统中,等等,1.什么是XML,XML概论,HTML和XML的比较,XML语法严格:XML提供了一套语法来规范标签的构成和放置,以及什么是合法的元素、如何为元素设置属性等。符

2、合这种语法的XML文档称为“结构良好的”(well-formed)。这种结构良好的XML文档能被XML解析器(parser)阅读和处理,而非结构良好的XML文档将被解析器拒绝。,2XML不是编程语言 XML本身只能用来描述文档的内容和结构。注意:不要用浏览器去显示自己编写的没有相应XSLT文档的XML文档。3.XML数据格式特点 XML具有自ASCII文本文件以来最灵活最便携的文档格式,它提供了跨平台的数据格式,而且这种数据格式非常简单、直观和结构良好。XML不是为某种特殊的平台而设计的。,4.XML如何工作 编辑工具:通用文本编辑器如Emacs、MS Notepad、jEdit 专用的编辑器

3、如XMLSPY、Polo。处理过程:解析器将XML文档分解成个体的元素、属性等片段供上层程序(网络浏览器、数据库、文字处理器、绘图程序、电子表单、用户自编程序)处理。,5XML技术内容,(1)XML1.0。XML核心内容,对XML基本语法进行了定义,说明了什么是结构良好的XML文档,并定义了DTD。(2)DTD、XML Schema、DSD。DTD(Document Type Definition)即是“文档类型定义”,对XML文档结构进行简单规范(包括其中的元素、元素的属性)。DTD简单灵活,但本身不用XML语法,对数据类型没有精确规范。XML Schema提供了对数据类型进行严格定义的机制

4、,而且使用XML语法,但相对于DTD,显得较为复杂。,(3)Namespaces。Namespaces,即名字空间,是为了区分具有相同名称却有不同意思或属于不同XML应用的元素和属性。(4)XLink、XPointer、XPath。(5)XSL(XSL-FO,XSLT)。XSL(eXtensible Stylesheet Language),即可扩展式样单语言,分为两部分:XSL Tansformations(XSLT)和XSL Formatting Objects(XSL-FO)。XSLT是一种XML应用,它提供将一种XML文档转换成另一种XML文档的机制。XSL-FO是另一种XML应用,它

5、精确的描述页面的布局,简单的说,即如何按XSL-FO的约定在页面上显示XML文档。,(6)XInclude。为了支持模块化和重用,XInclude方便了在XML文档中包含别的XML文档。目前很多XInclude处理器支持整篇文档的包含,但不支持基于XPointer的包含。(7)XQuery。(8)SAX、DOM、JDOM。,XML基本语法,Bill Davenport 108 Street Chengdu Sichuan,一个简单的例子,以上例子中,其标签都被赋予了实际的意思,显然这样便于人和机器的理解。这段XML具有如上图树型结构,图中每个分支叫一个“节点(node)”。,XML文档的基本内

6、容,主要包括元素,标签,字符数据和属性,以及XML声明、处理指令、注释、实体引用、CDATA部分 1.元素,标签,字符数据和属性(1)标签(Tags)是尖括弧“”之间的文字。标签在XML中成对出现,分为起始标签和结束标签。如上述例子中的和。在XML中,标签是分大小写的。,(2)元素(Elements)是由起始标签、结束标签和任何位于起始标签和结束标签之间的内容构成,按其结构位置,分为根元素、父(parents)元素、子(children)元素、兄弟(siblings)元素。注意:1)W3C规定,一个父元素可以有多个子元素,但一个子元素只可以有一个父元素。2)根元素唯一性,根元素没有父元素。3)

7、空元素即不含任何子元素或字符数据的元素,在XML文档中可写为:或者,(3)字符数据(Character Data)包含于元素中的文字内容;位于元素中的任何空白文字;属性值也是字符数据(4)属性(Attributes)元素可以有一个或多个属性。属性是由“名字-值”组成,包含在元素的起始标签中。属性名和值由等号“=”和可选的空白相连。属性值必须包含在双引号或单引号中,,2.XML名字(XML Name)XML名字主要用来规范XML元素名和属性名的命名。命名规则:1)XML名字可以包含26个大写和小写英文字母,0-9十个数字,也可包含非英文字母和数字,如、,以及汉字。同时还可包含三种英文符号:“-”

8、、“_”和“.”。2)不能使用如“”、“”、“$”、“”、“%”、“,”等符号,冒号“:”可以使用,但被保留作为名字空间专用。,3)严格意义上,XML名字也不能包括任何空白字符,如空格、空行等。4)XML名字只能以字母、字符和英文下划线(underscore)“_”开头,但长度不限。,例:,下面是合法的XML名字:Davenport105 River Road 9/8/2004 report6001 0086 28 87748559 电子商务技术下面是非法的XML名字:DavenportDavenport105 River Road7/23/2001 report6001,3.XML声明(de

9、claration)XML文档应该(但不是必须)以声明开始。XML声明包括version,standalone和encoding 三个属性,其中version是必须的,standalone和encoding是可选的。例:E-Commerce Technology,(1)encoding。encoding属性指明了XML文档编码标准。XML文档的默认编码标准是UTF-8,但XML文档支持多种编码标准,如ASCII、ISO-8859-1、Unicode、GB2312 等。(2)standalone。standalone属性指明了XML文档是否和一个独立的DTD文件配套处理。属性为“no”时,表示使

10、用外部的(即非本XML文档内的)DTD文件。属性为“yes”时,表示不使用外部的(即非本XML文档内的)DTD文件。或没有外部DTD文件,4处理指令(Processing instructions)处理指令给阅读XML文档的应用程序,如XML解析器(parsers),提供信息。处理指令由“”结束。紧接?是XML名字,称作“目标(target)”。,5.注释(Comments)XML注释是文档中作解释的字符数据,它的语法类似于HTML,以“”结束,如:1)注释不是XML元素,它们可出现在文档中字符数据的任何位置,也可出现在根元素的前面或后面 2)因为程序常忽略注释中的内容,我们可用注释包围和隐藏

11、标记。,例:,Bill Davenport 108 Street Chengdu Sichuan-,上例使用注释后,注释中的信息被隐藏,原文档等同于:,address Bill Davenport,注意:1)注释不能出现在标签之中(只能出现在字符数据的任何位置),以下的例子是非法的:Davenport 2)在一个注释中,“-”不能出现在除开始和结束符号以外的任何地方,以下的例子是非法的:3)注释不能嵌套使用。,6.XML文档的其它内容,实体引用(Entity References)符号“”被XML解析器理解为标签的开始,当我们的字符数据中包含这类对XML解析器有特殊意义符号时,如果不采用适当的

12、方法去规避这些字符,将导致错误。如:,Installing Cocoon Locate the Cocoon.properties file in the/bin directory.,解析器解读上面XML片段时将报告错误,因为解析器认为代表开始标签,却找不到结束标签。解决这类问题的方法是使用“实体引用”。如用“”代替“&”。,XML事先定义的五个实体,(2)CDATA 部分当成段的文档片段包含大量的特殊字符时,这种替换工作是非常大的,例如我们需要在XML文档中包含XML的示例文档。可用CDATA部分。CDATA部分告诉解析器不把标明的CDATA部分作为标记语言片段(markup)处理,而只是

13、作为纯数据字符(raw character data)来处理。CDATA部分以“”结束,,注意:CDATA部分几乎可以包含任何内容,但不能包含CDATA部分,即类似于XML注释,CDATA部分不能嵌套使用。,7.XML结构良好(Well-Formed)的基本要求,XML文档必须是结构良好的,也就是说必须符合一系列规则,如下:(1)每一个起始标签必须有一个结束标签与之对应。(2)元素名和属性名必须符合XML名字规则。(3)元素是可以嵌套(nest),但不能重叠(overlap)。(4)只有一个根元素。(5)属性必须使用单引号或双引号。(6)一个元素不能有两个同名的属性。(7)注释和处理指令不能出

14、现在标签内。(8)“”和“&”不能直接出现在元素或属性的字符数据中。,其中“元素是可以嵌套”不仅可以指一个元素包含别的元素,也可以是一个元素以一定方式包含自己,如:OpenMath Symbol OpenMath Symbol,注意:1)以上规则包括了XML良好结构的基本要求也是较容易出错的地方,但并不是所有的要求。全面的要求可另行参考W3C的相关技术报告。2)做良好结构检查最简单的方法是用网页浏览器,如IE5.X或Mozilla;另外一种方法是用通用的XML解析器。,XML名字空间(Namespaces),Mrs.Mary McGoon 108 Street Chengdu,为什么引入名字空

15、间,automobile BMW S500 400,000 This car was made in China in July 2004,without any serious damage.,上面的文档中有两个title元素,一个指人的称号,另一个指财产的类别,它们的语义是不同的;文档中还有两个description元素,不仅语义不同,而且结构也不同。人可以根据上下文分清楚它们的差别,但计算机程序却不方便。,XML的标签可由任何人按自己的要求定义,用来描述自己的数据,这就不可避免的造成同名的元素可能描述不同的数据,可能有不同的结构。,名字空间的语法,名字空间提供了一种区分同名不同语义的元素

16、和属性的方法,就是赋予元素和属性URI。前缀和名字空间URI的捆绑 前缀和名字空间URI的捆绑是通过在一个元素或这个元素的祖先元素(ancestors)中附加xmlns:prefix(用具体的前缀代替prefix)属性实现的,并把xmlns:prefix属性的值设为要捆绑的URI,,例:,Mrs.Mary McGoon 108 Street Chengdu,捆绑是有范围的,在一个元素中声名了前缀并捆绑了URI,则该元素和它的所有具有该前缀的后代元素(descendants)都属于同一名字空间。前缀可以在任何使用该前缀的元素或这个元素的祖先元素进行URI捆绑,该元素可以是根元素或其它元素。可以在

17、一个元素中对多个捆绑多个前缀进行URI捆绑,注意:限制名中的前缀,必须是进行了URI捆绑的,否则,必须马上在该元素中进行URI捆绑。如本例中的ps,它是在ps:person的父元素mortgage中进行URI捆绑的,如果它未在mortgage中进行URI捆绑,则必须马上在ps:person元素中进行URI捆绑,而不能在ps:person的后代元素如ps:description中再进行捆绑。,2.默认的名字空间,为了兼容XML1.0,名字空间提供了为元素(但不包括属性)设定默认名字空间的方法:在一个元素中附加xmlns属性,并把xmlns属性的值设为要捆绑的URI。例:108 Street Ch

18、engdu,在一个元素设定默认名字空间,则该元素所有没有前缀的后代元素都属于该默认名字空间;如果该元素本身没有前缀,则该元素也属于该默认名字空间。另外,有前缀元素的无前缀后代元素也属于该默认名字空间。注意:默认名字空间并不应用于属性上,属性需要显性的指明前缀才能确定其名字空间。,3.名字空间URI 不同的前缀只要和同一个URI绑定,它们依然属于同一名字空间。,DTD 在一个XML应用中,或者说在一个具体的行业内,我们需要规范文档的结构,达成一种有关文档如何书写的约定,以便于文档的交流。DTD能够实现XML文档格式的统一化,促进行业内或系统内文档格式标准化。,有效性验证(Validation),

19、DTD以标准的语法写成,但DTD的语法不是XML语法。DTD的语法可以准确地规范元素、实体和属性的内容和结构,如一个什么样的元素可以出现在文档的什么位置,它可以有什么样的属性、子元素和内容。如下例:,每一行都声明了一个元素:第一行说明了一个address元素,它包含三个子元素name,street和city,并且三个子元素以namestreetcity的顺序出现;第二行说明了一个name元素,它包含两个子元素first-name和last-name,并且两个子元素以first-namelast-name的顺序出现;后面四行分别说明了四个元素包含PCDATA的数据(后面将具体说明什么是PCDAT

20、A数据)。,注意:如果要使用DTD进行有效性验证,就必须对XML文档中的所有内容(属性、子元素和内容)进行说明。DTD没有严格要求每行声明的顺序,可以是由上向下(如前例),也可以由下向上(如下例),也可以是其它顺序,以便于阅读理解为前提,但不能重复声明同样的元素。,DTD声明,为了把DTD和XML文档结合起来进行有效性验证,我们需要在XML文档中加入DTD声明。目前共有三中DTD声明方式:外部SYSTEM声明、外部PUBLIC声明、内部声明。,外部SYSTEM声明外部声明语法为:注意“”与“!”以及“!”与“DOCTYPE”之间都没有空格。,例:,BillDavenport108 Street

21、Chengdu,注意address.dtd 存储路径:相对路径、绝对路径、网络URL 2.外部PUBLIC声明 当一种DTD被行业或公众广泛接受时,它可能被存储在多个服务器上,允许许我们在有效性验证器(validator)中内置一个ID号代表这个DTD,再通过本地目录服务器将这个ID号转换成合适的URL供有效性验证器下载DTD。同时,也为这个DTD提供后备的URI。,具体语法为:例如:,3.内部声明 DTD也可以直接放在XML文档内使用。其语法为:内部DTD声明方式能方便调试,但不利于DTD重用,例:,BillDavenport108 StreetChengdu,4.内部DTD子集,除了上面的

22、声明方式,也可以把外部DTD和内部DTD子集一起使用。注意:内部DTD子集声明的元素不能与外部DTD声明的元素相重复 下例中,我们先将如下DTD单独存储为“addressPart.dtd”:,然后,编写如下XML文档:BillDavenport108 StreetChengdu,元素(ELements)的声明,元素声明的基本语法如下:其中,“元素内容说明”部分很复杂,包括该元素必须包含什么子元素,这些子元素将以什么顺序出现,,1.文本元素的声明 文本元素指元素只包含文本数据(PCDATA-Parsed Character Data)的元素,该元素不能包含任何形式的子元素,如:,2.空元素的声明

23、 空元素是不包含任何内容的元素,通过设置预留关键字“EMPTY”来实现,如:元素city不能包含任何内容(包括空格等),但元素city可以有它的属性。如下面就是一个含有属性的空元素:,3.ANY元素的声明 ANY元素为不确定元素,它可以包含或不包含任何内容,但如果包含子元素,该子元素必须是在相应DTD中声明过的元素。ANY元素通过设置预留关键字“ANY”来实现,如:使用ANY元素常会带来混乱,所以应尽量避免使用它,4.包含子元素的元素声明,元素可以嵌套,即一个元素可以包含子元素。(1)子元素及其出现的顺序 当子元素多于一个时,需要用“,”进行分隔,在“,”左面的元素必须先于右面的元素在XML文

24、档中出现,如:,(2)子元素的个数。子元素可以通过以下三种操作符来说明它们可以出现的次数:?:零或一次*:零或多次+:一或多次例如:注意这三个操作符与子元素名之间没有空格。,(3)子元素的选择 有时一个元素的子元素可以从两个或多个元素中选择,操作符“|”提供了“多选一”的机制。这种“多选一”是在多个中选一个,必须而且只能选一个。例如:,(4)()符号的使用 在实际应用中,一个元素的子元素可能很复杂,这时我们可以使用()符号来帮助完成子元素的限定。()符号使包含于其中的元素合并为一个整体,例:()符号可以嵌套使用构成更为复杂的限定,实体(Entities)的声明,实体是一些事先定义好的数据,通过

25、对这些实体的引用,可以把这些数据放置于XML文档中指定的位置,就象在程序中定义常量一样,这样显然可以方便数据的重用和修改,同时,也可通过实体把图形图像、音频视频等特殊数据引入到XML文档中。实体需要首先在DTD中声明,然后在XML文档中引入。实体有多种分类方式,一般可分为通用实体、外部解析实体、外部非解析实体和参数实体,,下面分别介绍,1.通用实体 通用实体声明的语法为:或 通用实体引用方法为:注意:不能在元素声明中使用通用实体引用,2.外部解析实体,外部解析实体声明的语法为:或 外部解析实体引用方法为:,3.外部非解析实体,非解析实体即是不需要通过解析器分析的实体,解析器不会对非解析实体进行

26、分析,而只是作为一种数据接受。通过外部非解析实体,可以在XML文档中包含非XML数据,如非XML格式的文本文档,图像等。声明的语法:通常只在元素的属性中(而不在元素内容中)引入外部非解析实体,4.参数实体,前面所讲的三类实体可以方便XML文档的制作,但无法方便DTD本身的制作。参数实体可以方便DTD的制作 声明方法:引用方法:%实体名称;,属性(Attributes)的声明,声明的语法:注意:XML文档中属性是没有顺序的,所以上例中先声明location或size都一样。,1.属性的类型,属性(值)有十种可选类型:CDATA,NMTOKEN,NMTOKENS,Enumeration,ENTIT

27、Y,ENTITIES,NOTATION,ID,IDREF,IDREFS。(1)CDATA CDATA就是字符数据(Character Data),任何字符都可以。声明语法:,例如:有效的XML文档片段如:Sichuan 注意:要对、&使用实体引用;双(或单引号)中的双(或单引号)需要使用实体引用。,(2)NMTOKEN,NMTOKEN即Name Token,它非常类似于XML名字,可以包含26个大写和小写英文字母,0-9十个数字,也可包含非英文字母和数字,如、,以及汉字,同时还可包含三种英文符号:“-”、“_”和“.”,但不能包含空白字符。而NMTOKEN可以用任何上述合法的字符开头。,声明语

28、法:例如:有效的XML文档片段如:Sichuan,(3)NMTOKENS 属性值也可以为一系列NMTOKEN,这一系列NMTOKEN用空白字符分开。声明语法:例如:有效的XML文档片段如:Sichuan,(4)Emeration Emeration即枚举,通过枚举,可以给出属性可以选择的所有属性值。在枚举中,所有可选值必须是NMTOKEN,并用“|”符号分开;属性值只能在枚举中列出的可选值中选任意一个。声明语法:,例如:有效XML文档片段如:但下面的XML文档片段无效:,(5)ENTITY ENTITY就是实体,通过它把属性声明为实体类属性。实体类属性的属性值是外部非解析实体(前面有详细介绍)

29、。声明语法:,例如:有效XML文档片段如:,(6)ENTITIES ENTITIES类型属性的值是一系列用空白字符分开的ENTITY属性值。声明语法为:,例如:有效XML文档片段如:,(7)NOTATION NOTATION类型的属性的属性值为在DTD中已经声明过的NOTATION的名称,本类型不常用。声明的语法为:,例如:有效XML文档片段如(type的值可为而且只能为jpeg、gif、bmp中任一个):,2.属性默认声明 属性默认声明共有四种可选:#IMPLIED、#REQUIRED、#FIXED和默认值。#REQUIRED 表明该属性在XML文档中必须出现,没有默认值,如:,#IMPLI

30、ED 表明该属性在XML文档中可以出现或不出现,没有默认值,如:#FIXED 表明该属性如果在XML文档中出现,则必须为给出的固定值;该属性若在XML文档中不出现,解析器在解析该XML文档时会自动给相应的元素加上该属性并赋予它给定的值。,有效XML文档片段如:或:这里,解析器在解析该XML文档时会自动给address元素加上xmlns属性并赋予它给定的值http:/。,默认值 表明该属性如果在XML文档中出现,则可按照声明的属性类型为它赋值;该属性也可以在XML文档中不出现,解析器在解析该XML文档时会自动给相应的元素加上该属性并赋予它给定的值。如:,有效XML文档片段如:或:这里,解析器在解

31、析该XML文档时会自动给address元素加上xmlns属性并赋予它给定的值http:/。默认值与#FIXED不同的是当在XML文档中显式的包括该属性时,属性值可以改变。,XML Schemas 前面的DTD是XML的一种有效性验证方式,本节的XML Schema是另一种有效性验证方式。XML Schema使用XML语法,XML Schema提供对名字空间很好的支持,可在XML Schema直接对名字空间进行URI绑定;XML Schema提供了诸如string等内建数据类型,还提供用数据类型的派生(derivation)、继承和户自定义数据类型。,XML Schema的基本结构,基本结构Sc

32、hema本身是XML的一个应用,必须是“结构良好”的,其根元素为schema,并必须与名字空间URI“http:/www.w3.org/2001/XMLSchema”绑定,至于前缀本身并不重要,也可以改为xsd或其它不会引起异议的XML名字。,3.内建数据类型,Schema内建了丰富的数据类型,称为“简单类型(simpleType)”,可以直接在元素和属性中使用它们,如xs:string,也可以用它们派生出其它“简单类型”和“复杂类型(complexType)”。Schema内建的简单类型图3.15。,元素的声明,元素声明的基本语法为:xs:element元素的可选属性很多,如上面的name(

33、name属性也是可选的,因为还有其它的声明方式,如ref,见“元素和属性的引用”),还有type、maxOccurs、minOccurs、default、fixed等等,,声明语法:元素内声明。声明语法:,1.元素的类型,2.子元素的声明,在XML Schema中,一个元素包含了子元素(或属性),则说该元素具有复杂类型(complex type)。也就是说,元素和它的子元素(或属性)是通过复杂类型构建的。,3.混合内容(mixed content),通过在xs:complexType元素中设置mixed属性为true,XML Schema允许混合内容的XML实例文档.,4.元素的默认值,元素的

34、默认值声明:如:默认值表示该元素值如果在XML文档没有出现,则解析器以该默认值代替;如果出现,则按出现的值处理。,5.元素的固定值,元素的固定值声明:如:固定值表示该元素值如果在XML文档没有出现,则解析器以该固定值代替;如果出现,则必须是该固定值。,6.元素的出现次数,XML Schema可以控制元素出现的次数,如:,属性的声明,在XML Schema中,一个元素包含了属性(或子元素),则说该元素具有复杂类型(complex type)。也就是说,元素和它的属性(或子元素)是通过复杂类型构建的。,例,实例文档片段:Sichuan,说明:,首先用xs:complexType说明元素provin

35、ce是包含属性的复杂类型;然后用xs:simpleContent说明该复杂类型只有简单内容;再用xs:extension说明该简单内容是从xs:string派生来的(后面会介绍“派生”);最后在该派生中声明了一个属性。,xs:attribute元素有很多可选属性,如default、fixed和use,其中default和fixed属性用法和xs:element中的default和fixed属性用法相同;use属性用来控制属性的使用情况,它的三个可选值如下:use=(optional|prohibited|required)“,空(Empty)元素的声明,空(Empty)元素和nill 元素不同

36、(nill 元素不是表示元素为空值,而是表示元素可以没有值或不知道该值)。,复杂类型和简单类型,元素类型分两种:复杂类型(complex type)和简单类型(simple type)。复杂类型指可以包含元素或属性的类型简单类型只能是字符内容。注意:只有元素才可以是复杂类型(元素也可以是简单类型,如),属性只能是简单类型,只能是字符内容。XML Schema内建的数据类型都是简单类型。,类型的派生,类型的派生分为“定义新的简单类型”和“复杂类型的派生”。1.声明新的简单类型 我们可以为street元素定义自己的类型,如下:实例文档片段:Schema片段:使用xs:simpleType和xs:r

37、estriction可以为元素或属性定制新的简单类型。,(1)取值说明 取值说明提供了对自定义类型取值的范围、模式等的说明。XML Schema提供了如下说明符,而且这些说明符可以联合使用。取值进行详细的描述如表3-4所示,表3-4 取值说明符,除了list和union,取值说明符的语法为:,(2)list的语法。列举是用空格分开的一系列原子类型值。如:,实例文档片段:HABGYH ABSDFJ DFGLKJ,(3)union的语法 联合是从列举的类型(用空白字符分开)中任选一种而且只能选一种。,例如:实例文档片段:HABGYH ABSDFJ 或者 12456,2.复杂类型的派生,可以通过xs

38、:extension和xs:restriction元素来从已有的类型派生出新的复杂类型,原理上类似面对对象编程中的继承。(1)restriction派生 当新派生的类型逻辑上是现有类型的一个子集是,可使用restriction派生.(2)extension派生。extension派生相当于在已有的类型的内容后面加上在xs:extension中声明的内容.,全局声明和有名类型声明方式的Schema,1.全局(global)声明方式的Schema 全局声明方式把元素或属性作为xs:schema的直接子元素声明叫作全局声明。反之,把元素或属性放在其他元素内声明,叫作局部声明。,2.有名类型(name

39、d type)声明方式的Schema Schema使用有名类型,便于用户进行类型的控制。全局声明和有名类型声明方式可以相结合。,使用多个Schema,在一个Schema中包括(include)同名字空间的外部声明,重定义(redefine)同名字空间的外部声明,还可以输入(import)属于别的名字空间的Schema。,“包括外部声明”的语法为:“重定义外部声明”的语法为:“输入属于别的名字空间的Schema”的语法为:,XSLT,通过前面章节的学习,知道如何将数据、文件资料用规范的有意义的形式,即XML格式准确地、完整地表示出来,而丝毫不用去关心文档的显示效果。然而,我们时常需要将信息显示出

40、来供人阅读,下面要介绍的XSLT(XSL Transformation)就是通过将XML转换为XHTML来显示数据的。XSLT的基本思路是通过“匹配模板转换”将一个XML文档转换为另一个XML文档。所以,XSLT的不仅仅能将XML转换为HTML供浏览器显示,也能将一个XML文档转换为另一个XML文档供其它使用目的。,XSL简介,XSL(eXtensible Stylesheet Language)由两大部分组成:第一部分描述了如何将一个XML文档进行转换,转换为可浏览或可输出的格式;第二部分则定义了格式对象 FO(formated Object)。,XSLT的工作原理,XSLT主要的功能就是转

41、换,它将一个没有样式单的XML内容文档作为一个源树,将其转换为一个有样式信息的结果树。XSL定义XML文档显示方式的基本思想是:通过定义转换模板,将XML源文档转换为带样式信息的可浏览文档。最终的可浏览文档可以是XHTML格式、FO格式、或者其他面向显示方式描述的XML格式(如前面提到的SVG),限于目前浏览器的支持能力,大多数情况下是转换为一个HTML文档进行显示。,1.服务器端转换模式 XML文件下载到浏览器前先转换成HTML,然后再将HTML文件送往客户端进行浏览。有两种方式:(1)动态方式:当服务器接到转换请求时再进行实时转换,这种方式无疑对服务器要求较高。(2)批量方式:事先将XML

42、用XSL转换成HTML文档,接到请求后调用转换好的HTML文档即可。,2客户端转换模式 这种方式是将XML和XSL文档都传送到客户端,由浏览器实时转换。前提是浏览器必须支持XML和XSL。,XSLT工作过程,第一,由源树建立结果树(result tree)构造结果树,是将模式(pattern)与模板(template)相结合实现的。模式与源树中的元素相匹配,模板被实例化产生部分结果树。在结果树的构造中,源树可以被过滤和重新排序,还可以增加任意的结构。第二,结果树被解释并在显示器、纸张或以语音等媒体形式的格式化输出。,XPath节点匹配路径,XSL在构造结果树时需要在源树中进行节点查找,这是通过

43、XPath来实现的。为了使用 XPah表示一个或一组节点,使用路径位置(Location Path)的方式。路径位置的方式就好比一般操作系统下的目录结构一样,会用“”或者“/”依次排列来表示一个目录(这里是节点)的路径位置。如果使用“”作为一个路径位置的开始符号,就称之为绝对路径位置,也就是节点的起始位置是从根节点开始的。反过来说,若不是以“”开头的位置,就称为相对路径位置。,基本概念XPath可分为四种数据类型:(1)节点集(Node-set)。节点集是通过路径匹配返回的符合条件的一组节点的集合。其他类型的数据不能转换为节点集。(2)布尔值(Boolean)。由函数或布尔表达式返回的条件匹配

44、值,与一般语言中的布尔值相同,有True和False两个值。布尔值可以和数值类型、字符串类型相互转换。(3)字符串(String)。字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。(4)数值(Number)。,2、节点类型 在XPath中,将节点划分为7种节点类型。(1)根节点(Root Node)。(2)元素节点(Element Nodes)。(3)文本节点(Text Nodes)。(4)属性节点(Attribute Nodes)。(5)名字空间节点(Namespace Nodes)。(6)处理指令节点(Processing

45、Instruction Nodes)。(7)注释节点(Comment Nodes)。,XSLT的结构,1.一个简单的XSLT的例子首先,设计一个简单的XML文档test.xml:This is my test page.,直接使用IE5.0以上浏览器打开,只能看到如下图所示的源代码显示。,设计一个XSLT文档test.xsl,The test page.图3.19 浏览器中的XML文档显示效果,修改test.xml如下:This is my test page.这里,是stylesheet处理指令。type指出MIME媒体类型。href指出.xsl式样文档的URL。,微软IE5.0以上浏览器内

46、置MSXML解析器。该解析器将test.xsl应用于test.xml上,结果是将test.xml转换成类似下面的HTML代码:,The test page.This is my test page.图3.20浏览器中的XSLT文档显示效果,test.xsl文档 分析:,这是标准的XML文档的首行代码,因为XSLT本身也是XML文档。这是标准的XSLT文档根元素。xmlns:xsl属性是一个名字空间声明,和XML中的名字空间使用方法一样,用来防止元素名称重复和混乱。version属性说明样式单只采用 XSLT1.0标准。一个xsl:template元素定义一个模板规则。属性match=/说明在X

47、ML源文档中,这个模板规则作用的起点。/是一种XPath语法,这里的/代表XML结构树的根节点,The test page.,模板大部分内容由XHTML元素和文本构成。其中:元素是XSLT语法,这里的作用是拷贝原文档中的一个指定节点的值到输出文档。select属性则详细指定要处理的节点名称,它使用XPath语法。select 的值按默认需要是上一级match指定的节点的子节点或当前节点本身(这时按照XPath语法,应使用“.”而不要使用当前节点的名称);如不使用“默认”方式,也可以使用其他合法的XPath语法。,模板和模板规则、模板应用、内建模板,1.模板(template)和模板规则定义模板

48、规则:An address.match属性值使用XPath对输入进行路径匹配,2.模板应用(apply template),XSLT处理器默认的顺序是“从上到下”,即从根节点开始,以“前序遍历”的方式读入XML文档。即父节点的模板规则比子节点模板规则先激活。但我们依然可以在模板规则中改变这个默认的顺序。,会先于会先于被激活。,如:,我们可以让last-name先于first-name被XSLT处理器处理,如下:我们不仅可以改变顺序,也可以有选择地处理节点,通常的方法是用模板应用:xsl:apply-templates元素。,3.内建模板,XSLT处理器内建4种模板,如下:(1)字符和属性节点:

49、该模板将纯文本节点内容或属性值拷贝到输出中。(2)元素和根节点:该模板通常导致递归调用本模板或调用“字符和属性节点”模板。,(3)处理指令和注释节点:这个模板不输出任何字符。所以要想输出处理指令和注释节点,必须明确定义相应的模板。(4)名字空间节点:XSLT处理器内建“名字空间节点”模板和“处理指令和注释节点”类似。实际上,XPath没有namespace()节点。,模式(modes)的使用,有时,我们需要将同一输入多次包含在输出中,并且以不同的格式输出,这可以通过使用xsl:template和xsl:apply-templates元素的可选属性mode来实现。,输入文档:,XSLT文档:,转

50、换的结果如下:,Davenport,Bill Wilber,ClaireBillDavenport108 StreetChengduSichuanClaire Wilber111 StreetMianyangSichuan,XSLT的循环控制和条件控制,XSLT定义了很多可用元素,除了前面的xsl:value-of、xsl:template、xsl:apply-templates,下面主要介绍几个常用的:xsl:for-each、xsl:ifxsl:choose、xsl:when、xsl:otherwise。其中,xsl:for-each属于循环控制,其它4个属于条件控制。,XML输入文档:,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号