发信人: tedz()
整理人: eagle(2000-12-24 09:44:27), 站内信件
|
中文FAQ中HTML编程人员常见问题
面向SGML编程人员(包括HTML编程人员)
编程人员也应该阅读 面向软件和工具开发商部份,
其中包含XML更核心的内容。
1 XML会代替HTML吗
不会,XML不会替代 HTML: 它只提供了另一种方式,使你能定义自己的标识 元素。HTML 在未来一段时间内仍会被广泛使用,HTML的DTD文件将可以转换成在 XML中使用。XML语言使 得编写DTD文件比在标准SGML中要简单许多。
一旦功能更稳定,强大的支持XML的软件问世,那么创建XML版本的HTML文件 和DTD文件就会被 提上日程。 请注意comp.text.sgml,comp.text.xml, XML-L ,和xml-dev中的通告。
2 XML文件的格式是什么样子
基本结构与大多数的SGML和HTML应用程序类似。XML文件可以很简单,没有文 件类型说明 DTD(document type declaration),直接运用你自己设计的标识元素 :
< xml version="1.0" standalone="yes">
< conversation>
< greeting>Hello, world!< /greeting>
< response>Stop the planet, I want to get off!< /response>
< /conversation>
它们也可以很复杂,包含一个DTD文件,或一个内部子集(internal subset) ,或更加复杂的结构:
< 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">
Munde Salutem
< /author>
< /titlepage>
或者它们可以是任意的:主要决定于你怎样定义你的文件类型(或你使用谁的 DTD),和它们 要实现什么功能。见 valid and well-formed files部份的问题。
David Brownell说:well-formed的XML文件不需要使用一个单独的文件类型说 明文件,即DTD (Document Declaration)。如果有DTD,它的作用也只是当忽略外 部参数项(external parameter entities[mdash ])时,一定程度上加快了处理速 度。一般说来,你不能依赖于一个Standalone的XML文件中的外部文件声明(exte rnal declarations)。相关的类型有实体(entities)和属性 (attributes)。独立 (Standalone)的XML文件中不能有任何属性值有缺省值或标准值,否则就是不合法 (invalid)的文件。
3 XML怎样处理空格
XML改变了SGML中处理空格的规则,所有的空格,包括断行,TAB符,和规则 空格,经过解释器(parser)解释后都将保持不变(如在浏览器中,在处理格式工具 中(formatter),在viewer中等等)。这意味着:
在结构化元素(可以包含其他元素,也称为"有内容的元素"(`element conte nt')) 之间的`无意义'的空格,可以保留(而在标准SGML文档中,这种空格被压缩 );
在内容是文字(text)和标识(markup)的元素(如PCDATA[parsed character d ata])之中的`有意义'的空格,也可以保留。
< chapter>
< section>
< title>
My title for Section
1.
< /title>
< para> ...
< /para>
< /section>
< /chapter>
但是,解释器(parser)若检测出在"有内容的元素"中的空格,它应告诉应用 程序(如浏览器 等)。 (标准SGML的使用者也许知道这方面的信息不在ESIS, 而 在grove中。) 在上面的例子里,浏览器等应用程序可以接受所有的断行,TAB, 元素间的空格,以及title间的空格。但各个应用程序 (如浏览器,formatter, viewer等)根据自身的定义来决定哪种空格可以保留,哪种可以删除。
4 哪种XML文件对字母的大小写敏感
所有的XML文件都对字母(包括标识符和字符)大小写敏感。在这一点上与 HT ML和许多SGML 文件类型有显著区别。它使得非拉丁文字母的文字做标识符成为可 能,避免了出现混乱。
元素类型名(element type names)(在2个起止标识符之间)是大小写敏感的: 无论你使用大写还是小写来定义,使用时或在DTD中都应保持一致;
对于没有DTD的well-formed文件,第一次定义的该元素类型名时就决定了它 的大 小写。所以你不能写成< BODY> . . . < /body>:大小写一定要前后相一致 ;< IMG/> 和 < img/> 是两种不同的元素类型;
属性名也是大小写敏感的:例如< PIC width="7in"/> 和 < PIC WIDTH="6in "/> 由于width 和 WIDTH的大小写不同,表示这个文件中两种不同的属性;
属性值也是大小写敏感的。 字符数据值(如 HRef="MyFile.SGML") 也和前面 介绍过的一样,但ID和IDREF也是大小写敏感的,不再变为大写来比较;
所有的实体名(entity names)(Á)和数据的内容(如文字)都是大小写 敏 感的。
5 怎样使我现有的HTML文件能在XML环境下运行
把它们转换为 well-formed文件 (见下面介绍)。 XML可以包含DTD文件,也 可以没有DTD文件,但是HTML文件目前只能转换为无DTD文件的XML文件。现在还没 有XML版本的HTML的DTDs (现有的是基于SGML)(正在开发中),因为这些DTD文件需 要删去很多遵从SGML,而被XML略去的特性。
有必要把现有的HTML文件转为well-formed的XML文件,因为XML文件不允许省 略"终止标识符" (如省略 < /p>等),这些在大多数的HTML的DTD文件中都是允许 的。现在已经有一些工具 可将HTML转为 well-formed的XML文件。
如果你想把HTML的DTD转换为XML的DTD,有一个试验性质的CommerceNet的站 点,(http://www.xmlx.com/),可以作这种转换,和一个FPI服务器在http://ww w.ucc.ie/cgi-bin/public ,其中有一些SGML DTDs文件。
如果你遵循HTML的DTD编制了HTML格式的文件,那么它们可以按如下的方法转 换成XML的DTD:
把DOCTYPE的声明内容和内部子集(包含在第一个尖括号中的内容< !DOCTYPE HTML...>)的内容用XML的声明格式来定义< xml version="1.0" standalone="y es">
把所有的EMPTY元素(elements)(如 < ISINDEX>, < BASE>, < META>, < LINK>, < NEXTID> 和在头元素(header)中的< RANGE>, 和在body元素中的 < IMG>, < BR>, < HR>, < FRAME>, < WBR>, < BASEFONT>, < SPACER>, < AUDIOSCOPE>, < AREA>, < PARAM>, < KEYGEN>, < COL>, < LIMITTEXT>, < SPOT>, < TAB>, < OVER>, < RIGHT>, < LEFT>, < CHOOSE>, < ATOP> , < OF>)结尾加上`/>', 例如 < IMG SRC="mypic.gif" alt="Picture"/>
对于所有的非空元素(non-empty elements),保证它们的起始和终止标识符 相匹配; 例如 每个< P>必须要有一个< /P>来终结: 这一步可以由sgmlnorm(SP的 一部分)或编辑器Emacs/psgml等工具来自动完成; 避免出现<和&等标识专用字符 ,用& lt;和& amp;来代替;
保证所有的属性值包含在引号中;
保证所有的元素名在整个文件的使用过程中大小写前后保持一致;
保证所有的属性名在整个文件的使用过程中大小写前后保持一致。
注意,许多HTML浏览器不支持XML格式的在其后加"/"符的空元素(EMPTY ele ments),所 以上面的转换不能反方向进行。一个解决办法是在所有的空元素(EM PTY elements)后加一个终结的标识符,如< IMG src="foo.gif"> 变为 < IMG s rc="foo.gif">< /IMG>.
如果你有许多合法的(valid)HTML文件,可以用SGML转换系统编写一个小程序 来完成这种转换 ,如用 Omnimark,Balise, SGMLC,或使用一个SGML Perl li braries的系统), 甚至你可以用宏编辑器(editor macros)来完成。
如果你的HTML文件不合乎规则(invalid) (注:大多数由WYSIWYG编辑器生成的 HTML文件不完全合乎规则),那么转换只好用手工改正来进行,尽管有一些规则性 的小缺陷,这些文件也几乎 是well-formed的,你可以向上面所说的编写一个小 程序来改正。看文件是否合乎规则,按如下步骤进行:
文件包含标识符语法错误吗 如在终结标识符中是否把"/"写成了"\"; 或元素 的嵌套正确吗 (如< B>an element which starts < I>inside one element< /B > but ends outside it< /I>) 文件中包含不遵循HTML的DTD的标识符吗 如head ings在paragraphs内部, 或list内部列表项在 list外了。
文件中使用了DTD中没有定义过的元素吗 尽管这些文件很容易转换为没有DT D的well-formed文件, (因为不必事先定义元素),但大部份浏览器都很难知道这 些元素的意义是什么。
本身合乎规则但不代表任何意义或空的标识符,要在转换之前删除(例如重复 的空的段落(empty paragraphs), 断行符(linebreaks),空表格(empty tables ),看不见的空GIF等等: XML使用格式表(stylesheets)文件来控制显示)。
-- 你的微笑象春天
春天嫩得象豆腐
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.130.1.238]
|
|