当前位置:Linux教程 - Linux - XML FAQ

XML FAQ



        

    1.什么是 XML
    XML 全称是“可扩展标识语言“(Extensible Markup Language),它是用于标示具有结构性资讯电子文件的标示语言。之所以称之为可扩展,是因为它不像HTML 那样只有固定的形式。它是被用来使SGML 能在万维网上能应用自如。
    XML是根据一个国际标准—Standard Generalized Markup Language(SGML)--International Organization for Standardization(ISO) ISO 8879:1986所制定而成的。
    XML并不是一个独立的,预定义的标识语言。它是一种元语言。它是用来描述其他语言的语言。它允许你自己设计你的标识。(HTML 是一种预定义的标识语言。HTML 只是在一类特定的文件中定义了一种描述信息的方法。而XML 能允许你在不同的文件中定义你自己设计的标识语言。)这是因为XML 是用SGML (“通用标识语言标准”国际标准的标识元语言)书写的。 

    2.谁在负责发展XML?
    ISO SGML最初是由IBM公司所开发的,但也接受了许多公司的建议。XML是由“全球资讯网发展协会(World Wide Web Consortium,W3C)”所发展的。WWW的发明人Tim Berners-Lee先生是W3C的主持人。SUN公司的主资讯站讲师(chief Information Architect)Jon Bosak先生是XML计划主持人。XML的规格是由网景公司(Netscape),微软公司(Microsoft)的代表及一个称为Text Encoding Initiative(TEI)的大型学术研究计划所共同起草制定。W3C Special Interest Group(W3C XML SIG)的成员包含:超过一百个公司及受邀的专家。

    3.XML的目的是什么?
    XML是被设计用来使SGML 能在万维网上能自如应用的:方便地定义文件类型,方便地制作和管理用SGML定义的文件,在网上方便地传输和共享这些文件。 

    4. 我是否已经在使用XML了?
    大多数的XML的应用是隐含在系統內部的。已有许多的应用使用XML技术来制定其专用的标示语言(specialist markup language)。例如:
    RealAudio公司新版的RealPlayer G2采用W3C制定的SMIL(Synchronized Media Interchange Language)规格;
    Netscape公司的"Whats Related"功能采用W3C制定的RDF(Resource Description Framework) 规格来运作;
    Microsoft公司Internet Explorer软件中的"频道"(Channels)功能中所使用CDF(Channel Definition Format)格式。

    5.什么是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 

    6.XML,SGML,HTML是不是一回事?
    不竟然。SGML是XML和HTML的母语言。SGML的覆盖面很广。它几乎涉及人们生活的每一个领域。它被用来描述成千上万中文件。HTML只是其中一种文件类型,是一种在网上最常用的类型。它定义了一种简单而固定且含标识的文件类型。
    XML是SGML的简化版。为了实现更加方便地编写和理解应用程序,更加方便地在网络上传输信息,更加方便地实现互操作性,XML申略了一些SGML中复杂和不常用的部分。但XML还能和SGML一样通过解析。

    7.SGML/XML 和 C/ C++?什么不同?
    C和C++和Fortran, Pascal, Basic, 或是 Java一样都是编程语言。是用来制定运算和操作的。
    而SGML和 XML标是说明性的语言。它们是用来表现信息的。它们使得信息能被程序正常地存储传输和处理。就它们本身而言,并不能产生什么操作。操作要由应用程序来实现。 

    8.哪些公司支持或使用XML?
    Microsoft、Netscape、SUN、IBM、Corel、Adobe、Oracle、RealAudio等各大电脑公司。

    9.为什么不只是扩展HTML?
    不同的厂家在开发HTML时产生了许多有趣但却不兼容的发明。这已使HTML不堪重负。因为这使得你只能用一种方法表现你的信息。XML却允许许许多多的个人与组织来创造他们自己的标识语言。应用这些标识语言他们可以在自己的领域内自由地交换信息。HTML在表现信息方面是有缺陷的。当然我们必须承认它现在仍然扮演着重要的角色。但许多新的应用领域需要更加强大和灵活的工具。 

    10.为什么我们要推荐XML而不主张HTML?
    1. 我们可以用XML设计自己的文件类型。
    2.信息的内容将更加丰富,更加方便使用。在XML中超文本链接的能力比HTML更强。
    3. XML能使得浏览器的表现形式更加丰富。
    4.处理XML文件比.处理SGML文件来得简单。信息的开放性和重复使用的性能斗将提高。
    5.合法(Valid 参见D中Valid与-formed)的XML文件在SGML中也是合法的。
    但是XML并没有取代HTML。它只是给了你一种新的选择。HTML将仍在一段时间内广泛地被使用。HTML的DTD将既有XML版本,又有SGML版本。但XML版本更加简单。并且,已经有好几个HTML的XML版本,但都只是在准备阶段,并未完成。

    11.既然说XML是SGML的子集,能不能用SGML的工具直接处理XML文件?
    可以,而且非常简单。一个结构完整的XML文件和HTML文件非常相像。当然也有一些小的而且是重要的不同。在实际操作当中最大的不同就是XML文件必须摇遵守一定的法则。HTML的浏览器可以允许一些小的错误。而如果是XML就行不通了。

    12.XML中可以处理中文资讯吗?
    可以。所有符合XML规格的软件工具一定都支持ISO 10646字集。ISO 10646是一組庞大的字集,而且是一项ISO标准。其中包含了Big5中文码及GB2312中文码中所有的字。
    但是XML的应用才刚起步,所以目前大多数的XML软件工具都尚未针对中文资料进行测试。

    13.如何知道某个XML软件工具支持哪些字码?
    在台湾中央研究院的"Chinese XML Now!"计划提供了一些相关资讯。此外厂商也可以使用中文处理能力标志(Chinese Numberplate logo)来标示。无论其工具处理的能力如何,您都可以先將XML文件转码为UTF-8码,则任何一个XML软件工具就都可以使用了。

    14.目前免费又好用的XML软件工具中,哪些可以处理中文资料呢?
    XML中文软件工具中,目前最好的可能是Internet Explorer 5.0 beta版。最好的XML剖析器(parser)可能是IBM公司的XML Parser for Java。最好的XML/SGML剖析器(parser)可能是James Clark 的 SP software (C++)。还有个使用perl语言编写的XML剖析器正在进行中。

    1.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> 

    2.什么是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 的网页。 

    3.DTD的替代者Schema到底是什么?
    有许多XML的开发者并不满意XML的规范。原因有两点:
    既然XML在说明结构信息是有很多好处,那么用来描述文件类型的结构的文件(这就是Schema)为什么不是也用XML书写的呢?这样做的好处不光是统一,而且便于用正规的文件工具编辑管理Schema。
    过去的DTD对数据的限制不够。比如说你想要一个元素只取负值,或是必须有一个值,DTD很难做到。 

    4.可以用XML作算术运算吗?
    只要文件类型提供算术类型,是可以的。W3C已经有了一个MathML(Mathematical Markup Language数学标识语言)的计划。清参看W3C最新(1999年7月)发布的MathML规范。

    5.在XML中,能使用Java, ActiveX吗?
    这取决于浏览器制造者运用的工具. XML是用来描述信息的; 描述性语言和用来描述内嵌函数功能的语言的目的是使得信息能在客户端被操作.. XML本身提供了一种定义标识的方法,而这些标识是描述性语言所必需的. XML是一个中立的标准.他不支持或是反对任何一种描述性语言.所以说它是一个开放的领域. 描述性语言是在”Extensible Style Language”XSL (可扩展类型语言).计划中提出的。

    6.能用Java编写或是管理XML文件吗?
    可以用任何一种编程语言从任何一种XML格式的信息中提取数据。

    7.关于Web服务器(server)的转码(Transcode)问题?
    有一些日本的Web服务器(server)、代理服务(proxy)或浏览器(browser)可以自动进行日文的Shift-JIS及EUC-J码之间的转换。同样其他语言也有自动转换,例如俄文。但目前我們还不知道有任何Web服务器可自动进行Big5及GB2312码之间的繁体、简体转换。
    但问题是无法完整的將Big5码完整的转换为GB2312码,有些字因为在GB2312码中不存在,所以转码后这些字就会产生错误。所以新一代的浏览器应该要使用可认知XML的不掉字转码器(XML-aware lossless transcoders)-这个转码器会將GB2312码中沒有的字以数字字元参引(Numeric Character Reference, NCR)的方式表示。 但因为XML规格太新了,目前尚未有浏览器支持此项功能。
    要避免转码(transcoding),您可以將文件的MIME类别设定为application/xml。这样可以避免文件被转码了。假如您使用Apache Web服务器,可以做如下的设定:
      AddType application/xml XML xml

      ForceType application/xml

      DefaultType application/xml
    但是对于HTML资料,那些常用的浏览器(Web browser)使用了各种的技巧来推测网页是使用哪钟字集编码(character set encoding)。这钟情形可能会一直持续存在,甚至采用HTML-in-XML技术时也会发生。所以使用application/xml可以避免代理服务(proxy)进行转码,但是接受资料的这一端还是可能会随意(lossy)使用內建的转码机制。

    8.什么是xml:lang这个标准属性的用途呢?
    每个XML元素(element)都可以有个xml:lang属性,来设定您的文件使用何钟语言。这个属性可以协助全文检索系统及排版系统。请將这个属性加在您的中文XML文件的最前头。可以针对中文的设定值如下:
    xml:lang="zh" 表示中文资料;
    xml:lang="zh-TW" 表示中国台湾省使用的中文(繁体字);
    xml:lang="zh-HK" 表示中国香港特别行政区使用的中文(可能是繁体字);
    xml:lang="zh-CN" 表示中国大陆使用的中文(简体字);
    xml:lang="zh-SG" 表示新加坡使用的中文(简体字);
    这个属性看似简单,但是在您的文件中正确的标示使用何钟语言却会影响深远。如此这般,一个中文Web搜索系统(Web-Robot)就可以正确无误的將您的文件加入其系统中,而西方语言的Web搜索系统就可以得知这些文件可能不该加入其系统中,或是可以启动自动的翻译系统。 因为在不同的地区所使用的中文词汇有一部份不一样,所以语言属性也可以协助自动翻译及搜索系统。

    9.为何不能在HTML浏览器(browser)中看到所有的字?
    不能看到所有的字,可能是:
    浏览器(browser)无法依据HTML 4或XML规则正确处理数字字元参引(numeric character reference);
    沒有安裝或选择正确的字型;
    浏览器使用"encoding"设定来決定使用哪一个字型,但在这个字型中并沒有文件中的某些字的字形。
    试着改变浏览器上的功能选项中的"Encoding"项目切换为Big5或UTF-8。这项设定在不同的浏览器中,会放在不同的位置。


    1.哪儿可以找到XML的规范?
    请参见: http://www.w3.org/TR/REC-xml

    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” 元素区分开来.

    3.”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的规则,正确嵌套.

    4.”Valid “(合法的)XML
    合法的XML是指有DTD的文件.它必须是”well-formed”的.

    5.在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>

    6.SGML 和 XML之间还有什么区别?
    主要的区别在于DTD的内容.为了简化语法和编写软件的过程, XML中对SGML做了很大缩减.

    7.现在有哪些XML的软件可以使用?
    由于更新速度太快,我们建议您参看: http://www.oasis-open.org/cover/xml.html.

    8.要使用XML,我是否要改变服务器的软件?
    要的,但改动不大.您只要编辑您的mime-types文件,加上以下一句:
    application/xml xml XML

    9.有没有为XML服务的API组件?
    有的,但还在不断开发的阶段. 我们建议您参看:
    http://www.oasis-open.org/cover/sgml-xml.html




    发布人:netbull 来自:LinuxAid