XML 编程
XML技术讲座之一
XML的诞生
首先,让我们来回顾一下可扩展置标语言XML(eXtensible Markup Language)的发展简史。
XML有两个先驱--SGML和HTML,这两个语言都是非常成功的置标语言,但是它们都在某些方面存在着与生俱来的缺陷。SGML(Standard Generalized Markup Language)的全称是标准通用置标语言,它为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在分类和索引数据中非常有用。但是,SGML非常复杂,并且价格昂贵,几个主要的浏览器厂商都明确拒绝支持SGML,使SGML在网上传播遇到了很大障碍。
相反,超文本置标语言HTML(HyperText Markup Language)免费、简单,在世界范围内得到了广泛的应用。它侧重于主页表现形式的描述,大大丰富了主页的视觉、听觉效果,为推动WWW的蓬勃发展、推动信息和知识的网上交流发挥了不可取代的作用。可是,HTML也有如下几个致命的弱点,这些弱点逐渐成为HTML继续发展应用的障碍。
- HTML是专门为描述主页的表现形式而设计的,它疏于对信息语义及其内部结构的描述,不能适应日益增多的信息检索要求和存档要求。
- HTML对表现形式的描述能力实际上也还非常不够,它无法描述矢量图形、科技符号和一些其他的特殊显示效果。
- HTML的标记集日益臃肿,而其松散的语法要求使得文档结构混乱而缺乏条理,导致浏览器的设计越来越复杂,降低了浏览的时间效率与空间效率。
正因为如此,1996年人们开始致力于描述一个置标语言,它既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。XML就是这样诞生的。
正象SGML和HTML一样,可扩展置标语言XML也是一种置标语言,它通过在数据中加入附加信息的方式来描述结构化数据。不过,XML并非象HTML那样,只提供一组事先已经定义好的标记。准确地说,它是一种元置标语言,允许程序开发人员根据它所提供的规则,制定各种各样的置标语言。在XML中,置标的语法是通过文档类型定义DTD(Document Type Definition)来描述的,也就是说,通过DTD来描述什么是有效的标记,并进一步定义置标语言的结构。除了定义置标的语法外,为了明确各个标记的含义,XML还使用与之相连的样式单(style sheet)来向应用程序,比如浏览器,提供如何处理显示的指示说明。一言以蔽之,XML是通过数据文档、DTD、样式单三个分离的部分来描述数据的。
虽然XML貌似复杂,但它有一些突出的优点:
1. 良好的可扩展性。XML允许各个不同的行业根据自己独特的需要制定自己的一套标记,同时,它并不要求所有浏览器都能处理这成千上万个标记,同样也不要求一个置标语言能够适合各个行业各个领域的应用,这种具体问题具体分析的方法更有助于置标语言的发展。
2. 内容与形式的分离。正如前面所说,XML中信息的显示方式已经从信息本身中抽取出来,放在了"样式单"中。这样做便于信息表现方式的修改,便于数据的搜索,也使得XML具有良好的自描述性,能够描述信息本身的含义甚至它们之间的关系。
3. 遵循严格的语法要求。XML不但要求标记配对、嵌套,而且还要求严格遵守DTD的规定。这增加了网页文档的可读性和可维护性,也大大减轻了浏览器开发人员的负担,提高了浏览器的时间空间效率。
4. 便于不同系统之间信息的传输。不同企业、不同部门中往往存在着许多不同的系统,XML可以用作各种不同系统之间的交流媒介,是一种非常理想的网际语言。
5. 具有较好的保值性。XML的保值性来自它的先驱之一--SGML语言,可以为文档提供50年以上的寿命。
正是基于这些优点,国际标准化组织--万维网联盟W3C(World Wide Web
Consortium)推荐XML作为第二代网页发布语言。
最后,让我们来看一个完整的XML例子,以便对XML的整体机制有一个大致的了解。在下面的例子中,我们用XML来描述一个学生花名册的信息列表。我们先为这些数据定义一个DTD:
Stuml.dtd
<?xml version="1.0"
encoding="GB2312"?>
<!ELEMENT 学生花名册 (学生)*>
<!ELEMENT 学生 (学号, 姓名, 性别, 籍贯, 出生日期)>
<!ELEMENT 出生日期 (年, 月, 日)> <!ELEMENT 学号
(#PCDATA)> <!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)> <!ELEMENT 籍贯
(#PCDATA)> <!ELEMENT 年 (#PCDATA)>
<!ELEMENT 月 (#PCDATA)> <!ELEMENT 日
(#PCDATA)> |
关于学生花名册信息的标准XML文档是这样的:
Student.xml
<?xml version = "1.0" encoding="GB2312" standalone =
"no"?> <!DOCTYPE 学生花名册 SYSTEM "stuml.dtd">
<?xml-stylesheet type="text/xsl"
href="mystyle.xsl"?> <学生花名册> <学生>
<学号>001</学号> <姓名>张三</姓名>
<性别>男</性别> <籍贯>北京市</籍贯>
<出生日期> <年>1980</年>
<月>3</月> <日>1</日>
</出生日期> </学生> <学生>
<学号>002</学号> <姓名>李四</姓名>
<性别>女</性别> <籍贯>河北省</籍贯>
<出生日期> <年>1979</年>
<月>5</月> <日>12</日>
</出生日期> </学生> </学生花名册>
|
现在我们为它制定一个样式单,以描述这些数据的显示:
Mystyle.xsl
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40" result-ns="">
<xsl:template><xsl:apply-templates/></xsl:template>
<xsl:template match = "/"> <HTML>
<HEAD> <TITLE>学生花名册</TITLE>
</HEAD> <BODY> <xsl:apply-templates
select="学生花名册"/> </BODY> </HTML>
</xsl:template> <xsl:template match =
"学生花名册"> <xsl:for-each select="学生">
<UL> <LI><xsl:value-of
select="姓名"/></LI> <UL> <LI>学号:
<xsl:value-of select="学号"/></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>
<LI>出生日: <xsl:value-of
select="出生日期/日"/></LI> </UL>
</UL> </xsl:for-each>
</xsl:template> </xsl:stylesheet>
|
在IE5中看到的XML文件的显示结果是这样的:
l 张三 m 学号: 001 m 性别: 男 m 籍贯: 北京市 m 出生年:
1980 m 出生月: 3 m 出生日: 1 l 李四 m 学号: 002 m
性别: 女 m 籍贯: 河北省 m 出生年: 1979 m 出生月: 5 m 出生日: 12
|
有兴趣的读者可以用"记事本"录入上面这三个文件,分别存盘后放在一个目录中,然后用IE5打开文件student.xml,看看结果是不是这样。
来源:网络世界
|