This section is informative.
Due to the fact that XHTML is an XML application, certain practices that were perfectly legal in SGML-based HTML4 [HTML4] must be changed.
Well-formedness is a new concept introduced by [XML]. Essentially this means that all elements must either have closing tags or be written in a special form (as described below), and that all the elements must nest properly.
Although overlapping is illegal in SGML, it is widely tolerated in existing browsers.
CORRECT: nested elements.
<p>here is an emphasized <em>paragraph</em>.</p>
INCORRECT: overlapping elements
<p>here is an emphasized <em>paragraph.</p></em>
XHTML documents must use lower case for all HTML element and attribute names. This difference is necessary because XML is case-sensitive e.g. <li> and <LI> are different tags.
In SGML-based HTML 4 certain elements were permitted to omit the end tag; with the elements that followed implying closure. XML does not allow end tags to be omitted. All elements other than those declared in the DTD as EMPTY
must have an end tag. Elements that are declared in the DTD as EMPTY
can have an end tag or can use empty element shorthand (see Empty Elements).
CORRECT: terminated elements
<p>here is a paragraph.</p><p>here is another paragraph.</p>
INCORRECT: unterminated elements
<p>here is a paragraph.<p>here is another paragraph.
All attribute values must be quoted, even those which appear to be numeric.
CORRECT: quoted attribute values
<td rowspan="3">
INCORRECT: unquoted attribute values
<td rowspan=3>
XML does not support attribute minimization. Attribute-value pairs must be written in full. Attribute names such as compact
and checked
cannot occur in elements without their value being specified.
CORRECT: unminimized attributes
<dl compact="compact">
INCORRECT: minimized attributes
<dl compact>
Empty elements must either have an end tag or the start tag must end with />
. For instance, <br/>
or <hr></hr>
. See HTML Compatibility Guidelines for information on ways to ensure this is backward compatible with HTML 4 user agents.
CORRECT: terminated empty elements
<br/><hr/>
INCORRECT: unterminated empty elements
<br><hr>
When user agents process attributes, they do so according to Section 3.3.3 of [XML]:
In XHTML, the script and style elements are declared as having #PCDATA
content. As a result, <
and &
will be treated as the start of markup, and entities such as <
and &
will be recognized as entity references by the XML processor to <
and &
respectively. Wrapping the content of the script or style element within a CDATA
marked section avoids the expansion of these entities.
<script type="text/javascript">
<![CDATA[
... unescaped script content ...
]]>
</script>
CDATA
sections are recognized by the XML processor and appear as nodes in the Document Object Model, see Section 1.3 of the DOM Level 1 Recommendation [DOM].
An alternative is to use external script and style documents.
SGML gives the writer of a DTD the ability to exclude specific elements from being contained within an element. Such prohibitions (called "exclusions") are not possible in XML.
For example, the HTML 4 Strict DTD forbids the nesting of an 'a
' element within another 'a
' element to any descendant depth. It is not possible to spell out such prohibitions in XML. Even though these prohibitions cannot be defined in the DTD, certain elements should not be nested. A summary of such elements and the elements that should not be nested in them is found in the normative Element Prohibitions.
HTML 4 defined the name
attribute for the elements a
, applet
, form
, frame
, iframe
, img
, and map
. HTML 4 also introduced the id
attribute. Both of these attributes are designed to be used as fragment identifiers.
In XML, fragment identifiers are of type ID
, and there can only be a single attribute of type ID
per element. Therefore, in XHTML 1.0 the id
attribute is defined to be of type ID
. In order to ensure that XHTML 1.0 documents are well-structured XML documents, XHTML 1.0 documents MUST use the id
attribute when defining fragment identifiers on the elements listed above. See the HTML Compatibility Guidelines for information on ensuring such anchors are backward compatible when serving XHTML documents as media type text/html
.
Note that in XHTML 1.0, the name
attribute of these elements is formally deprecated, and will be removed in a subsequent version of XHTML.
HTML 4 and XHTML both have some attributes that have pre-defined and limited sets of values (e.g. the type
attribute of the input
element). In SGML and XML, these are called enumerated attributes. Under HTML 4, the interpretation of these values was case-insensitive, so a value of TEXT
was equivalent to a value of text
. Under XML, the interpretation of these values is case-sensitive, and in XHTML 1 all of these values are defined in lower-case.
SGML and XML both permit references to characters by using hexadecimal values. In SGML these references could be made using either &#Xnn; or &#xnn;. In XML documents, you must use the lower-case version (i.e. &#xnn;)
http://www-128.ibm.com/developerworks/cn/xml/newto/#4
该网址有下列内容:
摘要
XHTML 1.0是作为XML1.0应用而重新制定的HTML4。本规范书定义XHTML 1.0以及其中与HTML 4对应的3种文档类型定义(DTD,Document Type Definition)。 每个元素的语义和它们的属性已经在W3C Recommendation for HTML 4中定义,它们是XHTML将来扩展的基础。只要遵循一小套指导方针,XHTML文档就能和现存的HTML用户代理程序兼容。
本文档的状况
本节描述本文档发布时的状况。其它的文档也许会取代本文档。W3C负责维护本文档系列的最新状况。本文档由W3C的成员和一些对此感兴趣的团体 审阅,并经主管认可而成为W3C推荐标准。 这是一个稳定的文档,可以作为参考材料或在其它文档中作为标准引用。W3C制定本推荐标准的目的就是使大家注意到本规范说明书,使之广泛传播,增强Web 的功能和互用性。
1. 什么是 XHTML?
XHTML是一系列当前和将来的文档类型和程序块,它由HTML 4 [HTML]再生和扩展而来,HTML 4是其子集。XHTML系列文档基于XML,最终被设计用来与基于XML的用户代理程序一起工作。XHTML家族的详情及其发展过程在未来趋势一节中详述。
XHTML 1.0(本规范书)是XHTML家族的第一个文档。它是将3种HTML 4文档类型应用到XML 1.0 [XML]之后重新形成的。其意图是,作为一种语言,它的内容既符合XML,并且如果依照一些简单的指导方针,也能被HTML4用户代理程序识别。开发者 将它们的文档移植成为XHTML 1.0,会得到以下好处:
XHTML文档遵从XML。这样,用标准的XML工具很容易查看,编辑和检验它们。
XHTML文档可以在现有的HTML4代理用户程序中使用,也可以在新的XHTML用户代理程序中使用,在后者中可以达到与前者同样或更好的效果。
XHTML 文档中使用的应用程序(如script 和 applet) 可以是HTML 的文档对象模型(Document Object Model) ,也可以是 XML 的文档对象模型 [DOM]。
随着 XHTML 家族的发展,遵从XHTML 1.0的文档更有可能运用在各种XHTML环境中。
XHTML家族是Internet发展的下一步。 将现在将文档移植成XML,开发者在确保他们的文档向前后兼容的同时,还能享有进入XML世界带来的好处。
1.1 什么是HTML 4?
HTML 4 [HTML] 是SGML (Standard Generalized Markup Language) 的一个应用,遵从国际标准ISO 8879,被广泛的当作 World Wide Web上的标准出版语言。
SGML是一种描述标记语言,特别是那些用于电子文档交换,文档管理和文档发布语言的语言。HTML是SGML定义的语言的一个实例。
SGML出现在80年代中期,一直保持得很稳定。稳定是原因是它有丰富的特征和具有灵活性。但是,灵活性的带来一定程度的复杂性,限制了它在多种环境下的适应性,包括World Wide Web。
HTML最初的构想是作为一种交换科学和其它技术文档的一种语言,供那些不熟悉书写文档的专家使用。HTML规定一小套结构语义标签,适于书写 相对简单的文档,从而解决了SGML复杂性的问题。除了简化了文档结构外,HTML还加入了对超文本的支持,以后还增加了媒体功能。
在非常短的时间内,HTML变得广泛流行,并且很快超出了其原来的目的。HTML(标准)内部的新元素以很快的速度创造出来,HTML也被很快的改编以用于垂直的,高度专门化的市场。多余的新元素导致文档在跨平台时的兼容问题。
随着软件和平台不一致性增加,很显然,“经典的”HTML 4在这些平台上使用的适用性就会受到一些限制。
1.2 什么是 XML?
XML[XML]是Extensible Markup Language的缩写,创造XML的目的是重新获得SGML的能力和灵活性,而去除其大部分复杂的东西。尽管是一个受限制SGML的形式,但是XML仍 保留了SGML的大部分功能和丰富性,还保留了SGML的所有常用特性。
在保留这些有用的特性的同时,XML去掉了SMGL中很多更复杂的特性,这些特性使得书写和设计合适的软件既困难又昂贵。
1.3 为什么需要XHTML?
上面已经提到了移植到XHTML的好处,一般来说,移植到XHTML的好处有:
文档开发者和用户代理程序设计商常常用新方法,新标签来表达它们的想法。用XML导入新元素和新的元素属性相对来说更容易。XHTML家族被设 计用来提供这些扩展,通过XHTML模块和开发新的遵从XHTML的模块的技术。(将在即将出台的XHTML模块化规范说明书中描述)。在开发文档和设计 新用户代理程序时,这些模块将允许混合使用现有的和新的特性集。
各种替代的访问Internet的方法不断的被提出。一些人估计,到2002年,internet上75%的文档会在这些替代的平台上被查看。 XHTML 在设计时就考虑到用户代理程序的协同工作性。通过一个新的用户代理程序和文档协议机制,服务器、代理程序和用户代理程序将能够最佳地满足传输,最后,有可 能开发出遵循XHTML的文档,能被任何遵循XHTML的用户代理程序使用。
2. 定义
2.1 术语
本规范书要用到下面的词条。这些词条基于ISO/IEC 9945-1:1990 [POSIX.1]中类似的定义,并扩展定义在[RFC2119]中:
执行定义(Implementation-defined)
一个值或行为被执行定义时,它由执行来定义相应的需要以正确解释文档。
可以(May)
在执行时,词“可以”被解释为一个可选的特性,在本规范书中不是必须的,但是可以提供。对于文档一致性来说,词”可以”的意思是不能使用可选的特性. ”可选的”(optional)和”可以”的定义是相同的。
必须(Must)
在本规范书中,“必须”被解释为,在执行时或对于严格遵循XHTML的文档的强制需要。词条”应当”(shall)和”必须”的定义相同。.
保留(Reserved)
一个值或行为未被指定,但是不允许用于符合规范的文档,也不被符合规范的用户代理程序支持。
应该(Should)
在执行时,”应该”被解释为一个执行时的建议,但不是一个必须。对于文档来说,“应该”被解释为:编程练习时是推荐使用的,对于严格遵循XHTML的文档,则是必须的。
被支持(Supported)
本规范书中某些功能是可选的,如果一个功能被支持,它的行为被本规范书规定。
未指定(Unspecified)
一个值或行为未被指定时,规范书不定义一个功能的可移植性要求,即使文档中使用了这个功能。在这种情况下,一个需要指定的行为的文档,而不是在使用这个功能时允许任何行为,不是一个严格遵循XHTML的文档。
2.2 常见词条
属性(Attribute)
属性是在DTD中声明过的某个元素的一个参数。属性的类型和取值范围,包括它可能的缺省值,在DTD中定义。
DTD
一个 DTD,又称文档类型定义,是一个XML声明集合,在其中定义遵从DTD的文档中使用的合法的结构,元素和属性。
文档(Document)
文档是一个数据流,还包括它引用的其它数据流。文档的结构是用相关的DTD定义的元素组织起来来保存信息。更多信息,请参看 Document Conformance 。
元素(Element)
元素是在DTD中声明的文档的结构单位。元素的内容模型在DTD中定义,额外的语义可以在另外的元素描述中定义。
功能(Facilities)
功能包括元素,属性和与元素属性相关的语义。支持这些功能的执行说成提供了所需的功能。
执行(Implementation)
执行是指系统提供了功能和服务集以支持本规范书。更多信息,请参看User Agent Conformance。
分析(Parsing)
分析是扫描文档的动作,文档包含的信息被过滤成元素的上下文结构包含的信息。
显示(Rendering)
显示是文档信息被呈现的动作。显示以最适合环境的形式完成(如声觉,视觉,打印)。
用户代理程序(User Agent)
用户代理程序是执行程序,获取并处理XHTML文档。更多信息,请查看User Agent Conformance。
验证(Validation)
验证是用相关的DTD检验文档的过程,以确信结构,元素的使用,属性的使用和DTD中的定义一致。
格式良好(Well-formed)
一个格式良好的文档的结构依照XML1.0推荐标准[XML]中2.1节Section 2.1的规定。基本上,这个定义规定了元素必须有起始和结束标签,要正确的互相嵌套。
3. XHTML 1.0的标准定义
3.1 文档一致性
本版本 XHTML 提供了严格的遵循XHTML文档的定义,受限于XHTML名址提供的标签和属性。使用XHTML其它名址空间的信息,如RDF表达的元数据,请参看Section 3.1.2 。
3.1.1 严格遵循的文档。
一个严格遵循XHTML的文档只需要本规范书描述的强制性功能,必须依照下列标准:
它必须经过附录A Appendix A中的3中DTD之一的验证。
文档的根元素必须是<html>。
文档的根元素必须用xmlns属性[XMLNAMES]指定XHTML名址。XHTML的名址在http://www.w3.org/1999/xhtml中定义。
在根元素之前,必须有一个DOCTYPE 声明。DOCTYPE声明中包含的公共标识符必须引用附录A Appendix A中的3中DTD的一种,每种DTD有各自的正式公共标识符。系统标识符可以改变以适应本地系统。
<!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-transitional.dtd">
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"DTD/xhtml1-frameset.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文档中都是必须的。XHTML被强烈建议使用XML声明。当字符编码不是缺省的UTF-8或UTF-6时,这样的声明是必须的。
3.1.2 在XHTML中使用其它名址空间
在XHTML名址空间中可以用[XMLNAMES]使用其它XML名址空间,尽管这样文档会不是严格遵循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>
3.2 用户代理程序一致性
一个遵从的用户代理程序必须遵照下面所有标准:
为和XML1.0推荐标准一致 [XML],用户代理程序必须分析和评估XHTML文档的编排良好性。如果用户代理程序宣称自己是一个带验证能力的用户代理,它还必须依照[XML]安文档引用的DTD来验证文档。
当用户代理程序宣称支持本规范书定义的功能facilities时,它必须按功能的定义来支持。
当用户代理程序按一般的XML来处理XHTML文档时,它应当只将ID类型的属性(如多数XHTML元素的ID属性)识别成片段标识符。
如果用户代理程序遇到一个它不识别的元素,它必须显示元素的内容。
如果用户代理程序遇到一个它不识别的属性,它必须忽略整个属性的定义(即属性及其值)。
如果用户代理程序遇到一个它不识别的属性值,它必须使用使用属性的缺省值。
如果它遇到一个实体引用(不是预定义了的实体),用户代理程序没有处理过其声明(如果声明是在用户代理程序没有读到的外部子集中就会发生),实体引用应该以字符显示(以&符号开始,以半冒号结束),以编排成实体引用。
在显示内容时,用户代理程序如果遇到它不认识的字符或认识但不能显示字符实体引用,它应该以显眼的方式告诉用户发生了异常显示。
下面的字符在 [XML]中被定义为 空白(whitespace)字符:
空格 ( )
Tab (	)
回车 (
)
换行 (
)
XML处理程序将不同系统的行结束码规格化为单个换行附传递给应用。因此XHTML还必须将下列字符看成空白字符:
换页 ()
0宽度空格 (​)
对 'xml:space' 属性被设为”保留”的元素,用户代理程序必须保持所有空白字符的原样 (引导和结尾处空白字符除外,这些字符应该被删除). 否则,按下列规则处理空白字符:
所有块元素周围的空白字符应该被删除。
注释全部去除,不影响空白符的处理。注释两旁的一个空白符被处理为两个空白符引导和结尾处空白字符应该被删除块元素内的换行字符必须转换成空格 ('xml:space' 属性被设为”保留”时例外)。
一串连续的空白字符必须减少为单个空格 ('xml:space' 属性被设为”保留”时例外)。
在显示时,用户代理程序应该以恰当的方式显示文档内容为文档内容书写的语言。在主要是拉丁书写体的语言中,ASCII空格典型的用来编码语法上 的词的分界和印刷上的空白; 在和Nagari书写体相关的语言中 (如梵语,泰语等),语法上的边界可以用ZW空格字符编码,但是在显示输出时一般不用印刷上的空格表示; 用阿拉伯语形式书写体的语言,可以用空格字符编码印刷上的空白,单不能用ZW空格定界内部的文法分界(如,在英语看来是一个词的'kitAbuhum' = 'kitAbu-hum' = 'book them' == their book ,在阿拉伯语中编码为几个词); 中文书写体习惯则一般既不用这种方式编码分界也不使用印刷上的空白。
属性的值中的空白符的处理方式按照[XML]。
4. 与HTML 4的区别
因为XHTML是XML的一个应用,一些在基于SGML的HTML 4中完全合法的习惯在XHTML中必须改变。
4.1 文档必须是编排良好的
编排良好性Well-formedness是[XML]引入的一个新概念。从本质上说,这意味着元素必须有结束标签,或者必须以特殊方式书写(在下面说明)。
元素必须嵌套,尽管SGML规定层叠非法,但现有的浏览器普遍允许层叠。
正确:嵌套元素。
<p>here is an emphasized <em>paragraph</em>.</p>
不正确:层叠元素。
<p>here is an emphasized <em>paragraph.</p></em>
4.2 元素和属性名必须小写
对所有HTML元素和属性名,XHTML 文档必须使用小写。 因为XML是大小写敏感的,所以这个差别是必须的。如 <li> 和 <LI> 是不同的标签。
4.3 对非空元素,必须使用结束标签
在基于 SGML的 HTML 4 中,一些隐含结束意义的元素允许忽略结束标签。而在基于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.
4.4 属性值必须在引号中
所有的属性必须用引号,即使是数字。
正确:在引号中的属性值
<table rows="3">
不正确:不在引号中的属性值。
<table rows=3>
4.5 属性最小化
XML 不支持属性最小化. 属性值对必须写全。象compact,checked这样的属性名不能不指定属性值而在元素中出现。
正确:没有最小化的属性
<dl compact="compact">
不正确:最小化属性
<dl compact>
4.6 空元素
空元素要么必须有结束标签,要么起始标签以/>结束. 例如,<br/>或<hr></hr>. 请参看HTML兼容性指导 HTML Compatibility Guidelines 中的信息,以保证向后兼容HTML 4用户代理程序
正确:结束的空元素
<br/><hr/>
错误:未结束的空标签
<br><hr>
4.7 属性值中的空白字符处理
对属性值,用户代理程序将删去引导和后序空白符,将一个或多个空白符(包括换行)转换成单个字符间空间(在西方书写体中是一个ASCII空格) See Section 3.3.3 of [XML]。
4.8 Script and Style 元素
在XHTML中,script和style元素声明为#PCDATA内容形式,因此,< 和 & 被看作是标识的开始,<和& 这样的实体被XML处理程序看作为实体引用而分别被认为是< 和 & . 将script和style元素的内容包裹在CDATA记号部分中避免了这些实体的扩张。
<script>
<![CDATA[
... unescaped script content ...
]]>
</script>
CDATA 部分被 XML 处理程序识别,是文档对象模型中一个结点。请参看1.3节Section 1.3的DOM LEVEL 1推荐标准[DOM]。
替代的方式是使用外部script和style文档。
4.9 SGML 禁止
SGML 给作者的DTD可以指定在一个元素内部禁止出现的元素。这样的禁止在XML中是不可能的。
例如,严格的 HTML 4 DTD 禁止任何深度的’a’元素对另一’a’元素的嵌套。在XML中无法写出这样的禁止。尽管这些禁止不能在DTD中定义,一些元素不应该被嵌套。在标准化的附录B Appendix B中是这些元素的汇总。
4.10 具有 'id' 和 'name' 属性的元素
HTML 4 定义了name属性的元素有 a,applet,form,frame,iframe,img,and map. HTML 4还引入了 id 属性. 这两个属性都是被设计作为片段标识符。
在XML中,片段标识符是ID类型,每个元素只能有一个ID类型的属性。因此,在XHTML1.0中,id属性被定义为ID类型。为保证 XHTML1.0文档是结构良好的XML文档,在定义一个片段标识符时,XHTML文档必须使用id属性,即使是对那些以前用name属性的元素。请参看 HTML Compatibility Guidelines 的信息,确保XHTML文档以text/html媒体类型使用时,这些”锚”能向后兼容。
注意,在XHTML 1.0中,name 属性不被正式支持,在以后的XHTML版本中将被删除。
5. 兼容性问题
尽管XHTML不必和已有的用户代理程序兼容,在操作上它很容易实现。创建兼容文档的指导方针在Appendix C中。
5.1 Internet 媒体类型
在本推荐标准发布时,基于XML的应用的通用MIME标签问题还未被解决。
虽然如此,依照Appendix C中指导方针的XHTML文档可以标为"text/html"媒体类型,因为这被大多数浏览器兼容。本文档对XHTML文档的其它MIME标签不做推荐。
6. 未来趋势
XHTML 1.0 提供了一类文档类型的基础,此类文档将扩展xhtml和包含XHTML子集。为了广泛的支持新设备和新应用,定义模块和指定联合这些模块的机制。 这个机制将用统一的方式定义新模块,以扩展和子集XHTML。
6.1 模块化 HTML
因为XHTML的应用从传统的桌面用户代理程序转移到其它平台,显然,在所有的平台上不一定要用到所有的XHTML元素。 例如,手上设备或蜂窝电话可以只支持XHTML元素的一个子集。
模块化的过程将XHTML分为一系列小的元素集。在不同的情况需要时,它们又可以重新联合起来。
这些模块将在以后的W3c文档中定义。
6.2 子集和可扩展性
模块化带来几个好处:
提供了子集化XHTML的正式机制。
提供了扩展XHTML的正式机制。
简化了文档类型间的转化。
促进在新文档类型中的模块重用。
6.3 文档 协议
文档 协议指明了一组文档的句法和语义。遵循文档协议提供了保证文档互用性的基础。文档协议指定处理此类文档所需的功能,如,可以使用哪种图像文件类型,脚本的级别,样式表的支持情况,等等。
对于产品设计者,这可以使不同的团体定义他们自己的标准协议。
对于作者. 这可以使他们避免为不同的客户写不同的文档版本。
对于专业群体,如化学家,医生或数学家,这可以允许用标准的HTML元素加上一组适合专家需要的元素来建立一个特殊的协议。
附录A. DTDs
本附录是标准化的.
这些 DTD 和实体构成了本规范书的一个标准化的部分。本规范书完全的 DTD 文件集以及XML声明和SGML开放目录在一个zip file文件中。
A.1 文档类型定义(Document Type Definitions)
这些 DTD 类似 HTML 4 的DTD. 当DTD模块化之后,构件DTD使用的方法也许更能和HTML 4相对应。
XHTML-1.0-Strict
XHTML-1.0-Transitional
XHTML-1.0-Frameset
A.2 实体集
XHTML的实体集和HTML 4的相同,但是被修饰成有效的XML 1.0实体声明。注意欧洲货币符号的实体 (€ or € 或 €) 是在特殊符号部分定义。
Latin-1 characters
Special characters
Symbols
附录 B. 禁止元素
This appendix is normative.
下面的元素在包含其它元素时有禁止(参看 Section 4.9)。 这些禁止应用于所有深度的嵌套,即,保括子元素。
a
不能包含其它 a 元素。
pre
不能包含 img,object,big,small,sub,或 sup 元素。
button
不能包含 input,select,textarea,label,button,form,fieldset,iframe 或 isindex 元素。
label
不能包含其它label 元素。
form
不能包含其它 form 元素。
附录 C. HTML兼容性指导
This appendix is informative.
本附录总结设计时的方针,指导作者书写可在现有HTML用户代理程序中显示的XHTML文档。
C.1 处理说明
一些用户代理程序会显示处理说明。但是,注意当文档中没有XML声明时,文档只能用缺省的字符编码UTF-8 或 UTF-16。
C.2 空元素
在空元素结束符 / 和 > 前加一个空格,如 <br />,<hr /> 和 <img src="http://blog.netbei.com/karen.jpg" alt="Karen" />. 还有,使用最小化的标签语法,如<br />,因为另一种XML允许的语法 <br></br> 在很多现有用户代理程序会导致不可靠的结果。
C.3 元素最小化和空元素内容
内容模型不是空的元素,在为空的场合(如空title或空段落),不要用最小化形式(如 用 <p> </p>,不用 <p />).
C.4 嵌入的样式表和Script
如果你的样式表使用 < 或 & 或 ]]> 或 --,用外部样式表。如果你的script用 < 或 & 或 ]]> 或 --,用外部script。 注意XML分析程序会在不告知的情况下除去注释的内容。因此,以前用注释的方法”隐藏”script和样式表的习惯使文档可以向后兼容,但是可能在基于 XML的执行时不能按预期工作。
C.5 在属性值内部分行
在属性值中避免使用分行和多个空格符。用户代理程序处理这些情况时不一致。
C.6 Isindex
在文档的head部分不要使用超过一个 isindex 元素. isindex 元素不被赞成使用,赞成使用input元素。
C.7 lang 和 xml:lang 属性
在指定元素的语言时同时使用 lang 和 xml:lang 属性。xml:lang 属性在前。
C.8 片段标识符
在 XML中,以"#foo"形式结束片段标识符URI [RFC2396] 不是指元素有一个属性name="foo",而是指元素有一个被定义为ID类型的属性,如,HTML 4中的id属性。很多HTML客户程序不以这种方式支持ID类型属性,所以,可以将相同的值同时附给这两个属性,以保证最大程度的向后和向前兼容。(如 <a id="foo" name="foo">...</a>).
此外,因为ID类型属性的合法值集比CDATA类型属性的值集小得多,name属性被改为NMTOKEN。这个属性被限制为只有和ID类型或 XML1.0 2.5节中的Name产品同样的值。不幸的是,XHTML的DTD不能表示出这个限制。因为这个改变,在转换现有的HTML文档时要加以注意。 如果在转换时值可能会改变,这些属性的值在文档中必须是唯一的,有效的,任何对这些片段标识符的引用(不管是内部还是外部)必须更新。
最后,注意不赞成在 a,applet,form,frame,iframe,img,和 map 元素中使用name属性,在以后的XHTML版本中,它将被去除。
C.9 字符编码
要指定文档中的字符编码,同时在xml声明中使用编码属性指定 (如. <?xml version="1.0" encoding="EUC-JP"?>) 和在meta中用 http-equiv 语句 (如 <meta http-equiv="Content-type" content='text/html; charset="EUC-JP"' />).xml处理指令的编码属性值在前。
C.10 布尔属性
一些HTML用户代理程序在布尔属性以完全(非最小化)形式出现时不能解释它们,而这是XML1.0必须的。注意这个问题不会影响用户代理程序 对HTML 4的兼容。包括以下一些属性: compact,nowrap,ismap,declare,noshade,checked,disabled,readonly,multiple, selected,noresize,defer.
C.11 文档对象模型和 XHTML
文档对象模型 level 1 推荐标准 [DOM] 定义XML和HTML 4的文档对象模型。 HTML 4 文档对象模型规定HTML元素名和属性名以大写形式返回。XML文档对象模型规定元素名和属性名以它们被指定的形式返回。在 XHTML 1.0中,元素和属性指定为小写形式。对这个显著的差别可以用两种方式处理:
通过DOM访问text/html internet媒体类型XHTML文档的应用程序可以使用HTML DOM,还可以依赖这些界面返回的大写的元素名和属性名。
通过DOM访问text/xml或application/xml internet媒体类型XHTML文档的应用程序也可以使用XML DOM. 元素名和属性名将以小写形式返回。 并且,一些 XHTML 元素可以也可以不出现在对象树中,因为在内容模型中它们是可选的(如table中的 tbody 元素). 在HTML 4中,一些元素可以允许被最小化以至于它们的开始标签和结束标签都被忽略(SGML特性),所以可以发生。但是在XML中不行。XHTML使元素成为可选 的,而不是要由文档作者来插入外来元素。相应地,应用程序需要适应这一点。
C.12 在属性值中使用 &
在属性值中含有&符号时,它必须用字符实体引用来表示 (即 "&"). 例如,当一个元素的 href 属性指向一个接收参数的 CGI脚本时,它必须表示为http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user,而不是 http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user.
C.13 层叠样式表和XHTML
层叠样式表 level 2推荐标准 [CSS2] 定义style的属性,用于分析HTML和XML文档的树形结构。分析时的不通将导致不同的视觉或听觉效果,这依赖于使用的选择器。下面的技术可以减少对文档的这种影响,而用不修改这两中媒体类型:
XHTML的CSS样式表应该用小写的元素和属性名。
在table中,tbody 元素会被HTML用户代理程序的分析器推断出,但是XML用户代理程序的分析器不会这么做。所以如果在CSS选择器中要被引用到,你应该总是明晰地加上tbody元素。
在XHTML 名址空间,用户代理程序将把”id”属性认作为一个ID类型的属性。因此,即使用户代理程序不能认出DTD,样式表也应该能够继续使用”#”简化选择器语法。
在XHTML 名址空间,用户代理程序将识别class属性,因此,样式表应该能构继续使用”.”简化选择器语法。
CSS 定义HTML和XML文档的不同一致性标准; 在XHTML文档以HTML表达时,用HTML规则,在XHTML文档以XML表达时,用XML规则。