张孝祥IT课堂 -深入体验Java Web开发内幕 IT资讯交流网 WWW.IT315.ORG
第1讲 XML基础 XML技术概述 XML的基本语法 XML的约束模式 DTD DTD的语法细节 XML Schema 名称空间 IT资讯交流网 WWW.IT315.ORG
XML技术概述 XML的起源与作用 XML文档结构 XML与HTML的比较 XML与数据库的比较 IT资讯交流网 WWW.IT315.ORG
为什么要学XML? XML离你的工作有多远? JSP文档也逐步向XML语法格式过渡 许多项目都采用XML作为数据交换格式 在日常应用中会经常看见XML格式的文件 掌握XML是软件开发人员的一项基本技能 讲讲什么是数据交换,什么是数据交换格式,在一张纸上写下产品报价,然后通过传真给你,这就是信息交换,信息就是数据, 它们交换的信息需要遵循一定的格式,譬如,在纸上写个123,这表示的是密码,还是房间编号,还是一个产品的编号的,只有123嵌入进一个带有标题栏的表格中, 才知道123表示的意义,这个表格就是一种格式. 如果将123和123放在一个图展示出来,就更好了! 讲“配置文件都是XML格式的“时,先要讲解什么是配置文件,然后再演示一下Tomcat服务器中的各种配置文件。 还有,大家在以后的工作中会经常看见XML格式的文件,对于经常看到的东西,却总是有些不太清楚或看不懂的地方, 这对一个好奇心和求知欲很强烈的人来说,每次肯定都会有一种没有满足的遗憾心情,通过本章的学习,这种遗憾的心情至少就不会出现在你身上。 IT资讯交流网 WWW.IT315.ORG
什么是配置文件 配置文件就是记录应用程序的配置信息的文件。 传统配置文件的格式: #Db.Properties DBServer=192.168.0.100 Database=emp Port=1443 Username=zxx Password=123 如果演示一个配置文件与图形界面的对应关系就更好了. IT资讯交流网 WWW.IT315.ORG
XML的起源与作用 在线电子商务活动交换的电子文档必须采用某种标准格式,统一电子文档的标准规范是电子商务的基础。 HTML不适合作为电子商务的文档标准。 SGML(Standard Generalized Markup Language)过于复杂,无法适应网络上的日常应用。 W3C于1998年2月批准了XML (Extensible Markup Language)的1.0版本。XML是对SGML的简化,语法与HTML非常相似。 XML具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。 XML文档很容易创建,并且结构清晰,不仅让人能够明白,还让计算机也能够明白。 XML作为一种公订的、开放的标准,不受知识产权的限制。 采购方与供货方的文档交换画个图就更好了 IT资讯交流网 WWW.IT315.ORG
XML文档内容 <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> <书名>JavaScript网页开发</书名> <售价>28.00元</售价> </书架> IT资讯交流网 WWW.IT315.ORG
XML文档结构 <书架> <书> <书名> </书名> <作者> </作者> <售价> </售价> </书> </书架> IT资讯交流网 WWW.IT315.ORG
XML与HTML的比较 HTML将数据和其显示效果混在一起,它是一种表现技术 ; XML文档只是存储了数据和描述了数据之间的关系,没有规定该如何显示数据。 HTML的格式要求比较松散 ;而XML是非常严格的标记语言。 HTML的标记集合是固定的;而XML只是提供了一个标准,人们可以按照这个标准来定义自己专用的标记。 XML 允许粒度更新,HTML不支持类似功能。 XML不是HTML的升级,也不是HTML的替代产品。 HTML 目前已经不再是WEB标记的标准,它已经被XHTML所取代 ,XHTML 是 HTML 和 XML 的混合物,是XML在WEB领域的一种应用。 IT资讯交流网 WWW.IT315.ORG
XML与数据库的比较 一个XML文档就像数据库中一个表 ,具有三个要素:文档结构、文档数据和文档样式 。 IT资讯交流网 WWW.IT315.ORG
XML的基本语法 文档声明 元素定义 属性定义 注释 空格和换行的处理 CDATA区 特殊字符 处理指令(processing instruction) IT资讯交流网 WWW.IT315.ORG
动手体验:加深对encoding属性的理解! 文档声明 最简单的声明语法: <?xml version="1.0" ?> 用encoding属性说明文档的字符编码: <?xml version="1.0" encoding="GB2312" ?> 用standalone属性说明文档是否独立: <?xml version="1.0" encoding="GB2312" standalone="yes" ?> 动手体验:加深对encoding属性的理解! IT资讯交流网 WWW.IT315.ORG
元素定义 一个XML元素由一个标记来定义,包括开始和结束标记以及其中的内容,例如: <书名>Java就业培训教程</书名> 一个元素中可以嵌套若干子元素。 格式良好的XML文档必须有且仅有一个根元素,其它元素都是这个根元素的子孙元素。 空元素可以不使用结束标记,但必须在起始标记的结束定界符(>)前面增加一个正斜刚(/)字符,例如: <img src="log.gif" /> 所有的元素都必须合理的嵌套,绝对不允许标签交叉 ,例如: <b>welcome to <i>www.it315.org</b></i> IT资讯交流网 WWW.IT315.ORG
元素的标记名称规范 可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范: 区分大小写,例如,<P>和<p>是两个不同的标记。 不能以数字或"_" (下划线)开头。 不能以字符组合xml(或XML、或Xml 等)开头。 不能包含空格。 名称中间不能包含冒号(:)。 IT资讯交流网 WWW.IT315.ORG
元素的标记名称建议 不要使用“.”,因为在很多程序语言中,“.”用于引用对象的属性。 最好不要用减号(-),而以下划线(_)代替,以避免与表达式中的减号(-)运算符发生冲突。 名称尽量简短,以减少XML文档的大小。 名称的大小写尽量采用同一标准,要么全部大写,要么全部小写。 名称可以使用非英文字符,例如中文,但是有些软件可能不支持非英文字符以外的字符,在使用时应考虑这种情况。 IT资讯交流网 WWW.IT315.ORG
属性定义 一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如: 属性值一定要用双引号(")或单引号(')引起来 <售价 单位="元">58</售价> 属性值一定要用双引号(")或单引号(')引起来 属性遵循与标签相同的命名规范 属性可以被改成用子元素来描述同样的信息,例如: <售价> <单位>元</单位> <价格>58</价格> </售价> IT资讯交流网 WWW.IT315.ORG
动手体验:Tomcat 4.x/conf/tomcat-user.xml文件中加入中文注释的问题! 用“<!--注释-->” 这种格式加入注释 XML声明之前不能有注释 一对注释符号之中不能包含另一对注释符号,例如: <!--大段注释 …… <!--局部注释--> --> 动手体验:Tomcat 4.x/conf/tomcat-user.xml文件中加入中文注释的问题! IT资讯交流网 WWW.IT315.ORG
空格和换行的处理 对于XML中的标签以外的所有空格和换行,XML解析程序都要一个个如实地交给下游程序去处理。 下面两段内容的意义是不一样的 第二段: <网址> www.it315.org </网址> 第一段: <网址>www.it315.org</网址> 由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。 IT资讯交流网 WWW.IT315.ORG
CDATA区 问题: XML 文档中包含类似“Elements look like <this>”的文本,其中的“<this>”将被解析程序解释成一个元素,而人们实际想要的是“<this>”所表示的原义文本。 CDATA区全称为character data,以“<![CDATA[”开始,以“]]>”结束,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封不动地交给下游程序去处理。 CDATA区中的起始和结束处有和没有空格和换行字符是有区别的,例如: <![CDATA[www.it315.org]]> 和 <![CDATA[ www.it315.org ]]> “<![CDATA[”不能写成“<![cdata[”或“<![Cdata[”。 CDATA区内部不能出现字符串“]]>”,该如何解决? 要做一个实验,还要把tomcat的xml.jsp文件中的CDATA区给读者看 关于如何解决CDATA区内部的”]]>”,作为一个思考题,上www.it315.org网站的讨论和学习. IT资讯交流网 WWW.IT315.ORG
特殊字符 动手体验:加深对特殊字符的了解! IT资讯交流网 WWW.IT315.ORG
动手体验:使用CSS控制XML文档的显示! 处理指令 处理指令是processing instruction的中文翻译,通常简称PI,用来为处理XML文档的应用程序提供指示信息。 处理指令以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。 XML分析器把处理指令原封不动地传给应用程序,由应用程序来解释这个指令,按照它所提供的信息进行处理。例如,在某个XML文档中可以包含下面的语句来告诉浏览器使用book.css控制其显示效果: <?xml-stylesheet type="text/css" href="book.css"?> 在动手体验最后,还应把css文件中的display样式属性去掉,看看显示效果. 动手体验:使用CSS控制XML文档的显示! IT资讯交流网 WWW.IT315.ORG
XML约束模式纲要 格式良好的(Well-formed)XML XML的约束模式 XML约束模式语言 有效的(Valid)XML IT资讯交流网 WWW.IT315.ORG
格式良好的(Well-formed)XML 计算机程序在处理XML文档之前,首先必须能够解析出XML文档内容中的各个元素的相关信息。 用于解析XML文档的解析器程序对应的英文术语叫Parser。 要让计算机程序解析出XML文档内容所表述的信息,XML文档更应该严格遵循一定的语法。 遵守XML基本语法规则和规范的XML文档就可以称之为“Well-formed XML”,中文意思就是“格式良好的XML” 。 IT资讯交流网 WWW.IT315.ORG
XML的约束模式 为什么要有约束模式? 举例: <?xml version="1.0" encoding="gb2312"?> <书架> <书> <书名>Java就业培训教程</书名> <作者 姓名="张孝祥"/> <售价 单位="元">38</售价> <售价 单位="元">28</售价> </书> </书架> 约束模式定义了XML文档中允许出现的元素名(也就是标记名)、元素中的属性、元素中的内容类型以及元素之间的嵌套关系和出现顺序。 XML约束模式不仅定义了XML文档的词汇表,它还定义了一个XML文档必须遵循什么样的结构。 如果把一个XML文件看作是数据库中的一个表,那么XML约束模式就相当于数据库表结构的定义。 如果没有为一个XML文档指定约束模式,那么该文档中可以包含任何类型的标记;如果为一个XML文档指定了约束模式,那么它必须需满足约束模式所规定的结构、数据类型和数据关联等内容。 尽管有些文章的语法格式完全正确,但是,如果文章中的言论是反动的,与我党的声音不协调,影响了社会的安定团结局面,这样的文章也是不允许的和无效的。 一个城市可以有三个副市长,而一本书不能有两个售价,计算机自身是无法进行这种逻辑判断,我们需要用另外一个文件来对这个XML文档的逻辑关系进行描述。 IT资讯交流网 WWW.IT315.ORG
XML的约束模式语言 用作XML约束模式的内容也需要遵循一定的语法规则,这些语法规则就形成了XML约束模式语言。 约束模式通常都是在一个单独的文件中进行定义,这个文件被称作模式文档。 与模式文档的概念相对应,依照模式文档编写的XML文档被称为实例文档。 先后出现的XML约束模式语言有XML DTD、XDR、SOX、XML Schema等等,其中应用最广泛和具有代表意义的是XML DTD和XML Schema。 书架下的书可以有多个,而售价只能有一个,描述种逻辑关系的文件也要遵循一定的语法。 IT资讯交流网 WWW.IT315.ORG
有效的(Valid)XML 一个遵守XML的基本语法规则、且符合为它指定的某个XML约束模式的XML文档就可以称之为“Valid XML”文档,中文意思就是“有效的XML”文档。 一个XML文档并不一定需要是有效的,但必须是格式良好的。 将一个XML文档和它所引用的XML约束模式进行比较分析,看其中的内容是否符合XML约束模式的过程叫校验(validation),校验过程也是通过解析器程序软件(Parser)来处理的。 根据能否对XML文档进行约束模式校验,可以将XML解析器分为两类:非校验类解析器和校验类解析器。 IT资讯交流网 WWW.IT315.ORG
DTD(Document Type Definition) 在XML文档中引入外部DTD文件 在XML文档中直接嵌入DTD定义语句 元素定义 属性定义 实体定义 IT资讯交流网 WWW.IT315.ORG
对DTD的初步认识 文件清单:book.dtd DTD文件应该使用UTF-8或Unicode编码。 文件清单:book.xml <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> 文件清单:book.xml <?xml version="1.0" ?> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> <书名>JavaScript网页开发</书名> <售价>28.00元</售价> </书架> DTD文件应该使用UTF-8或Unicode编码。 IT资讯交流网 WWW.IT315.ORG
在XML文档中引入外部DTD文件 XML文档通过使用 DOCTYPE 声明语句(文档类型定义语句)来指明它所遵循的DTD文件,DOCTYPE 声明语句紧跟在XML文档声明语句后面,有两种格式: (1)<!DOCTYPE 文档类型名称 SYSTEM "DTD文件的URL"> (2)<!DOCTYPE 文档类型名称 PUBLIC "DTD名称" "DTD文件的URL"> 例如: (1)<!DOCTYPE 书架 SYSTEM "book.dtd"> (2)<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> DTD标识名称应符合一些标准的规定,对于ISO标准的DTD以 ISO 三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。 对于一些已经制订成为了行业标准的DTD文件,一些相应的解释器程序可能已经将它们内嵌进去,所以在解析时并不一定要到从指定的URL上进行下载。 如何把xml文件和一个DTD文件联系起来,XML处理程序怎么知道用哪个DTD文件来校验当前的XML文件呢? IT资讯交流网 WWW.IT315.ORG
动手体验:用浏览器打开book.xml文件 在XML文档中引入外部DTD文件范例 文件清单:book.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> <书名>JavaScript网页开发</书名> <售价>28.00元</售价> </书架> 文件清单:book.dtd <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> 动手体验:用浏览器打开book.xml文件 IT资讯交流网 WWW.IT315.ORG
动手体验:访问DOCTYPE语句中的"DTD文件的URL" 动手体验:查看删除DOCTYPE语句后的启动错误! 在XML文档中引入外部DTD文件实验 Tomcat 4.x/webapps/examples/WEB-INF/web.xml文件: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> ... 动手体验:访问DOCTYPE语句中的"DTD文件的URL" 动手体验:查看删除DOCTYPE语句后的启动错误! IT资讯交流网 WWW.IT315.ORG
在XML文档中直接嵌入DTD定义语句 在XML文档中直接嵌入DTD定义语句: 引入外部DTD文件的同时加入DTD定义语句: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE 根元素名 [ DTD定义语句 …… ]> 引入外部DTD文件的同时加入DTD定义语句: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" [ !ENTITY copyright SYSTEM "http://www.it315.org/copyright.xml" ]> IT资讯交流网 WWW.IT315.ORG
在XML文档中直接嵌入DTD的例子 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> ... </书架> IT资讯交流网 WWW.IT315.ORG
XML文档的组成单元 XML声明(declaration) DOCTYPE声明语句 处理指令(processing instruction) 元素(element) 注释(comment) CDATA区 IT资讯交流网 WWW.IT315.ORG
元素定义 语法格式: 举例: 使用规则: 例如,<!ELEMENT HR EMPTY>定义的元素形式为<HR /> <!ELEMENT 书名 (#PCDATA)> 使用规则: (#PCDATA) 是parsed character data的简写 (书名,作者,售价) (书名, #PCDATA) EMPTY 例如,<!ELEMENT HR EMPTY>定义的元素形式为<HR /> ANY IT资讯交流网 WWW.IT315.ORG
元素定义细节 DTD使用与XML文档同样的注释方式 :<!-- 注释内容 --> 每条元素定义语句的顺序是无关紧要的 具有不同用途的元素不能使用相同的元素名 一个元素的各个组成成份之间可以有各种关系: <!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> <!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)> <!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)> 在元素的使用规则中可以定义子元素出现的次数: (书+)、 (书?)、 (书*)、 (书) 一对圆括号( )可用于将括在其中的内容组合成一个可统一操作的分组,分组中可以嵌套更小的分组。 <!ELEMENT MYFILE((TITLE*, AUTHOR?, EMAIL)* | COMMENT)> IT资讯交流网 WWW.IT315.ORG
动手体验:查看颠倒<display-name>和<description>元素的顺序后的启动错误! 定义元素出现顺序实验 Tomcat 4.x/webapps/examples/WEB-INF/web.xml文件: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Tomcat Examples</display-name> <description> Tomcat Example servlets and JSP pages. </description> ... 动手体验:查看颠倒<display-name>和<description>元素的顺序后的启动错误! IT资讯交流网 WWW.IT315.ORG
属性定义 语法格式: 举例: 应用: <!ATTLIST 元素名 属性名1 属性类型 设置说明 属性名2 属性类型 设置说明 …… > 举例: <!ATTLIST 商品 类别 CDATA #REQUIRED 颜色 CDATA #IMPLIED 应用: <商品 类别="服装" 颜色="黄色">…</商品> <商品 类别="服装">…</商品> IT资讯交流网 WWW.IT315.ORG
属性定义设置说明 举例: 设置说明: <!ATTLIST 页面作者 姓名 CDATA #IMPLIED 联系信息 CDATA #REQUIRED 网站职务 CDATA #FIXED "页面作者" 个人爱好 CDATA "上网" > 设置说明: #REQUIRED #IMPLIED #FIXED 直接使用默认值 IT资讯交流网 WWW.IT315.ORG
属性定义类型 CDATA ENUMERATED ID IDREF和IDREFS NMTOKEN和NMTOKENS NOTATION ENTITY和ENTITYS IT资讯交流网 WWW.IT315.ORG
属性类型ENUMERATED <?xml version = "1.0" encoding="GB2312" standalone="yes"?> <!DOCTYPE 购物篮 [ <!ELEMENT 购物篮 ANY> <!ELEMENT 肉 EMPTY> <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉"> ]> <购物篮> <肉 品种="鱼肉"/> <肉 品种="牛肉"/> <肉/> </购物篮> IT资讯交流网 WWW.IT315.ORG
属性类型 ID <?xml version = "1.0" encoding="GB2312" standalone = "yes"?> <!DOCTYPE 联系人列表[ <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人(姓名,EMAIL)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ATTLIST 联系人 编号 ID #REQUIRED> ]> <联系人列表> <联系人 编号="1"> <姓名>张三</姓名> <EMAIL>zhang@it315.org</EMAIL> </联系人> <联系人 编号="2"> <姓名>李四</姓名> <EMAIL>li@it315.org</EMAIL> </联系人列表> IT资讯交流网 WWW.IT315.ORG
实体定义 实体的根本作用是为一段文本内容创建一个别名,以后在XML文档中就可以多次引用这个别名,XML解析器程序将把XML文档中出现的别名引用转变成其所对应的文本内容。 在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。 实体可分为两种类型:引用实体和参数实体。 IT资讯交流网 WWW.IT315.ORG
动手体验:加深对引用实体的了解! 实体定义引用实体 语法格式: 引用方式: 举例: <!ENTITY 实体名称 "实体内容" > <!ENTITY 实体名称 SYSTEM "外部XML文档的URL" > 引用方式: &实体名称; 举例: <!DOCTYPE copyright [ <!ENTITY copyright SYSTEM "http://www.it315.org/copyright.xml"> ]> …… ©right; 动手体验:加深对引用实体的了解! IT资讯交流网 WWW.IT315.ORG
实体定义参数实体 语法格式: 引用方式: 举例1: 举例2: <!ENTITY % 实体名称 "实体内容" > %实体名称; <!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址"> <!ELEMENT 个人信息 (%TAG_NAMES; | 生日)> <!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)> 举例2: <!ENTITY % common.attributes 'id ID #IMPLIED account CDATA #REQUIRED' > ... <!ATTLIST purchaseOrder %common.attributes;> <!ATTLIST item %common.attributes;> IT资讯交流网 WWW.IT315.ORG
XML Schema XML Schema与DTD的比较 通过一个例子初步认识XML Schema 名称空间的概念 名称空间的声明 默认名称空间 属性的名称空间问题 引入XML Schema文档 IT资讯交流网 WWW.IT315.ORG
XML Schema与DTD的比较 XML Schema符合XML语法结构。 DOM、SAX等XML API很容易解析出XML Schema文档中的内容。 XML Schema则采用与XML文档同样的合法性验证机制。 XML Schema对名称空间支持得非常好。 XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。 XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。 XML Schema基本上满足了关系模式在数据描述上的需要。 XML Schema不能像DTD一样定义实体,比DTD更复杂。 IT资讯交流网 WWW.IT315.ORG
Schema文档范例 文件清单:xmlbook.xsd 文件清单:xmlbook.xml IT资讯交流网 WWW.IT315.ORG <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name='书架' > <xs:complexType> <xs:sequence maxOccurs='unbounded' > <xs:element name='书' > <xs:sequence> <xs:element name='书名' type='xs:string' /> <xs:element name='作者' type='xs:string' /> <xs:element name='售价' type='xs:string' /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 文件清单:xmlbook.xml <?xml version="1.0" encoding="UTF-8"?> <书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlbook.xsd"> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> </书架> IT资讯交流网 WWW.IT315.ORG
名称空间的概念 遇到了什么问题? 怎么解决? 举例: 在不同的约束模式文档中,出现表示不同含义的相同标记名称是完全有可能的。 (1)每个约束模式文档被赋以一个唯一的名称空间,每个名称空间都用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。 (2)在XML实例文档中为来自不同模式文档的元素增加不同的前缀部分,元素名称前增加的各个前缀名称分别代表各个模式文档的名称空间。 举例: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name='书架'> ... IT资讯交流网 WWW.IT315.ORG
名称空间的声明 基本格式: xmlns:前缀名称="URI" 举例: < it315:书架 xmlns:it315="http://www.it315.org/xmlbook/schema"> <it315:书> <it315:书名>JavaScript网页开发</it315:书名> <it315:作者>张孝祥</it315:作者> <it315:售价>28.00元</it315:售价> </it315:书> <书架> 在任何元素中声明的名称空间,只对该元素及其中嵌套的所有子孙元素有效,声明名称空间的元素自身上也可以使用代表该名称空间的前缀。 QName(Qualified Name,限定名)是指用冒号(:)把前缀与本地部分进行分隔的名称,即被限定在了某个名称空间中的名称。 IT资讯交流网 WWW.IT315.ORG
默认名称空间 基本格式: 举例: xmlns="URI" <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> <书架> IT资讯交流网 WWW.IT315.ORG
属性的名称空间问题 XML实例文档中通常只需要将元素限定于该模式文档的名称空间中,而不需要将该元素的属性限定于名称空间中。 例子: <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="http://example.com/std/defs" parse="xml" /> 如果属性名称中有一个前缀部分,该属性将被限定在该前缀所指定的名称空间中。如果属性名称中没有前缀部分,那么该属性就不属于任何名称空间。属性不受默认名称空间的影响。 <x xmlns="http://www.w3.org" xmlns:n1="http://www.w3.org"> <good a="1" n1:a="2" /> </x> IT资讯交流网 WWW.IT315.ORG
xml:space和xml:lang属性 前缀名“xml”已经被隐式地绑定到了一个名称空间上,内置属性名称以xml:作为前缀,自定义的属性名不能以xml:作为前缀。 xml:space属性用于设置下游应用程序应该如何处理解析器传递的空格等字符,设置值只能是“default”或“preserve”。 例子: <网址 xml:space="preserve"> www.it315.org </网址> xml:lang属性用于设置元素的本地化语言信息,ISO-639规范中规定了代表各个国家和地区的本地化语言的名称,例如“en” 表示英文、“la”表示拉丁文、“zh”表示中文、“zh-CN” 表示中文(中国)、“zh-TW” 表示中文(台湾地区)。 <product xml:lang="zh-CN" release-date="2002-08-18"/> <product xml:lang=“en-US" release-date=" 8/18/2002"/> 在某个元素中设置了xml:space和xml:lang属性,嵌套在该元素中的子孙元素都将沿袭其设置结果。 IT资讯交流网 WWW.IT315.ORG
使用名称空间 引入XML Schema文档 文件清单:xmlbook.xml <?xml version="1.0" encoding="UTF-8"?> <书架 xmlns="http://www.it315.org/xmlbook/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.it315.org/xmlbook/schema http://www.it315.org/xmlbook.xsd" > <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> </书架> XML解析程序要找XML Schema文档的根本目的是什么?无非是要获取那个Schema文档的内容信息,如果它已经知道了那个Schema文档的内容,就不用去读取这个文件了。XML解析程序都应内嵌有那些公认的标准名称空间的XML Schema文档的内容信息,因此在使用公认的标准名称空间时,不用去寻找它们所对应的XML Schema文档的内容,自然也就不用指定XML Schema文档的存储位置。 schemaLocation属性的设置值中包含有两个部分,第一个部分就是名称空间的URI,第二个部分就是该名称空间所标识的XML Schema文件的位置或URL地址,这两个部分之间用空格分隔。 IT资讯交流网 WWW.IT315.ORG
使用名称空间 引入多个XML Schema文档 文件清单:xmlbook.xml <?xml version="1.0" encoding="UTF-8"?> <书架 xmlns="http://www.it315.org/xmlbook/schema" xmlns:demo="http://www.it315.org/demo/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.it315.org/xmlbook/schema http://www.it315.org/xmlbook.xsd http://www.it315.org/demo/schema http://www.it315.org/demo.xsd"> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价 demo:币种=”人民币”>28.00元</售价> </书> </书架> IT资讯交流网 WWW.IT315.ORG
使用名称空间 引入XML Schema文档实验 Tomcat 5.x/webapps/jsp-examples/WEB-INF/web.xml文件: <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>JSP 2.0 Examples</display-name> <description> JSP 2.0 Examples. </description> ... 在这个实验中也顺便访问一下http://www.w3.org/2001/XMLSchema-instance 动手体验:访问schemaLocation属性中的xsd文件的URL IT资讯交流网 WWW.IT315.ORG
不使用名称空间 引入XML Schema文档 文件清单:xmlbook.xml <?xml version="1.0" encoding="UTF-8"?> <书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlbook.xsd"> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> </书架> 例如,这个例子中的元素就不属于任何名称空间,但是我们想说明这些词汇来自xmlbook.xsd模式文档,就可以通过noNamespaceSchemaLocation属性来指定。 IT资讯交流网 WWW.IT315.ORG
思考与实践(1) 1. 用你自己的理解简述html标记与xml标记的区别。 2. 简述xml文档声明语句中的encoding属性的作用。 <element> <![CDATA[<]]> </element> 它在浏览器中的显示结果是哪种情况? A.<element> < </element> B.<element> < </element> C.两个都不是 4. 简述XML约束模式的作用;简述什么是格式良好的XML 文档和什么是有效的XML文档,一个XML文档必须是有效的吗? 5. 当用IE浏览器打开一个使用了DOCTYPE 声明语句的XML文档时,IE浏览器会查找DOCTYPE声明语句中指定的DTD文件,但并不使用该DTD文件对当前XML文档进行有效性校验。请用一个实验来说明这种情况,然后使用XML SPY(请自己从网上下载)这个工具软件体验一下使用DTD文件对XML文档进行有效性校验的过程。要求写出详细的操作步骤和实验细节,然后将完成的结果提交给www.it315.org站点评审,表现优异者将获得www.it315.org站点的奖励和专家的指点。 IT资讯交流网 WWW.IT315.ORG
思考与实践(2) 6.请编写一个XML格式的例子文件,该文件能够表达出一个国家中的每个省及省长名称,每个省下面的每个市及市长名称,每个市下面的每个镇及镇长名称。 7.对于如下的一段XML内容: <书架 xmlns="http://www.it315.org/xmlbook/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.it315.org/xmlbook/schema http://www.it315.org/xmlbook.xsd"> … 请描述清楚如下问题: (1)xmlns="…"片断的作用; (2)xmlns:xsi="…"片断的作用; (3)xsi:schemaLocation="…"片断的作用; (4)哪些名称空间所对应的XML Schema文档的位置不用显示指定,为什么? (5)元素<书架>自身属于哪个名称空间。 IT资讯交流网 WWW.IT315.ORG
结束语 欢迎大家参与多媒体IT课堂其他课程 欢迎加入IT315把宝贵经验分享给大家 相聚的地方,就在…… HTTP://WWW.IT315.ORG IT资讯交流网 WWW.IT315.ORG