精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>网络专区>>● 网站建设>>XML>>中文FAQ中HTML编程人员常见问题

主题:中文FAQ中HTML编程人员常见问题
发信人: 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)(&Aacute;)和数据的内容(如文字)都是大小写
敏 感的。 

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]

[关闭][返回]