第一章:XML基础
XML基础
1)了解XML的概念
2)了解XML的特点
XML
–可扩展标记语言(eXtensible Markup Language)
–W3C提出的一种用来描述数据和交换数据的标准语言
–XML开始设计时,主要目的是用来弥补HTML作为Internet上描述数据的标准语言的不足
–XML根本作用就是要统一信息的结构,使文档具有通用性
浏览XML
–使用IE可以直接浏览XML文档
–对于正确的XML文档,如果没有任何额外的信息指示如何显示数据的情况下,浏览器一般以树状视图的形式显
示XML数据
–如果是不正确的XML文档,浏览器会报错
特点
–不能描述网页具体的外观
–可以用于不同平台之间交换数据
–没有固定的标记,允许用户随便发明和创建自己的标记——可扩展性
HTML中的标记都是特定的
–标记名称可以使用非英文字符
XML与HTML
–内容
–格式要求
–标记
–总结:
HTML用来显示数据,重点是“如何显示数据”
XML用来描述数据,重点是“数据是什么”
XML与数据库
–结构
数据库的表结构是设计者自定义的,XML文档的结构是由标记确定的
–被应用
都可以被应用程序使用
–关系
多个XML文档的元素之间还可以定义主外键关系
–使用
XML适合数据交换,但不适合于大批量数据的存储和处理
第二章:XML的基本语法
1)了解XML的文档声明
2)了解XML的元素、命名规则、属性、元素内容、处理指令等概念
文档声明
–表示该文档是一个XML文档,以及遵循哪个XML版本的规范
注意
–文档声明在XML文件中是可选的第一项
–推荐在每个XML文档中都包含文档声明
–如果在XML文件中写出了声明就必须包含version属性,表示XML的版本
<?xml version=“1.0”?>XML文档声明
文档声明属性
–encoding属性(可选的)
注明XML文档使用的字符编码方式
Unicode(缺省)——UTF-8或UTF-16
BIG5或GB2312
–standalone属性(可选的)
说明文档是否是独立的
yes(缺省)——该文档没有依赖外面的任何文件而可以独立存在
no——该文档依赖于外面的某个文件
如果同时设置了encoding和standalone属性,standalone属性要位于encoding属性之后
encoding
–采用Unicode编码时可以在XML文档声明中省略字符集编码
–当XML文档使用非Unicode编码时,必须在XML文档声明中指定其字符集编码
XML元素
–XML的基本组成单位是元素
–元素由标记来定义
标记包括起始标记<>和结束标记</>,属性要写在起始标记内
在XML中,所有元素必须有结束标记
<元素名 属性名 = "属性值">
文字内容
</元素名>
元素内容
–元素
元素内还有元素标记
–混合
元素内有元素标记和文本内容
–简单文本
元素内只有简单的文本
–空
元素内部没有携带任何信息
嵌套
–在一个元素中可以嵌套若干个子元素
/注意交叉不是嵌套
元素关系
–在XML中,各元素之间是相互关联的
–以父子关系联系
包含在另一个元素中的元素称为子元素,包含子元素的元素称为父元素
嵌套子元素必须完整地包含在它的父元素中
–XMl的元素可以重复
根元素
–没有被嵌套在其他元素内的元素,最高层元素,仅一个
–XML文档中所有元素都是根元素的子孙元素
空元素
–不包含任何内容的元素
<空元素名 属性名 = "属性值">
</空元素名>
<空元素名 属性名="属性值"/>
命名规则
–在XML中,可以使用自己需要的元素来扩展标记语言
–基本规则
元素名称不能以数字或特殊字符开头
可以包含字母,数字,下划线等
不能以字符串“XML”作为开头
不能包含空格
尽量不要包含特殊字符
区分大小写
流行的命名规则
–元素名称尽量简短
–大小写尽量采用同一标准
完全用小写字母来书写名称,当名称中包含多个单词时,相互之间用下划线隔开
–address_book
将每个单词的首字母大写,不使用分隔符
–AddressBook
–可以使用非英文字符
推荐使用英文字符+数字来命名
元素属性
–对元素做进一步的说明,由自己定义
–在XML中,属性值一定要用双引号或者单引号引起来,否则将被视为错误,推荐先使用双引号
–属性区分大小写
属性也可以被改为使用子元素来描述
属性与子元素
–尽量避免使用属性,推荐使用子元素描述数据
–属性不能包含多个值
属性应用
–有时候属性比较方便
元素内容
–CDATA(Character Data)字符数据
不想被解析程序解析的一片原始数据区(没有标记)
–“<![CDATA[”不能写成“<!{cdata[”或“<!Cdata[”
–CDATA部分是不能嵌套的
CDATA区不能出现字符串“]]>”
–可以在CDATA区嵌入其它语言的代码
JavaScript等
–PCDATA(Parsed Character Data)解析数据
由XML解析器解析的内容,当作一般的文字资料来解读(有标记的部分)
PCDATA区
–直接写在元素的起始标记和结尾标记之间的内容
–由XML解析器解析的内容,当作一般的文字资料来解读
–XML解析程序会将空格和换行如实地交给下游程序去处理
特殊字符
–有些字符不能直接写在pcdata区,如<、&等,需要实体和字符转义
处理指令—PICss.xml
–为处理XML文档的应用程序提供提示信息
–处理指令格式:
<?处理指令名处理指令信息?>
<?xml-stylesheet type=“text/css” href=“book.css”?>
–XML解析器会把处理指令原封不动地传送给应用程序,由应用程序来解释这个指令,按照它所提供的信息进行
处理
xml的注释
使用CSS
–在XML文档中标示使用CSS
–效果还可以
使用XSL
–XSL-eXtesnsible Stylesheet Language
–在XML文档中标示使用XSL
–功能更多,更强大
第三章:XML的约束模式
1)了解XML的约束模式2)了解DTD3)了解命名空间
处理流程
–计算机程序在处理XML文档之前,必须能够解析出XML文档的内容中各个元素的相关信息
–将解析出来的信息再交给下游程序进行下一步处理
–Parser——用于解析XML文档的解析器程序
Parser可以独立使用,也可以成为编辑软件或浏览器的一部分
格式良好-有效的XML文件
格式良好-Well-formed
–XML文档严格遵循一定的语法
–遵守XMl基本语法规则和规范的XML文档就称为Well-formed XML
–一个XML文档必须是格式良好的
有效的-Valid
–格式良好
–内容满足某些条件的约束
约束模式
–一套规则,对XML文档中的内容作出限制
–约束模式定义了XML文档中允许出现的元素名,元素中的属性,内容类型,及元素间的嵌套关系和出现顺序
如果为一个XML文档指定了约束模式,那么它必须满足约束模式所规定的结构、数据类型和数据关联等内容
约束模式语言
–约束模式通常都在一个单独的文件中进行定义
–约束模式的内容也需要遵循一定的语法规则
使用XML约束模式语言来定义XML约束模式的语法规则
–模式文档采用某种约束模式语言编写
XML DTD
XDR
SOX
XML Schema
UDP多用于不重要的数据传输上,因为在传输过程中有可能会丢失XML作用
用来描述页面所具有的组件,与HTML区分,HTML是用来显示组件。
XML语法
文档声明(特殊的处理指令)
元素 就是XML中的标签 包含标签体<a></a> 不包含标签体<a />
属性 属性所代表的信息也可以被改成子元素的形式来描述
注释 格式为<!—注释-->
CDATA区 语法<![CDATA[ 内容 ]]>,其中的内容会以原样输出
转义字符& & < < >> “ " ‘ '
处理指令:处理指令必须以“<?”作为开头,以“?>”作为结尾
–应用最广泛和具有代表意义的是XML DTD和XML Schema
DTD约束
<!DOCTYPE 根标签名 SYSTEM "外联DTD文件">
调用公用的DTD约束
<!DOCTYPEweb-app PUBLIC
"-//Sun Microsystems, Inc.//DTDWeb Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
可以内联也可以外联
语法:<!ELEMENT元素名称 元素类型>
XML DTD(Document Type Definition 文档类型定义)
–最早出现的一种XML约束模式语言
–目前使用最广泛的一种XML约束模式
–以.dtd为扩展名
XML Schema
–对XML文档内容进行约束的另外一种模式
–目的是为了克服DTD的局限性,为XML提供丰富的语法结构
–XML Schema已经成为W3C的正式推荐标准
–以.xsd为扩展名
有效的XML
–遵循XML 的基本语法规则,且符合为它指定的某个XML约束模式的XML文档
–一个XML文档不一定需要是有效的,但必须是格式良好的
校验
–将一个XML文档和它所引用的XML约束模式进行比较分析,看其中的内容是否符合XML约束模式的过程
–校验过程也是通过解析器程序软件Parser来处理
非校验类解析器——Well-formed XML
校验类解析器——Valid XML
DTD
–早期的一种XML约束模式语言
–通过比较XML文档和DTD文件,判断XML文档是否是Valid XML文档
–一个DTD文件中包含元素和元素之间关系的定义,元素的属性定义,以及实体和符号的定义
–DTD文件是文本格式的文件,后缀名为.dtd
DTD的使用
–格式:
<!ELEMENT 元素名称使用规则>
–使用规则
定义元素中包含的组成部分,以及每种组成成分出现的次数、次序,还可以是某些成分进行某种关系组合后出
现的次数、次序
DTD的使用-解析一
(book+)
–表示bookstore元素中要嵌套book子元素
+:表示它修饰的成分必须出现一次或多次
?:只能出现一次或不出现
*:可以不出现,也可以出现多次
( ):一组要共同匹配的表达式
不使用任何字符,表示必须且只能出现一次
<!ELEMENT bookstore(book+)>
<!ELEMENT bookstore(book,author,price)>
<!ELEMENT bookstore(#PCDATA)>
<!ELEMENT bookstore(#PCDATA)>
<!ELEMENT bookstore(#PCDATA)>
| : 或(OR)
元素A, 元素B, 元素C 元素之间以逗号分割,要求严格遵从顺序要求
元素A 元素B 元素C 元素之间以空格分割,无须遵从顺序要求
DTD的使用-解析二
(title,author,price)
–表示book元素中要嵌套title、author、price子元素,并且这些子元素要按顺序依次出现,只能出现一次
–如果没有“,”隔开,表示各子元素可以任意次序出现,但必须且只能出现一次
–如果使用“|”隔开,表示只能出现它们之中的任何一个
DTD的使用-解析三
(#PCDATA)
–用于表示元素中的内容是普通文本字符串
DTD的编码
编码
–应该使用UTF-8或Unicode编码
–如果有中文字符,需要指定编码
引入外部DTD文件
使用文档类型声明引入DTD
–DOCTYPE声明语句(如Struts的配置文件)
DOCTYPE声明语句格式
<!DOCTYPE 文件类型名称 SYSTEM "DTD文件的URL">
<!DOCTYPE 文件类型名称 PULBIC "DTD名称" "DTD文件的URL">
文档声明语句解析(一)
文档类型名称由编写者自己定义,通常是使用XML文档的根元素名称作为文档类型名称
文档声明语句解析(二)
SYSTEM表示XML文档所遵循的是一个本地或者组织内部所编写和使用的DTD文件
PUBLIC表示XML文档遵循的是一个由权威机构制定的,公开提供给特定行业或公众使用的DTD文件
文档声明语句解析(三)
DTD文件的标识名称,需要使用双引号括起来,应该符合一些标准的规定
ISO:ISO标准的DTD+:被改进的非ISO标准的DTD-:未被改进的非ISO标准的DTD
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>
文档声明语句解析(四)
表示DTD文件所在的位置,需要使用双引号括起来
可以是相对URL,也可以是绝对URL
指定DTD文件在Internet上的绝对URL
有效性验证
–要求解析器必须对XML文档进行有效性验证时,XML声明语句中的standalone属性应该设置为“no”
–使用专门的XML工具软件XML SPY
嵌入DTD定义语句
嵌入DTD
–可以在XML中嵌入使用DTD
<?xml version = "1.0" encolding = "UTF-8" Standlone = "yes" ?>
<!DOCTYPE 根元素名[
DTD定义语句
.....
]>
判断是否有效
名称空间
<table>桌子</table> <table>表格</table>
解决
–使用名称空间来区分每个约束模式文档
–在XML实例文档中为元素增加前缀
前缀部分:本地部分==========QName限定名
名称空间声明 --------------xmlns:前缀名称="URI"
–在XML实例文档中为某个模式文档的名称空间指定一个临时的简写名称
–名称空间声明可以位于一个元素的开始标记中,并且在一个元素中可以声明多个名称空间
<? xml version="1.0" encoding="UTF-8"?>
<IT315:书架
xmls:it315="http://java.sun.com/dtd/web-app_2_3.dtd">
<it315 : 书>
<it315 : 书名>Network</it315:书名>
</it315 : 书>
</it315 : 书架>
名称空间的作用域
作用域
–一个名称空间声明可以作用到元素和属性
–在任何元素中声明的名称空间,只对该元素及其中嵌套的所有子孙元素有效
如果在里层元素中声明的名称空间前缀与外层元素中声明的另外一个名称空间的前缀名称相同,那么
在里层元素及其子孙元素范围内,该前缀名称对应的是里层元素中声明的名称空间
默认名称空间
默认名称空间—defaultnsbook.xml
–在名称空间中省略前缀部分
xmlns:前缀名称="URI" ----> 名称空间声明
xmlns="URI" -----------> 默认名称空间
–以这种方式声明的名称空间将作为其作用域内所有元素的默认名称空间,即该作用域内的所有没有指定前缀
部分的元素都属于这个名称空间
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
第四章:XSLT的使用
1)了解XSLT的概念
2)可以使用XSLT对XML文档进行转换
XSL简介
–是XML的样式表语言
XSL由三部分组成
–XML文档转换:XSL Transformation,又叫XSLT
XSLT是一种比CSS强大很多的语言,可以将XML文档转换成其他格式的文档
–模式匹配语法:a pattern matching syntax,又叫XPath
XPath是一种用于标识XML文档各个部分的语言
–格式化对象:a formatting object interpretation,XSL FO
XSLT简介
–XSL中最重要的部分就是XSLT
–XSLT将XML文档转换为XHTML文档或者其他XML文档
–通过XSLT,你可以从已输出的文件里添加/移除元素和属性,也可以把元素重新排列和分类,实现更多功能
XSLT与CSS比较
–
二者都可以格式化XML文档
–
但是相较于XSLT,CSS有以下缺点
不能重新排序文档中的元素
不能判断和控制哪个元素被显示,哪个不显示
不能统计、计算元素中的数据
–CSS适合输出较固定的最终文档,简洁,消耗资源少
–将CSS和XSLT结合起来使用:服务器端使用XSLT处理文档,在客户端使用CSS控制显示
元素语法
–xsl:template和xsl:apply-templates
–xsl:value-of
–xsl:for-each
–xsl:if
–xsl:choose、when、otherwise
–xsl:sort
xsl:template
–XSLT文件就是由一个个的模板组成
–模板分两部分
匹配模式(match pattern):定义XML源文档中哪一个节点将被模板处理
执行:定义输出的是什么格式
–语法
<xsl:template match=pattern name=qname priority=number mode=qname>
–<!–执行内容-->
</xsl:template>
示例
–如,我们处理一个包含章节和段落的文档,用para元素定义段落,用chapter元素定义章节
–下面语句中模板匹配所有的para元素
<xsl:template match=“para”></xsl:template>
–下面语句中模板匹配所有para元素和所有chapter元素
<xsl:template match=“(chapter|para)”></xsl:template>
–下面语句中模板匹配所有父节点为chapter元素的para元素
<xsl:template match=“chapter/para”></xsl:template>
–下面语句中模板匹配根节点
<xsl:template match=“/”></xsl:template>
xsl:apply-templates
–表示处理哪一个节点,被包含在xsl:template中
–语法
<xsl:apply-templates select=node set-expression mode=qname>
</xsl:apply-templates>
apply-templates
示例
–<xsl:template match=“/”>
–<xsl:apply-templates select=“para”/>
–</xsl:template>
上面代码表示模板匹配整个文档(根节点),具体执行时处理根节点下的所有para元素
–<xsl:template match=“para”>
–<p><xsl:apply-templates /></p>
–</xsl:template>
表示模板匹配para节点,所有para的子元素都被处理
xsl:value-of
–用来将源文档中元素的文本值写到输出文档中
<xsl:value-of select=“节点名称”/>
xsl:for-each
–可以循环处理被选择的节点
–<xsl:for-each select=“节点名称”>
–其它内容
–</xsl:for-each>
–示例:for_each.xml for_each.xsl
xsl:if
–类似普通程序语言的if条件语句,允许设定节点满足某个条件时,被模板处理
<xsl:if test=布尔表达式>
其它内容
</xsl:if>
xsl:choose
–在xsl:if语法中没有else的属性,如果需要进行多项选择,可以使用xsl:choose/xsl:when/xsl:otherwise系
列流程控制语法
<xsl:choose>
<xsl:when test=“”>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
xsl:sort
–在XSLT中可以对XML源文档的元素进行重新排序
<xsl:sort select=“排序的元素”order=“ascending/descending”/>