| |
第三章 SGML和HTML这部分文档介绍SGML以及它与HTML的关系。 3.1 SGML介绍 SGML是一种定义标记语言的系统。制作者通过与内容一起表达结构的、表现的和语意的信息来标记他们的文档。HTML是一个标记语言的例子。下面是一个HTML文档的例子: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<HTML>
<HEAD>
<TITLE>My first HTML document</TITLE>
</HEAD>
<BODY>
<P>Hello world!
</BODY>
</HTML>
HTML文档分为head部分(在<HEAD>和</HEAD>之间)和body部分 (在<BODY>和
</BODY>之间)。 每种定义在SGML语言用的标记语言称为SGML应用,它通常具有以下特征:
HTML 4.0规范包括一个SGML定义,三种文档类型定义和一个字符参考清单。 3.2 HTML中使用的SGML结构 下面介绍HTML中使用的SGML结构。 3.2.1 元素 SGML文档类型定义定义了表示结构或所需行为的元素类型。HTML包括表示段落、超文本链 每个元素类型定义通常描述三部分:一个起始tag,内容,和一个结束tag。 元素名出现在起始 tag(写做<元素名>)和结束tag
(写做 </元素名>);要注意在结束tag元
<UL> <LI><P>...list item 1... <LI><P>...list item 2... </UL> 有的HTML元素类型允许作者取消结束标记符(例如,P和LI)。一些元素类型也允许取消起始 有的HTML元素类型没有内容。例如,换行符元素BR就没有内容;它的唯一作用是结束一行 元素名一直是大小写不敏感的。 3.2.2 属性 元素有相关的特性,称为属性,可以有值(缺省地由作者或脚本设置)。属性/值出现在元素 在下面的例子中,为H1元素设置了id属性: <H1 id="section1"> This is an identified heading thanks to the id attribute </H1> 缺省地,SGML要求所有属性值用双引号或单引号定界。单引号可以包括在双引号内,反之 某些情况下,制作者可以不用任何引号而为属性赋值。这样的属性值只包括字母(a-z和 属性名一直是大小写不敏感的。 属性值一般是大小写不敏感的。参考手册中每种属性的定义指出它的值是否是大小写不敏 字符参考是包含在HTML文档中的代表字符的数字或字符名。它们在指向很少用的字符时很
我们将在本章后面详细讨论HTML字符参考。规范中也包含可能出现在HTML
4.0文档中的字符 3.2.4 注释 HTML注释有一些语法: <!-- this is a comment --> 在<!和--之间不允许出现空格,但是注释可以紧挨着分隔符"--",标记定义可以紧挨着分 注释内出现的信息没有特殊的含义。 规范中的元素和属性定义与文档类型定义片段在一起。我们选择了把DTD片段包含在规范中。 3.3.1 DTD注释 在DTD中,注释可以跨越多于一行的空间,以一对"--"标记分隔,例如: <!ELEMENT PARAM - O EMPTY -- named property value --> 这里,注释"named property value"解释了PAPAM元素类型的用途。DTD中的注释只起信息 3.3.2 参数实体定义 HTML DTD以一系列参数实体定义开始。“参数实体定义”定义了一种可以在DTD中其它地方引 当参数实体在DTD中通过名称引用时,可以扩展成一个字符串。 一个参数实体定义以关键字<!ENTITY %开始,然后跟着实体名,实体扩展到的引用字符串, 下面的例子定义了实体"%fontstyle;"将要扩展成的字符串: <!ENTITY % fontstyle "TT | I | B | BIG | SMALL"> 参数实体扩展成的字符串可能包含其它参数实体名。这些名字被递归地扩展。在下面的例 <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;"> 在HTML DTD中你会经常碰到两种DTD实体:"%block;"
"%inline;"。它们用在内容模型包 HTML DTD块由元素类型的定义和它们的属性组成。<!ELEMENT关键字开始一个定义,>结束
在下面的例子中: <!ELEMENT UL - - (LI)+>
下面的例子说明一个空元素类型的定义:
<!ELEMENT IMG - O EMPTY>
内容模型定义内容模型描述了一个元素类型的实例可以包含什么内容。内容模型定义可以包括:
元素的内容模型通过以下语法定义:
下面是HTML DTD的一些例子: <!ELEMENT UL - - (LI)+> UL元素必须包含一个或多个LI元素。 <!ELEMENT DL - - (DT|DD)+> DL元素必须包含一个或多个DT或DD元素 - 以任何顺序。 <!ELEMENT OPTION - O (#PCDATA)> OPTION元素可以只包含文本和实体,如&;- 通过SGML数据类型#PCDATA指明。 一些HTML元素类型利用一个附加的SGML特征从他们的内容模型中排除元素。被排除的元素前 在这个例子里, -(A)指明元素A不能出现在另一个A元素里(即anchor不能被嵌套)。 <!ELEMENT A - - (%inline;)* -(A)> A元素类型是DTD参数实体"%inline;"的一部分,但是被显式地排除了,因为有 -(A)。 与此相似,下面的FORM类型定义禁止了嵌套窗体: <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>
3.3.4 属性定义<!ATTLIST关键字开始元素的属性定义。它后面是元素名,属性定义清单,和一个表示结
在下面的例子中,定义了MAP元素的name属性,这个属性是可选的。 <!ATTLIST MAP name CDATA #IMPLIED > 这个属性的允许值的类型由CDATA给定 - 一个SGML数据类型。CDATA是包含字符参考的文本。
下面的例子演示了几个属性的定义: rowspan NUMBER 1 -- number of rows spanned by cell -- http-equiv NAME #IMPLIED -- HTTP response header name -- id ID #IMPLIED -- document-wide unique id -- valign (top|middle|bottom|baseline) #IMPLIED rowspan属性要求NUMBER类型的值。其缺省值显式地给定为"1"。可选的http-equiv属性需要 属性定义中的DTD实体属性定义也可以包含参数实体参考。 在下面的例子中,我们可以看到LINK元素的属性定义以"%attrs;"参数实体开始。 <!ELEMENT LINK - O EMPTY -- a media-independent link --> <!ATTLIST LINK %attrs; -- %coreattrs, %i18n, %events -- charset %Charset; #IMPLIED -- char encoding of linked resource -- href %URI; #IMPLIED -- URI for linked resource -- hreflang %LanguageCode; #IMPLIED -- language code -- type %ContentType; #IMPLIED -- advisory content type -- rel %LinkTypes; #IMPLIED -- forward link types -- rev %LinkTypes; #IMPLIED -- reverse link types -- media %MediaDesc; #IMPLIED -- for rendering on these media -- > 起始标记符: 必须, 结束标记符: 禁止 "%attrs;"参数实体定义如下: <!ENTITY % attrs "%coreattrs; %i18n; %events;"> "%attrs;"中的"%coreattrs;"参数实体的定义如下: <!ENTITY % coreattrs "id ID #IMPLIED -- document-wide unique id -- class CDATA #IMPLIED -- space separated list of classes -- style %StyleSheet; #IMPLIED -- associated style info -- title %Text; #IMPLIED -- advisory title/amplification --" > "%attrs;" 参数实体的定义是为了方便,因为大多数HTML元素类型都定义了这些属性。 与此相似,DTD定义了作为字符串"CDATA"的扩展的"%URI;"参数实体。 <!ENTITY % URI "CDATA" -- a Uniform Resource Identifier, see [URI] --> 如上面的例子所演示的,参数实体"%URI;"提供给读者更多的DTD信息
- 相对于属性所期待的 布尔属性一些属性拥有布尔变量(例如,OPTION元素的selected属性)。元素起始标记符中的表现形式 布尔属性只有单一的值:属性名本身(例如,selected="selected")。 下面的例子定义一个selected属性为布尔值。 selected (selected) #IMPLIED -- reduced inter-item spacing -- 通过出现在元素的起始标记符中设置属性的值为"true"。 <OPTION selected="selected"> ...contents... <OPTION> 在HTML中,布尔属性可以出现在最小化表单中--
属性值单独出现在元素的起始标记 <OPTION selected> 而不是: <OPTION selected="selected"> 制作者应注意:有的用户界面只认识布尔属性的最小化表单,而不是全部表单。 |