A.概述性问题
A.1 什么是XML?
XML 全称是“可扩展标识语言“(Extensible Markup Language)。之所以称之为可扩展,是因为它不像HTML 那样只有固定的形式。它是被用来使SGML 能在万维网上能应用自如。
XML并不是一个独立的,预定义的标识语言。它是一种元语言。它是用来描述其他语言的语言。它允许你自己设计你的标识。(HTML 是一种预定义的标识语言。HTML 只是在一类特定的文件中定义了一种描述信息的方法。而XML 能允许你在不同的文件中定义你自己设计的标识语言。)这是因为XML 是用SGML (“通用标识语言标准”国际标准的标识元语言)书写的。
A.2 XML的目的是什么?
XML是被设计用来使SGML 能在万维网上能自如应用的:方便地定义文件类型,方便地制作和管理用SGML定义的文件,在网上方便地传输和共享这些文件。
A.3 什么是SGML?
SGML的全称是“Standard Generalized Markup Language“(通用标识语言标准)。它是国际上定义电子文件结构和内容描述的标准。在往上有以下相关资源:
SGML FAQ: http://www.infosys.utas.edu.au/info/sgmlfaq.txt
SGML 主页: http://www.oasis-open.org/cover/sgml-xml.html
A.4 什么是HTML?
HTML的全称是“HyperText Markup Language “(超文本标识语言)。它是SGML在网络上的一个特殊应用。
A.5 XML,SGML,HTML是不是一回事?
不竟然。SGML是XML和HTML的母语言。SGML的覆盖面很广。它几乎涉及人们生活的每一个领域。它被用来描述成千上万中文件。HTML只是其中一种文件类型,是一种在网上最常用的类型。它定义了一种简单而固定且含标识的文件类型。
XML是SGML的简化版。为了实现更加方便地编写和理解应用程序,更加方便地在网络上传输信息,更加方便地实现互操作性,XML申略了一些SGML中复杂和不常用的部分。但XML还能和SGML一样通过解析。
A.6 SGML/XML 和C/ C++?什么不同?
C和C++和Fortran, Pascal, Basic, 或是Java一样都是编程语言。是用来制定运算和操作的。
而SGML和XML标是说明性的语言。它们是用来表现信息的。它们使得信息能被程序正常地存储传输和处理。就它们本身而言,并不能产生什么操作。操作要由应用程序来实现。
A.7 是由谁负责XML?
XML是W3C(World Wide Web Consortium 万维网络联盟)的一个项目。XML不是任何一家公司的私有财产。
A.8 为什么XML是一项重要的技术?
应为它解决了两个制约网络发展的问题:
1.基础是单一固定的文件类型。(HTML);
2.完整的SGML过于复杂。
A.9 为什么不只是扩展HTML?
不同的厂家在开发HTML时产生了许多有趣但却不兼容的发明。这已使HTML不堪重负。因为这使得你只能用一种方法表现你的信息。XML却允许许许多多的个人与组织来创造他们自己的标识语言。应用这些标识语言他们可以在自己的领域内自由地交换信息。HTML在表现信息方面是有缺陷的。当然我们必须承认它现在仍然扮演着重要的角色。但许多新的应用领域需要更加强大和灵活的工具。
B.SGML的使用(包括HTML的各种浏览器)
B.1 为什么我们要推荐XML而不主张HTML?
1.我们可以用XML设计自己的文件类型。
2.信息的内容将更加丰富,更加方便使用。在XML中超文本链接的能力比HTML更强。
3. XML能使得浏览器的表现形式更加丰富。
4.处理XML文件比.处理SGML文件来得简单。信息的开放性和重复使用的性能斗将提高。
5.合法(Valid 参见D中Valid与-formed)的XML文件在SGML中也是合法的。
B.2 我是不是必须由SGML或是HTML转向XML?
不是的。现存的SGML和HTML的应用软件仍能正常处理现有的文件。
C. SGML 和HTML的编写
C.1 XML是否已取代了HTML?
没有。XML并没有取代HTML。它只是给了你一种新的选择。HTML将仍在一段时间内广泛地被使用。HTML的DTD(参见C中DTD)将既有XML版本,又有SGML版本。但XML版本更加简单。
C.2 XML文件是怎样的?
它的基本结构和SGML和HTML差不多。XML文件可以非常简单。它可以不需要文件类型说明,而直接就是你自己设计的内嵌式标识。如下面一段代码:
<?xml version="1.0" standalone="yes"?>
<conversation>
<greeting>Hello, world!</greeting>
<response>Stop the planet, I want to get off!</response>
</conversation>
当然它也可以更加复杂些。如DTD声明,内嵌子集,等等:
<?xml version="1.0" standalone="no" encoding="UTF-8"?>
<!DOCTYPE titlepage SYSTEM "http://www.frisket.org/dtds/typo.dtd"
[<!ENTITY % active.links "INCLUDE">]>
<titlepage>
<white-space type="vertical" amount="36"/>
<title font="Baskerville" size="24/30" alignment="centered">Hello, world!</title>
<white-space type="vertical" amount="12"/>
<!-- In some copies the following decoration is hand-colored, presumably by the author -->
<image location="http://www.foo.bar/fleuron.eps" type="URL" alignment="centered"/>
<white-space type="vertical" amount="24"/>
<author font="Baskerville" size="18/22" style="italic">Vitam capias</author>
</titlepage>
C.3 是不是HTML有一个XML版本?
已经有好几个HTML的XML版本,但都只是在准备阶段,并未完成。
C.4 既然说XML是SGML的子集,我能不能用SGML的工具直接处理XML文件?
是的.而且非常简单。一个结构完整的XML文件和HTML文件非常相像。当然也有一些小的而且是重要的不同。在实际操作当中最大的不同就是XML文件必须摇遵守一定的法则。HTML的浏览器可以允许一些小的错误。而如果是XML就行不通了。
C.5 什么是DTD?我能在哪儿找到?
DTD的全称是“Document Type Definition“(文件类型定义)。具体地说,DTD是一个或是一些用XML书写的文件。它包含了对一种文件的正式定义。它定义了文件中的元素能用什么名字,能放在什么位置,应该怎样组合。在这里举一个简单的例子。比如说你想要你的文件可以描述一组<List>,其中每个<List>由可以包含若干个<Item>。那么你的DTD中应该有以下语句:<!ELEMENT List (Item)+>
<!ELEMENT Item (#PCDATA)>
这样一个框架定义了一个表(list),它可以包含若干个项(items)。每一个项只能包括文本的内容。当处理器处理XML文件时将自动检查DTD,以此确定文件中元素从哪而来,以及它们之间是什么关系。上面的框架允许你生成下面的一个表:
<List><Item>Chocolate</Item><Item>Music</Item><Item>Surfing</Item></List>
而这样一个表在屏幕上是怎样一个表象,取决于你的样式表(Stylesheet)。在HTML中你要在文件中指定应是怎样的形式。使用DTD表明你能够确定一类文章的结构和格式。
要想找一个DTD看看吗?实际上,各个领域里的SGML DTD由成千上万。你可以参看SGML 的网页。
C.6 我总是听说DTD的替代者Schema,它到底是什么?
有许多XML的开发者并不满意XML的规范。原因有两点:
1.既然XML在说明结构信息是有很多好处,那么用来描述文件类型的结构的文件(这就是Schema)为什么不是也用XML书写的呢?这样做的好处不光是统一,而且便于用正规的文件工具编辑管理Schema。
2.过去的DTD对数据的限制不够。比如说你想要一个元素只取负值,或是必须有一个值,DTD很难做到。
C.7 我能用XML作算术运算吗?
只要你的文件类型提供算术类型,知识可以的。W3C已经有了一个MathML(Mathematical Markup Language数学标识语言)的计划。清参看W3C最新(1999年7月)发布的MathML规范。
C.8 在XML中,我能使用Java, ActiveX吗?
这取决于浏览器制造者运用的工具. XML是用来描述信息的; 描述性语言和用来描述内嵌函数功能的语言的目的是使得信息能在客户端被操作.. XML本身提供了一种定义标识的方法,而这些标识是描述性语言所必需的. XML是一个中立的标准.他不支持或是反对任何一种描述性语言.所以说它是一个开放的领域. 描述性语言是在”Extensible Style Language”XSL (可扩展类型语言).计划中提出的.
C.9 我能用Java编写或是管理XML文件吗?
可以.我们可以用任何一种编程语言从任何一种XML格式的信息中提取数据.
D.高级开发者和应用者(包括网络管理员和服务器操作人员)
D.1哪儿可以找到XML的规范?
请参见: http://www.w3.org/TR/REC-xml
D.2 "DTDless" ,"valid",和"well-formed"这些术语是什么意思?
在完整的SGML中,我们用DTD描述特定文件中的各种标识.但DTD的生成是一件极其复杂的工作.所以XML被设计成可以缺省DTD. DTDless表示您可以创造一个标识而不需正式的定义.当然这也要付出代价.您不能在其他的文件中对同样的形式采用自动的处理. DTDless的文件是以一种非正式的方式定义它的标识的.标识是在哪儿出现的就在哪儿定义它.但当一个比方说是浏览器的XML应用程序打开了一个DTDless的文件,它必须要有办法来理解文件的结构.但它又没有DTD,所以规则上有了一些改变. 举一个例子:
HTML中的<img> 是被定义为”EMPTY”(空)的.它并不需要”end-tag”(结尾标签). DTD 的XML应用程序在打开一个缺省DTD. 的文件,读到<img>时不知道是否需要一个”end-tag”.所以”well-formed”(结构良好)的定义也变得重要了. ”well-formed”可以使得一般元素和”EMPTY”元素区分开来.
D.2.1 ”well-formed”(结构良好的)文件
1.如果一个文件没有DTD,它必须在开头处有一个"Standalone Document Declaration"(独立文件声明):
<?xml version="1.0" standalone="no" encoding="UTF-8"?>
<foo>
. <bar> ...<blort/>...</bar>
</foo>
2.除了空素以外, 标记必须前后匹配.
3.所有的”attribute”值都要用引号括起来.
4. ”EMPTY”元素的tag要么用”/>”结尾,要么要补成”non-EMPTY”(非空)的元素. 比如说: <BR>要么写为<BR/> 或是<BR></BR>
5.文件中必须不能出现”markup-start “(标识开始符), 比如”<”或是“&”.
6.元素必须遵守SGML的规则,正确嵌套.
D.2.2”Valid “(合法的)XML
合法的XML是指有DTD的文件.它必须是”well-formed”的.
D.3 在DTD中,我什么时候用属性, 什么时候用元素?
这并没有唯一的答案.着取决于您设计文件的风格.以下是两个极端的例子,它们的功能是一样的:
1. <l n="184"><sp>Portia</sp><text>The quality of mercy is not strain’d,</text></l>
2. <line speaker="Portia" text="The quality of mercy is not strain’d">184</line>
D.4 SGML 和XML之间还有什么区别?
主要的区别在于DTD的内容.为了简化语法和编写软件的过程, XML中对SGML做了很大缩减.
D.5 现在有哪些XML的软件可以使用?
由于更新速度太快,我们建议您参看: http://www.oasis-open.org/cover/xml.html.
D.6 要使用XML,我是否要改变服务器的软件?
要的,但改动不大.您只要编辑您的mime-types文件,加上以下一句:
application/xml xml XML