良好结构 (Well-formed)是由XML 引入的一个新概念。也就是说所有的元素都必须有结束标签或者以特殊的方式书写(如下所述),而且所有的标签必须合理地嵌套。
尽管如此,交叉使用在SGML中仍然是合法的,而且在现有的浏览器中也能 够被广泛接受。
<p><em>這是一個要强調的段 落。</em></p>
<em><p> 這是一個要强調的段落。</em></p>
XHTML文件要求所有的HTML元素名称和属性名称都要小写。因为XML本身大小写意义不同,因此必须区分开来。比如,<li>
和<LI>
是完全不同的。
基于SGML的HTML 4里面,允许特定的标签省略结束标签;这些元素暗含有结束标记。XHTML不允许省略结束标记。所有元素(包括在DTD中声明为空的标签),都必须有结束标签。在DTD 中声明为空的元素可以用结束标签或者使用空元素速记法。
<p>这是一个段落。</p><p>这是另一个段落。</p>
<p>这是一个段落。<p>这是另一个段落。
所有的属性值都必须使用引号包含,包括那些以数值类型出现的。
<td rowspan="3">
<td rowspan=3>
XML不支持属性简化,属性值对必须书写完整。属性名,像compact和checked在没有指定具体值的情况下,不能够使用。
<dl compact="compact">
<dl compact>
空元素必须有一个结束标签,或者用/>
来结束开始标签。例如,<br />
或者<hr></hr>
。
<br /><hr />
<br><hr>
当客户端在处理属性时,它们依据的是XML的章节3.3.3
在XHTML里面,脚本和样式的元素被声明为具有 #PCDATA 内容。因此,<和&
会被认为是标记的开始,另外<
和 &
会被 XML 解释器认为是实体映射被分别解释成为<
和&
。从而将脚本或者样式元素包裹在 CDATA 标记的部分以避免这些实体扩展。
<script type="text/javascript"> // <![CDATA[ ... 没有转义处理的内容... // ]]> </script>
在文档对象模型中,CDATA部分被XML解释器认为是节点,参见文档对象模型章节1.3的第一级别推荐DOM。
一种替代方法就是使用外部的脚本和样式文件。
SGML赋予DTD作者将特定的元素排斥在某个元素之外的能力。此种限制(被称为排斥)在XML中是不可能的。
例如,HTML 4的严格文档类型描述禁止“a ”作为子元素嵌套在其他“a ”的内部。这在XML中是不可能检查出这种限制的。尽管这种限制无法在DTD中定义,也不要嵌套使用某些特定的元素。关于此类元素和不能嵌套使用的元素概览可以在标准的元素限制里找到。
HTML 4定义了a, applet, form, frame, iframe, img, and map元素的 name属性。HTML 4还引入了id属性。这两个属性被设计用作片段标识符。 在XML里面,片段标识符是ID类型的,而且每个元素只能拥有单一的ID类型的属性。所以,在XHTML 1.0中id属性被定义为ID类型。为了确保XHTML 1.0文档是构建优良的XML文档,XHTML 1.0文档在为以上所列元素定义片段标识符时必须使用id属性。当XHTML文档作为text/html媒体类型使用时,确保此类锚点的向后兼容性信息参见兼容性指南。 注意:在XHTML 1.0中,不赞成此类元素拥有name属性,在XHTML的后续版本中将被去掉。
有一些 属性在HTML 4和XHTML中都有一套预设值(比如input 元素的type 属性)。在SGML和XML中,这些被称为枚 举属性 。在HTML 4里这些值的解释是不分大小写 的,所以值TEXT 等同于text 。在XML里, 这些值的解析是区分大小写 的,在XHTML1中,所有的这些值定义为小写。
SGML和XML都允许使用十六进制的数值来映射字符。在SGML 里这些映射可以使用&#Xnn; 或者&#xnn; 。在XML文档中,必须使用小写的方式(比如,&#xnn; )。
<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。
该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。
以下面这个 <!DOCTYPE> 标签为例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
在上面的声明中,声明了文档的根元素是 html,它在公共标识符被定义为 "-//W3C//DTD XHTML 1.0 Strict//EN" 的 DTD 中进行了定义。浏览器将明白如何寻找匹配此公共标识符的 DTD。如果找不到,浏览器将使用公共标识符后面的 URL 作为寻找 DTD 的位置。
注释: <!DOCTYPE> 标签没有结束标签!
HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。
如果您需要干净的标记,免于表现层的混乱,请使用此类型。请与层叠样式表(CSS)配合使用:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd">
Transitional DTD 可包含 W3C 所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表(CSS)的浏览器以至于您不得不使用 HTML 的呈现特性时,请使用此类型:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd">
Frameset DTD 应当被用于带有框架的文档。除 frameset 元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" " http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。
如果您需要干净的标记,免于表现层的混乱,请使用此类型。请与层叠样式表(CSS)配合使用:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Transitional DTD 可包含 W3C 所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表(CSS)的浏览器以至于您不得不使用 XHTML 的呈现特性时,请使用此类型:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
当您希望使用框架时,请使用此 DTD!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
如需检查你是否编写了带有正确 DTD 的合法 XHTML 文档,您可以把您的 XHTML 页面链接到一个 XHTML 验证器。