XML入门问答
作者:
----------------------
我们日常书写的语言,被称为书面自然语言。如果在书面自然语言中为了标识某些信息,而加入一些标记,这种书面自然语言就可被称为置标语言(英语为:Markup Language)。比如在一段书面语言中,为了说明某一句话的重要,在这句话下面画上底划线。但是,我们在这里解释的置标语言,实际上是一种为了计算机处理而设计的置标语言,其中所用到的标记,往往使用代表一定含义的文字或数字表示。通常的做法是,根据需要,先定义一套助意的标记,然后将这套标记添加到书面语言中去,使书面语言变成置标语言。
例如,我们为了让计算机了解,一段书面语言中,那一部分是标题,那一部分是作者名,那一部分是正文,我们定义如下一套标记:
<标题>、</标题>;<作者>、</作者>;<正文>、</正文> 那么,我们就可以将上面这段书面语言改写成置标语言:
<标题>什么是置标语言?</标题>
<作者>xml.net.cn</作者>
<正文>我们日常书写的语言,被称为书面自然语言。… …</正文>
置标语言,不同于一般的控制流程序设计语言,基本上可以被视为是一种数据流的文档结构描述语言。在计算机处理过程中,置标语言的标记既可以作为数据,也可以作为控制语句来使用。
在计算机程序语言中,一般把一种语言的定义整体称为某某程序设计语言,而把用这种语言编写的文字段落,称为某某语言程序。套用这个习惯,我们把置标语言的定义整体称为某某置标语言,而把用这种置标语言编写的文字段落,称为某某语言文档。如果我们把上面定义的那套标记叫做"文章置标语言"的话,那么下面那段置标语言,就可称为"文章置标语言文档"。
----------------------
什么是SGML?
----------------------
从字面上看,SGML(Standard Generalized Markup Language--标准的通用置标语言)是一种置标语言,实际上它是一种通用的文档结构描述置标语言,主要用来定义文献模型的逻辑和物理类结构。SGML是ISO组织于1986年发布的ISO 8879国际标准。
一个SGML语言程序,要由三部分组成,即语法定义、文件类型定义(简称DTD--Definition Type Document)和文件实例。语法定义,定义了文件类型定义和文件实例的语法结构;文件类型定义,定义了文件实例的结构和组成结构的元素类型。文件实例是SGML语言程序的主体部分。
SGML的实际使用中,每一个特定的DTD都定义了一类文件。例如,所有的新闻稿件都可以使用同一个DTD。因此,人们习惯上把具有某一特定DTD的SGML语言,称为某某置标语言。例如用于国际互联网的HTML语言。这样SGML就成为那些派生语言的元语言。
----------------------
什么是XML?
----------------------
XML是eXtensible Markup Language(可扩展的置标语言)的缩写,是W3C组织于1998年2月发布的标准。W3C组织制定XML标准的初衷是,定义一种互联网上交换数据的标准。W3C采取了简化SGML的策略,在SGML基础上,去掉语法定义部分,适当简化DTD部分,并增加了部分互联网的特殊成分。因此,XML也是一种置标语言,基本上是SGML的一个子集。因为XML也有DTD,所以XML也可以作为派生其它置标语言的元语言。
----------------------
什么是HTML?
----------------------
HTML是Hypertext Markup Language(超文本置标语言)的缩写,是SGML的一个实例,是W3C组织发布的标准,是专门为在互联网上发布信息而设计的置标语言。
----------------------
XML、SGML、HTML之间是什么关系?
----------------------
HTML是SGML的一个实例,它的DTD作为标准被固定下来,因此,HTML不能作为定义其它置标语言的元语言。XML是SGML的一个子集,严格地讲,XML也还是SGML。与HTML不同的是,XML有DTD,因而也可以象SGML那样,作为元语言,来定义其它文件系统,或称其它置标语言。如果把置标语言分为元置标语言和实例置标语言的话,SGML和XML都是元置标语言,而HTML和由XML派生的XHTML都是实例置标语言。
----------------------
XML的用途是什么?
----------------------
在国际互联网上,服务器与服务器之间、服务器与浏览器之间有大量的数据需要交换,特别是在电子商务中。这些被交换的数据,都被要求对数据的内容和表现方式有所说明,用置标语言担当这个重任是再合适不过了。应该说SGML完全可以扮演这个国际互联网上数据交换标准语言的角色,然而由于SGML对互联网应用来讲太复杂了,因而需要一种即能象SGML那样作为元语言使用,又能比较简单地进行处理的置标语言,来担此重任。在这种背景下XML就应运而生了。因此在互联网世界XML的用途主要有两个,一是作为元置标语言,定义各种实例置标语言标准;二是作为标准交换语言,担负起描述交换数据的作用。
----------------------
HTML已经这样流行了,为什么还要发展XML?
----------------------
简单地讲,HTML不能完成,我们希望XML所要完成的任务。原因很简单,XML所要完成的任务,必须由元置标语言来完成,而HTML只是一个实例置标语言。 在XML发布之前,国际互联网的发展受到HTML如下几个问题的束缚:
1) HTML无法描述数据内容,而这一点恰恰是数据检索、电子商务所必须的。
2) HTML对数据表现的描述能力是十分不够的,如HTML还不能描述矢量图形、 科学符号等对象,目前只能通过图象来表现这些对象。
3) HTML实例置标语言的地位,完全不能适应对新标记需求的发展需要。
XML的出现,使上述问题都得到很好的解决。
----------------------
XML怎样简化SGML?
----------------------
为简单化SGML,XML重新定义了一些SGML的内部值和参数,并删去了大量繁杂的、不常用的、使编程复杂的特征(见http://www.w3.org/TR/NOTE-sgml-xml-971215)。
----------------------
用XML你能定义自己的文件类型(DTD)吗?
----------------------
回答是肯定的。这也是XML与HTML区别最大的地方。
----------------------
谁对XML负责?
----------------------
XML是W3C组织的一个项目,XML规格说明书是W3C组织的XML工作组制定的,这个工作组由各领域、公司的专家和协作者组成,并通过E_mail方式交换信息,进行修改和完善。XML是集体智慧的结晶,不是某个公司的专利。 1.0版规格说明书由W3C认可,并在1998年2月10日正式推荐使用。
----------------------
为什么XML如此重要?
----------------------
试想在互联网世界,如果大家都讲方言,互相交换信息时都要进行翻译,那将是一个多么难以沟通和交流的世界。在互联网世界,XML之所以重要,恰恰是由于它扮演了"国际语言"角色的缘故。此外,XML更为互联网世界提供了定义各行各业的"专业术语"的工具。
----------------------
什么是文档类型定义(DTD)?
----------------------
文档类型定义 (DTD) 是一套关于标记符的语法规则。 它告诉你可以在文档中使用哪些标记符, 它们应该按什么次序出现, 哪些标记符可以出现于其它标记符中, 哪些标记符有属性, 等等. DTD原来是为使用SGML开发的, 它可以是XML文档的一部分, 但是它通常是一份单独的文档或者一系列文档 。XML本身并没有一个通用的DTD,想使用XML进行数据交换的行业或组织可以定义它们自己的DTD。
----------------------
如何在浏览器中阅读XML?
----------------------
阅读XML文档的工具一般称为XML解析器, 也称为XML处理器。 XML处理器将数据传送到应用软件, 以便处理, 出版, 查询, 或显示。XML不给应用软件提供 应用程序接口 (API), 它只是把数据传给应用软件. XML处理器不解析非构造良好的数据。 Netscape 和 Microsoft 都已经将XML解析器包含在其浏览器中。 XML开发者团体提供免费的XML阅读器和解析器, 以便在应用软件或XML制作软件中进行应用。
----------------------
使用问题
如何得到XML浏览器?
----------------------
XML标准已经发布规格说明书新出台不久,所以现在很多都是在试验阶段的软件。而处理HTML的浏览器有许多。但是将来会涌现大量不同领域的XML应用程序,所以不要指望会有一个浏览器能100%的处理好所有的程序。
XML的工具(如解释器(parsing),树结构管理(tree management),搜索(searching),格式化工具(formatting)等等)都被加在浏览器的库(libraries)里或工具包(toolkit)中,帮助开发人员更容易编写XML程序。这种应用程序可以通过增加相应的语义来修改,使之适用于 另一个特殊领域,或使用Java等语言为浏览器开发plugins等嵌入程序,在Web上传输某一模块。
Microsoft公司的IE4和5浏览器可以处理一些Microsoft-oriented的XML程序,但显示时要转换为HTML文件。 详情见development work at Microsoft和how to enable it。 Arbortext的XML Stylesheet program页中介绍怎样使用XML+XSL。你也需要ActiveX controls和XSL codebase。 Microsoft建议你可以在HTML文件中加入XML段,因为现在的只支持HTML的浏览器会忽略不认识的标识元素。
可以下载的Netscape(Mozilla)浏览器已经通过一个XML+RDF测试,其中使用James Clark的expatXML解释器(parser)。
请看面向程序设计人员和软件和工具开发商中软件部分的注意说明(notes),更详细的资料列在 http://www.oasis-pen.org/cover/xml.html。
----------------------
为什么要使用XML而不是HTML?
----------------------
比较重要的原因有以下六条:
1)作者和供应商能使用XML设计自己的文档类型,不必被HTML所约束。
2)由于XML的超文本链接能力比HTML强得多,XML提供的信息内容比 HTML更丰富,也更易于使用。
3)XML能提供更多更好的机制方便浏览器的信息表现和优化性能。
4)XML舍弃了SGML的复杂性,因此编写处理XML的应用程序会很容易。
5)信息易于存储,可重复使用。
6)XML文件在SGML环境中也可使用,不一定要局限于在WEB中使用。
----------------------
必须从SGML或HTML转向XML吗?
----------------------
没有必要。现有的SGML和HTML应用软件将会继续和现有文件一起工作。但是如果你想查看或下载使用XML文件,你就需要使用能够理解、处理XML的程序。
----------------------
可以用Java创建和管理XML文件吗?
----------------------
是的,任何程序设计语言都能被用来从XML形式的源文档中输出数据。已经出现了许多的前端和后台工具使得程序设计和数据管理更加方便。下面两个网址有更加详细的说明: http://developerlife.com >http://www.markwatson.com/XMLdb_0_1.htm http://developerlife.com
----------------------
开发问题
XML的规格说明书在哪里?
----------------------
从http://www.w3.org/TR/REC-xml中就可以找到。
----------------------
“DTDless”、“valid”和“well-formed”等术语的含意是什么?
----------------------
在标准SGML文档中,所有用到的标记、元素、元素的属性都必须由文件类型定义(DTD)来说明。但是这种限制在XML的应用中并不是总是需要的,所以XML文档被设计成既可以带有DTD,也可以没有DTD文件。DTDless的意思是没有DTD的XML文件,你可以创建自己的标识和元素,但不用在DTD中正式定义。DTDless文件通过创建元素时对它们直接进行定义。但是当XML应用程序,如一个浏览器遇到DTDless文件时,因为没有DTD文件告诉浏览器关于这个文件的结构信息,所以创建DTDless文档时,仍需要一些规则来进行规范。这样“well_formed”XML文档的概念就相应产生了,它明确规定了书写XML文档的语法规范。所有符合这个规范的XML文档就被称为是“well_formed”的XML文档。如果一个“well_formed”的XML文档,包含了DTD说明,那么这个文档就被称为是一个“valid”的XML文档了。
----------------------
为什么XML文件的分析结果出现乱码?
----------------------
这是由编码问题引起的。XML标准规定,XML分析器必须支持“UTF-8”和“UTF-16”编码,而且必须能够自动区分这两种编码的文件,对于其他编码(包括常用的中文编码“GB2312”或“BIG5”)并不要求支持。如果XML文件中包含编码声明,分析器则按照声明的编码进行处理,否则就按照识别结果进行处理(识别的结果总是“UTF-8”和“UTF-16”中的一种)。因此,如果XML文件的编码在这两种之外,你必须在XML文件前加上编码声明,如:<?xml version="1.0" encoding="gb2312"?>就表示XML文件的编码是“gb2312”。
现有的XML分析器大多不支持中文编码“GB2312”或“BIG5”,因此无法读取包含中文的XML文件。你可以使用支持中文编码的分析器,如MSXML,IBMJAVA4C,IBMJAVA4J等进行XML分析。你也可以用内码转换工具,将编码转换为“UTF-8”或“UTF-16”后进行解析,然后将解析结果转换回原来的编码。本站的软件园地中的ccnv(Code Converter)就是这样的工具。当然,你也可以自己写一个内码转换程序。
关于“UTF-8”和“UTF-16”编码的详细信息,请查看本站标准荟萃中的UTF-16和UTF-8标准。
----------------------
XML如何与数据库连接?
----------------------
XML是一种文件格式,它没有规定与数据库的连接方法,你需要用传统的方法连接数据库,进行数据库查询,然后将查询结果转化为XML格式。现在有一些工具提供了XML与数据库的连接过程大都遵循这样的步骤。下面是一个利用ASP直接生成XML文件的例子,你可以访问http://www.xml.net.cn/Asps/test/roster1.asp查看执行效果。
<?xml version="1.0" encoding="gb2312"?>
<?xml:stylesheet type="text/xsl" href="../image/roster.xsl"?>
<roster>
<%
set cConn = Server.CreateObject("ADODB.Connection")
call cConn.Open("DSN","USER", "PWD")
set rs = cConn.Execute("SELECT DISTINCT * FROM roster")
Do While Not rs.EOF %>
<Record>
<Name><%=trim(rs("name"))%></Name>
<NativePlace><%=trim(rs("NativePlace"))%></NativePlace>
<Age><%=trim(rs("Age"))%></Age>
<Telephone><%=trim(rs("Telephone"))%></Telephone>
</Record>
<% rs.MoveNext
Loop
rs.Close
set rs=nothing
set cConn=nothing
%>
</roster>