XHTML是当前和未来的文档标准之一,是对HTML4的重述、延伸和扩展。XHTML文档类型是基于XML,并最终为XML客户端服务的。
XHTML1.0是XHTML的第一个版本,它是作为XML1.0的应用对HTML4的三个版本的重新陈述。它将成为一种既符合XML标准,又能被HTML标准浏览器所识别的文档标记语言。那些转向XHTML的开发者将会发掘下列优点:XHTML是和XML保持一致的,同样地,它也是能被将来的XML工具察看、编辑和验证的。XHTML文档在旧的基于HTML的浏览器中能够表现得和在新的基于XHTML的浏览器中一样出色。
XHTML在应用上,既能够利用HTML的文档对象模块(DOM),又能利用XML的文档对象模块。
在XHTML家族的发展过程中,XHTML格式的文档将会活跃在各类多种多样的XHTML环境之中。
XHTML是英特网发展的新的一步。在逐步转向XHTML的今日,文档开发者们能在保持向后和向前的兼容性的同时进入XML的殿堂并享受随之而来的种种优点。
XHTML1.0的标准定义
1. 文档格式
1.1 严格定义的文档
一份严格定义的XHTML文档是一份符合下列标准的文档:
应该通过三种之一的DTD的验证。
文档的根元素应该是<html>。
文档的根元素必须通过xmlns属性来指定XHTML词汇表。XHTML词汇表应该定义成http://
www.w3.org/1999/xhtml
在文档里的根元素之前应该有文档类型申明的语句。文档类型申明中的public标识符必
须引用,并使用三种DTD中的一种的正式public标识符引用。改变系统标识符可以用来反
映本地的系统约定。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.
dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-t
ransitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "DTD/xhtml1-frame
set.dtd">
以下是一个短小的XHTML文档示范
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1
-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Virtual Library</title>
</head>
<body>
<p>Moved to <a href="http://vlib.org/">vlib.org</a>.</p>
</body>
</html>
请注意,在上述例子中包含了XML申明。像上述的XML申明并不是所有XML文档必须的。X
HTML文档作者们强烈建议在所有文档中使用XML申明。当字符集超出了默认的UTF-8或UT
F-16的范围时,这样一个申明是必须的。
1.2 XHTML和其它词汇表一起使用
XHTML词汇表可以和其它词汇表一起使用,即使这样一份文档并不是上述严格定义的。今
后W3C将对这类混合使用词汇表的文档进行标准的格式化定义。
下面是一个在XHTML1.0中使用MATHML的例子:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>A Math Example</title>
</head>
<body>
<p>The following is MathML markup:</p>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<apply> <log/>
<logbase>
<cn> 3 </cn>
</logbase>
<ci> x </ci>
</apply>
</math>
</body>
</html>
下面是XHTML1.0在其他类型的XML词汇表中使用的例子:
<?xml version="1.0" encoding="UTF-8"?>
<!-- initially, the default namespace is "books" -->
<book xmlns='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en">
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
<notes>
<!-- make HTML the default namespace for a hypertext commentary -->
<p xmlns='http://www.w3.org/1999/xhtml'>
This is also available <a
href="http://www.w3.org/">online</a>.
</p>
</notes>
</book>
2. 客户端兼容性
一个和XHTML兼容的客户端必须符合以下标准:
为符合XML1.0推荐标准,客户端必须分析和评估XHTML文档是否是格式化(Well-Formed
ness)的。如果是一个验证了(validating)的客户端,那它必须进一步按照DTD验证文
档是否有效(validate)。
当客户端是申明支持本规范定义的设备(Facilities),或按照本规范进行标准的引用
,那么也必须按照规范定义来验证设备。
当客户端按照普通XML文档来处理XHTML文档时,应该只有id属性被作为片断标识符。
当客户端遇到不能识别的元素时,其内容将被返回。
当客户端遇到不能识别的属性时,应该忽略整个属性内容(包括属性的名称和值)。
当客户端遇到不能识别的属性的值时,应该使用默认的属性值代替。
当客户端遇到不能识别的实体引用(可能是在外部的未读子集中)时,将返回用来代替
实体的字符(以&开头,以;结尾)。
当客户端再返回内容的时候,如果遇到能识别但不能返回的字符或字符实体引用时,客
户端应该以一种让用户清晰地知道文档难以用普通的方法返回的途径显示文档。
以下字符在XML中被定义为纯空字符(whitespace):
Space ( )
Tab ( )
Carriage return (
)
Line feed (
)
XML处理器将不同系统的行终止符处理成一种简单的Line-feed字符来传递给应用程序。
并且在XHTML处理器中,下列字符也必须被识别为纯空子符:
Form feed ( )
Zero-width space ()
在处理元素时,当"xml:space"属性被置为"preserve"时,所有的纯空字符将被原封不动
地保留(开头和结尾的纯空字符将被删除)。否则,纯空子符将按照以下规则处理:
围绕块元素的纯空子符将被删除。
删除整个注释并不影响纯空子符的处理。在注释两头的纯空子符将加倍处理。
在块元素内部开头和结尾的纯空子符将被删除。
在块元素内部,line feed字符将被转换成space字符("xml:space"被置成"preserve"的
情况除外)。
连续的纯空字符将被置换成一个单独的space字符("xml:space"被置成"preserve"的情
况除外)。
关于译文,客户端应用最适合于撰写文档的语言的风格来返回文档内容。在一个以拉丁
文为主的脚本中,ASCII的空格字符被象征性地用来为拉丁语法规范的单词分界和排字纯
空字符编码;在一个以NAGARI文为主的脚本中,语法规则中的单词分界将被编码成ZW空
格,而在排字输出的时候则不会被象征性地表现出来;阿拉伯语的脚本中,排字纯空字
符用space字符来做编码,也使用ZW空格来做“内部”分界的编码;而一个中文脚本通常
不使用上述方法编码。
3. XHTML和HTML4的区别
3.1 文档必须是结构化的
“结构化”是XML提出的新的概念。从本质上来说,就是所有的元素都必须有结束标签(
或者以一种特殊的方式呈现——下述),并且符合嵌套规则。
即使交错标签在SGML中是非法的,可是目前很多浏览器仍然允许这种写法。
正确:符合嵌套规则
<p>here is an emphasized<em>paragraph</em>.</p>
错误:交错标签
<p>here is an emphasized<em>paragraph.</p></em>
3.2 元素和属性的名称必须是小写的
XHTML文档在使用HTML的元素和属性时必须使用小写字母。导致这种差异的原因是,XML
区分大小些。
3.3 非空的元素必须有结束标签
在基于SGML的HTML4中,这样的元素被允许忽略结束标签;在这些元素后有隐藏的结束标
签。在基于XML的XHTML中,这种忽略是非法的。除了在DTD中申明的空元素,所有元素必
须有结束标签。
正确:结尾了的元素
<p>here is a paragraph.</p><p>here is another paragraph.</p>
错误:未结尾的元素
<p>here is a paragraph.<p>here is another paragraph.
3.4 所有属性值必须用引号引用
所有属性值必须用引号引用,即使是属性值为数字的属性。
正确:使用引号的属性值
<table rows="3">
错误:未使用引号的属性值
<table rows=3>
3.5 关于简化属性
XHTML不支持简化属性。属性-值必须成对完整出现。
正确:非简化属性
<dl compact="compact">
错误:简化属性
<dl compact>
3.6 关于空元素
空元素必须有结束标签或以/>结尾。例如:<br/>或<hr></hr>
正确:结束了的空标签
<br/><hr/>
错误:未结束的空标签
<br><hr>
3.7 属性值中纯空字符的处理
在属性值中,客户端将跳过开始和结尾的纯空字符并把连续的纯空字符转换为单一的空
格。
3.8 脚本和样式属性
在XHTML中,脚本和样式属性被申明成能包含#PCDATA类内容的属性。结果,<和&将被处
理成标记的开始,像<和&这样的实体将被客户端各自处理成对于<和&的实体引用
。在一个有CDATA标记的部分外放置脚本和样式属性,将不支持这种扩展。
<script>
<![CDATA[
... unescaped script content ...
]]>
</script>
可以选择使用扩展脚本和样式元素。
3.9 SGML禁令
SGML给DTD撰写者以禁止某些特定元素嵌套在另一元素内的能力。这在XML里是无法实现
的。例如,HTML 4 Strict DTD里禁止了在一个a元素里嵌套另一个a元素。这在XML里是
无法描述的。
3.10 伴随元素的“id”和“name”属性
HTML4 给a, applet, form, frame, iframe, img和map定义了name属性。HTML4也推出了id属性。它们都被用作片断标识符。在XML中,片断标识符是ID类型,并且每个元素只能拥有单一的ID类型。所以,在XHTML 1.0中,id属性就被定义为了ID类型。为了确定一份XHTML文档是结构化了的XML文档,必须用id属性来做片断标识符,即使某元素曾经拥有name属性。请注意,在XHTML1.0中,name元素是不推荐使用的,并将在以后的版本中去处。
PS:
另外推荐一篇文章:《HTML和XHTML常见问答》,编者是: Steven Pemberton(http://www.cwi.nl/~steven/), W3C/CWI,文章链接:http://www.transwiki.org/cn/xhtmlfaq.htm(中文翻译版,送给厌烦看E文的朋友 呵呵)
posted on 2007-06-13 11:25
小立飞刀 阅读(1255)
评论(0) 编辑 收藏 所属分类:
XForms