510 likes | 695 Views
XML 语言 及其应用. 马自卫 北京邮电大学图书馆 信息处理和数字图书馆研究所 2002 年 11 月 8 日. 主要内容. XML 概述 什么是 XML XML 应用实例 XML 和 HTML 比较 XML 语法 XML 文档的逻辑结构 XML 整体逻辑结构总结 XML 文档的物理结构 DTD 的建立和使用 1) DTD 概述 2) 元素定义 3) 定义元素属性 4. Scheme 的建立与应用. XML 概述. 什么是 XML. 什么是 Html ( 例 1 - 1 ) 什么是 Xml ( 例 1 - 2 )
E N D
XML语言及其应用 马自卫 北京邮电大学图书馆 信息处理和数字图书馆研究所 2002年11月8日
主要内容 • XML概述 • 什么是XML • XML应用实例 • XML和HTML比较 • XML语法 • XML文档的逻辑结构 • XML整体逻辑结构总结 • XML文档的物理结构 • DTD的建立和使用 1) DTD概述 2) 元素定义 3) 定义元素属性 4. Scheme的建立与应用
什么是XML • 什么是Html(例1-1) • 什么是Xml(例1-2) • 需要DTD作为置标的语法 • 需要样式单来显示 • DTD的描述(例1-3) 2)XML应用实例
返回 例1-1 <UL> <LI>张三</LI> <UL> <LI>用户ID:001</LI> <LI>公司:A公司</LI> <LI>EMAIL:zhang@aaa.com</LI> <LI>电话:(010)62345678</LI> <II>地址:五街1234号</LI> <U>城市:北京市</LI> <LI>省份:北京</LI> </Ul> <LI>李四</LI> <UL> <U>用户ID:002</LI> <LI>公司:B公司</LI> <LI>EMAIL:li@bbb.org</LI> <LI>电话:(021)87654321</LI> <LI>地址:南京路9876号</LI> <LI>城市:上海市</LI> <LI>省份:上海<LI> </UL> </UL>
返回 例1-2 <联系人列表> <联系人> <姓名>张三</姓名> <ID>001</ID> <公司>A公司</公司> <EMAIL>zhang@aaa.com</EMAIL> <电话>(010)62345678</电话> <地址> <街道>五街1234号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人> <联系人> <姓名>李四</姓名> <ID>002</ID> <公司>B公司</公司> <EMAII>1i@bbb.org</EMAII> <电话>(021)87654321</电话> <地址> <街道>南京路9876号</街道> <城市>上海市</城市> <省份>上海</省份> </地址> </联系人> </联系人列表>
返回 例1-3 <!ELEMENT 联系人列表(联系人)*> <!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)> <!ELEMENT 地址(街道,城市,省份)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT ID(#PCDATA)> <!ELEMENT 公司(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ELEMENT 电话(#PCDATA)> <!ELEMENT 街道(#PCDATA)> <!ELEMENT 城市(#PCDATA)> <!ELEMENT 省份(#PCDATA)>
XML应用实例 • 为置标语言FCLML公司的客户列表置表语言制定的,文档类型定义DTD,其程序为fclml.dtd(例1-4) • 客户联系信息的XML文档Client.xml (例1-5) • 为client.xml制定一个样式Mystyle.xsl (例1-6) • Html格式及显示(例1-7,例1-8) 3)XML和Html比较
返回 例1-4 Fclml.dtd <? xml version=“1.0” encoding=“GB2312”? > <!ELEMENT 联系人列表(联系人)*> <!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)> <!ELEMENT 地址(街道,城市,省份)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT ID(#PCDATA)> <!ELEMENT 公司(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ELEMENT 电话(#PCDATA)> <!ELEMENT 街道(#PCDATA)> <!ELEMENT 城市(#PCDATA)> <!ELEMENT 省份(#PCDATA)>
返回 例1-5 Clent.xml < ? xml version=“1.0”encoding=”GB2312” standalone=”no”?> <!DOCTYPE 联系人列表 SYSTEM”fclml.dtd”> <?xml—stylesheet type=”text/xsl” href=“mystyle.xsl”?> <联系人列表> <联系人> <姓名>张三</姓名> <ID>001</ID> <公司>A公司</公司> <EMAIL>zhang@aaa.com</EMAIL> <电话>(010)62345678</电话> <地址> <街道>五街1234号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人> <联系人> <姓名>李四</姓名> <ID>002</ID> <公司>B公司</公司> <EMAII>1i@bbb.org</EMAII> <电话>(021)87654321</电话> <地址> <街道>南京路9876号</街道> <城市>上海市</城市> <省份>上海</省份> </地址> </联系人> </联系人列表>
返回 例1-6 MyStyle.xsl <?xml version="1.0"encOding="GB2312"?> <xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl" xmlHs="http://www.w3.org/TR/REC—html40" result—ns:=""> <xst:template><xsI:apply—templates/></xsl:template> <xsl:template match="/"> <HTML> <HEAD> <TITLE>F公司的客户联系信息</TITlE> </HEAD> <BODY> <xsl:apply—templates select="联系人列表"/> </BODY> </HTMI> </xsl:template>
例1-6 <xsl:stemplat match="联系人列表"> <xsl:for—each select="联系人"> <UL> <LI><xsl:value—of select="姓名"/><LI> <UL> <LI>用户ID:<xsl:value—of select="ID"/></LI> <LI>公司:<xsl:value—of select=“公司"/></LI> <LI>EMAIL:<xsl:value—of select=“EMAIL"/></LI> <LI>电话:<xsl:value—of select=“电话"/></LI> <LI>街道:<xsl:value—of select=“地址/街道"/></LI> <LI>城市:<xsl:value—of select=“地址/城市"/></LI> <LI>省份:<xsl:value—of select=“地址/省份"/></LI> </UL> </UL> </xsl:for-each> </xsl:template> </xsl:stylesheet>
返回 例1-7 <HTML> <HEAD> <TITLE>F公司的客户联系信息</TITLE> </HEAD> <BODY> <UL> <LI>张三</LI> <UI> <LI>用户ID:001</LI> <LI>公司:A公司</LI> <LI>EMAIL:zhang@aaa.com</LI> <LI>电话:(010)62345678</LI> <LI>地址:五街1234号</LI> <LI>城市:北京市</LI> <LI>省份:北京</LI> </UL> <LI>李四</LI> <UL> <LI>ID:002</LI> <LI>公司:B公司</LI> <LI>EMAIL:1i@bbb.or8</LI> <LI>电话:(021)87654321</LI> <LI>地址:南京路9876号</LI> <LI>城市:上海市</LI> <LI>省份:上海</LI> </UL> </UL> </BODY> </HTML>
返回 例1-8 • 张三 • 用户ID:001 • 公司:A公司 • EMAIL:zhang@aaa.com • 电话:(010)62345678 • 地址:五街1234号 • 城市:北京市 • 省份:北京 • 李四 • ID:002 • 公司:B公司 • EMAIL:1i@bbb.or8 • 电话:(021)87654321 • 地址:南京路9876号 • 城市:上海市 • 省份:上海
GML(1969) 通用置标语言 SGML(1985) 标准通用置标语言 超文本置标语言 HTML(1993) XML(1998) 可扩展置标语言 XHTML SVG SMIL HDML … OEB 可缩放矢量图形语言 同步多媒体综合语言 手持设备置标语言 可扩展超文本置标语言 开放电子结构规范 XML和Html比较 置标语言家谱表
XML文档的逻辑结构 • 例2-1 • 一个XML文档最基本构成 • 上例出现的逻辑要素 • 元素、根元素 • 数据块CDATA节作用 • 注释 • 处理指令PI 2)XML整体逻辑结构总结
例2-1 [1]<?xmlversion=“1.0”encoding=”GB2312“standalone=”no“?> [2]<?xml—stylesheet type=“text/xsl”href=”mystyle.xsl”?> [3]<专有名词列表> [41 <专有名词> [5] <名词>XML</名词> [6] <解释>XMI。是一种可扩展的元置标语言,它可用以规定新的置标规则,并根据 这个规则组织数据</解释> [7] <示例> [8] <!—一个XML的例子—> [9] <![CDATA[ [10] <联系人> [11] <姓名>张三</姓名> [12] <EMAIL>zhang@aaa.com</EMAIL> [13] </联系人> t14] ]]> [15] </示例> [16] </专有名词> [17]</专有名词列表>
返回 例2-1 一个XMl文档最基本的构成是: ●XMl声明 ●处理指令(可选) ●XML元素 例2—1中出现的逻辑要素有: ●[1]是XML声明 ●[2]是处理指令 ●[3]一[17]是文档中的各个元素 ●[8]是注释 ●[9]~[14]是CDATA节 ●在[5]行的“<名词>XML</名词>”中,“<名词>”“</名词>”是标记,“XML” 是字符数据。
XML整体逻辑结构总结 • XML文档通常以一个XML声明开始 • 通过XML元素来组织XML数据 • XML元素包括标记和字符数据 • 为组织数据更方便、清晰,在字符数据中引入CDATA数据块 • 在文档中引入注释 • 需要给XML处理程序提供一些指示信息,XML文档中可以包含处理指令
XML文档的物理结构 • 参数实体引用与通用实体引用的差异(例2-2,例2-3) 3 DTD的建立和使用
返回 例2-2 <?xml version=“1.0”encoding=”GB2312”standalone=“no”?> <!DOCTYPE信件[ <!ENTITY lettersign ”张三 某网络公司销售部门 北京市海淀区中关村88号,100000”</正文>> ]> <信件> <收件人>李四</收件人> <主题>hello</主题> <正文>hello!&1ettersign; </信件> 同样,参数实体的引用与通用实体的引用大同小异,只是要把实体换 为%就可以了,形式是: %实体名;
返回 例2-3 <?xml version=“1.0”encoding=”GB2312“standalone=“no”?> <!DOCTYPE联系人列表[ <!ENTITYA公司地址“北京市五街1234号’> <!ENTITYB公司地址”上海南京路9876号“> ]> <联系人列表> <联系人> <姓名>张三</姓名> <公司>A公司</公司> <地址>&A公司地址;</地址> </联系人> <联系人> <姓名>李四</姓名> <公司>B公司</公司> <地址>&B公司地址;</地址> </联系人> <联系人> <姓名>王五</姓名> <公司>B公司</公司> <地址>&B公司地址;</地址> </联系人> </联系人列表>
DTD概述 • 概述 • 是一套关于标记符的语法规则 • 可以是XML文档的一部分,但通常是一份单独的或一系列的文档 • 想使用XML进行数据交换的行业或组织可定义自己的DTD • DTD规定了语法分析器解释所有细节
DTD概述 • 内部DTD • 文档由前导说明和文档体构成,前导说明中包含XML声明,文档体中是具体的数据信息,前导说明中可包含DTD定义。 • 一个包含DTD的XML文档的结构(例3-1) 继续
例3-1 C1ient.xml <?xml version=“1.0”encoding=”GB2312,standalone=“yes”> <!DOCTYPE联系人列表[ <!ELEMENT 联系人列表(联系人)*> <!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)> <!ELEMENT 夏NT地址(街道,城市,省份)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT ID(#PCDATA)> <!ELEMENT 公司(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ELEMENT 电话(#PCDATA)> <!ELEMENT 街道(#PCDATA)> <!ELEMENT 城市(#PCDATA)> <!ELEMENT 省份(#PCDATA)> ]> <?xml—stylesheet type="text/xsl" href="mystyle.xsl"?>
返回 例3-1 <联系人> <姓名>李四</姓名> <ID>002</ID> <公司>B公司</公司> <EMAlL>1i@bbb.org</EMAIL> <电话>(021)87554321</电话> <地址> <街道>南京路9876号</街道> <城市>上海市</城市> <省份>上海</省份> </地址> </联系人> </联系人列表> <联系人列表> <联系人> <姓名>张三</姓名> <ID>001</ID> <公司>A公司</公司> <EMAIL>zhang@aaa.com</EMAIL> <电话>(010)62345678</电话> <地址> <街道>五街1234号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人>
DTD概述 • 外部DTD(例3-2,例3-3) • 公用DTD • 每个XML文档单独定义的DTD可推广为一个系统内共享的公用DTD • 关键字system用于引用一个作者或组织所编写的众多XML文档中通用的DTD • 另一种外部DTD,一个由权威机构制定的,提供给特定行业或公众使用的DTD。关键字是PUBLIC(例3-4) 2)元素定义
返回 例3-2 <? xml version=“1.0” encoding=“GB2312”? > <!ELEMENT 联系人列表(联系人)*> <!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)> <!ELEMENT 地址(街道,城市,省份)> <!ELEMENT 姓名(#PCDATA)> <!ELEMENT ID(#PCDATA)> <!ELEMENT 公司(#PCDATA)> <!ELEMENT EMAIL(#PCDATA)> <!ELEMENT 电话(#PCDATA)> <!ELEMENT 街道(#PCDATA)> <!ELEMENT 城市(#PCDATA)> <!ELEMENT 省份(#PCDATA)>
返回 例3-3 < ? xml version=“1.0”encoding=”GB2312” standalone=”no”?> <!DOCTYPE 联系人列表 SYSTEM”fclml.dtd”> <?xml—stylesheet type=”text/xsl” href=“mystyle.xsl”?> <联系人列表> <联系人> <姓名>张三</姓名> <ID>001</ID> <公司>A公司</公司> <EMAIL>zhang@aaa.com</EMAIL> <电话>(010)62345678</电话> <地址> <街道>五街1234号</街道> <城市>北京市</城市> <省份>北京</省份> </地址> </联系人> <联系人> <姓名>李四</姓名> <ID>002</ID> <公司>B公司</公司> <EMAII>1i@bbb.org</EMAII> <电话>(021)87654321</电话> <地址> <街道>南京路9876号</街道> <城市>上海市</城市> <省份>上海</省份> </地址> </联系人> </联系人列表>
返回 例3-4 <!DOCTYPE 根元素 PUBLIC”DTD名称“”外部DTD的URL”> <!DOCTYPE 联系人列表 PUBLIC”联系人DTD“”http://www.mydomain.com/dtds/fclml.dtd”>
元素定义 • DTD作用 • 告诉语法分析器它所关联的XML文档的根元素、内容及结构 • 元素说明部分,使用元素类型声明ETD声明所有有效的文档元素 • XML元素可以为空,也可以是纯文本或若干个子元素,子元素同时可以有各自的子元素。DTD通过元素之间父子关系描述整个文档的结构关系。(例3-5)
元素定义 • 元素及其子元素 • 其核心思想是采用“匹配”的逻辑(例3-6) 3)定义元素属性
返回 例3-5 < ? xml version=“1.0”encoding=”GB2312” standalone=”yes”?> <!DOCTYPE 联系人列表〔 <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人(姓名)> <!ELEMENT 姓名(#PCDATA )> 〕 > <联系人列表> <联系人> <姓名>张三</姓名> < /联系人> < /联系人列表>
返回 例3-6 <!ELEMENT 联系人 (姓名,EMAIL)+> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)>
定义元素属性 • 定义 • 元素名是属性所属的元素的名字 • 属性名是属性的名字 • 缺省值是属性的初值 • 属性类型用来指定其属于哪种有效属性 • 属性值(例3-7,例3-8,例3-9,例3-10)
例3-7,3-8,3-9 • 例3-7 • <!ATTLIST 元素名 属性名 属性类型 #REQUIRED> • <!ATTLIST 页面作者 姓名 CDATA #REQUIRED> • 例3-8 • <!ATTLIST 元素名 属性名 属性类型 #IMPLIED> • <!ATTLIST 页面作者 • 姓名 CDATA #IMPLIED • 年龄 CDATA #IMPLIED • 联系信息 CDATA # REQUIRED • > • 例3-9 • <!ATTLIST 元素名 属性名 属性类型 #FIXED”缺省值“> • <!ATTLIST 页面作者 • 姓名 CDATA #IMPLIED • 年龄 CDATA #IMPLIED • 联系信息 CDATA #REQUIRED • 网站职务 CDATA #FIXED”页面作者“ • >
例3-10 • 例3-10 • <!ATTLIST 元素名 属性名 属性类型 ”缺省值“> • <!ATTLIST 页面作者 • 姓名 CDATA #IMPLIED • 年龄 CDATA #IMPLIED • 联系信息 CDATA #REQUIRED • 网站职务 CDATA #FIXED”页面作者“ • 个人爱好 CDATA “上网” • >
1. Schema 的建立与应用 1) 在前面,我们介绍了DTD,作为XML 1.0规范的重要组成部分,DTD对于XML文档的结构起到很好的描述作用。 2) XML Schema 实际上也是XML的一种应用,就是将XML DTD重新按照XML语言规范来定义,这充分体现了XML自描述性的特点。
例4-1 1.<?xml version=“1.0” encording=“GB2312”?> 2. 3. <学生花名册 年级=“六年级” 班级=“一班”> • <学生> • <姓名>李华</姓名> • <籍贯>河北</籍贯> • <年龄>14</年龄> • <电话>62875555 </电话> • </学生> • <学生> • <姓名>王珊</姓名> • <籍贯>北京</籍贯> • <年龄>12</年龄> • <电话>82618888</电话> • </学生> 16. </学生花名册>
1. Schema 的建立与应用 将上述XML文档的结构用DTD来描述如下: <!DOCTYPE 学生花名册[ <!ELEMENT 学生花名册 (学生*)> <!ATTLIST 学生花名册 年级 CDATA # REQUIRED 班级 CDATA # IMPLIED> <!ELEMENT 学生 (姓名+,籍贯,年龄,电话?)> <!ELEMENT 姓名 (# PCDATA)> <!ELEMENT 籍贯 (# PCDATA)> <!ELEMENT 年龄 (# PCDATA)> <!ELEMENT 电话 (# PCDATA)> ]>
1. Schema 的建立与应用 3)上述第2行可用下面语句替换: <!DOCTYPE 学生花名册 SYSTEM “roster.dtd”> 4) 不难分析出这个XML文档的结构:根元素“学生花名册”有两个属性,一个是“年级”,另一个是“班级”;“学生花名册”元素下是“学生”元素,该元素不包含文本,但却包含“姓名”、“籍贯”、“年龄”、“电话”四个子元素,这些子元素均只包含文本,而不包涵子元素和属性。
1. Schema 的建立与应用 5)用XML Schema 来描述,可写成下面的程序,取名rosterschema.xml。 1.<?xml version=“1.0” encording=“GB2312”?> 2.<Schema xmlns=“urn:schemas-microsoft- com:xml-data” xmlns:dt=“urn:schemas-microsoft-com:datatypes”> • <AttributeType name=“年级”/> • <AttributeType name=“班级”/> • <ElementType name=“姓名”/> • <ElementType name=“籍贯”/> • <ElementType name=“年龄”/>
(续上例) 8. <ElementType name=“电话” dt:type=“fixed.14.4”/> 9. <ElementType name=“学生” content=“eltOnly”/> 10. <elementType name=“姓名”/> • <elementType name=“籍贯”/> • <elementType name=“年龄”/> • <elementType name=“电话”/> 14. <ElementType > 15. <ElementType name=“学生花名册” content=“eltOnly”/> • <elementType =“学生”/> • <attribute type=“年级”/> • <attribute type=“班级”/> • </Element Type> 20.</Schema>
1. Schema 的建立与应用 6)为了给roster.xml指定文档定义规则,roster.xml第2行可用下面语句替换: <学生花名册 xmlns=“x-schema:rosterschema.xml”> 7)本XML Schema 的实现语法受到微软Internet Explorer 5.0的支持。该语法主要综合了W3C的两个Note规范XML-Data(http://www.w3.org/TR/1998/NOTE-XML-data-0105/)和文档内容描述(DCD)(http://www.w3.org/TR/NOTE-dcd),并加入一些扩展。因为微软的地位以及Internet Explorer 5.0的普及程度,因此该语法实现具有较强的适用性。
1. Schema 的建立与应用 8)XML Schema 让开发更轻松,下面逐句分析一下rosterschema.xml。 • 第1行是XML类型声明语句,指明该文档是一个XML文档,并且符合版本1.0规范;该文档采用GB2312编码。 • 第2行是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一个是xmlns=“urn:schemas- microsoft-com:xml-data” ,它指定本文档是一个XMLSchema文档;另一个是xmlns:dt=“urn:schemas-microsoft-com:datatypes”>,它定义了本文档中可以使用的数据类型。
1. Schema 的建立与应用 • 第3、4行是属性定义语句, 它定义了两个属性:年级和班级。 • 第5~8行是元素定义语句,它定义了两个属性:年级和班级。 • 第9 ~14行定义了本XML Schema的二级元素:学生,指明该元素含有包含四个子元素:姓名、年龄、籍贯、电话。 • 第15~19行定义了本XML Schema的顶级元素:学生花名册,指明该元素包含一个子元素:学生,以及两个属性:年级、班级。 • 第20行是结束标记语句,它指明该XML Schema 的描述到此为止。