-
关于 SGML
-
HTML 语法
-
条目
-
元素
-
特性
-
HTML 注解
-
如何阅读 HTML 的 DTD
-
封闭级别和行内元素
-
DTD 注解
-
统一定义
-
元素定义
-
特性定义
文 档 的 这 部 分 包 含 了 SGML 的 介 绍 信 息 以 及 SGML 与 HTML 的 联
系. 它 讨 论:
关于
标 准 通 常 标 注 语 言 (Standard Generalized Markup Language,
SGML, 在 [ISO8879]
定 义), 是 一 种 用 来 定 久 标 注 记 号 的 语 言. HTML 就 是 SGML 的 一
种 "应 用".
一个 SGML 应 用 程 式 包 含 下 列 列 部 分
-
SGML 声 明. SGML 声 明 指 定 了 哪 些 字 符 和 定 位 符 将 出 现 在 应
用 中.
-
文 档 型 式 定 义 (Document type definition, DTD). DTD 定 义 了 标 注 结
构 的 语 法. DTD 可 以 包 含 扩 展 的 定 义 如 数 字 和 字 符 条 目.
-
一 份 说 明 书 描 述 了 语 意 学 上 的 标 注. 这 份 说 明 书 也 加 上 了
不 能 在 DTD 中 表 达 的 语 法 的 限 制.
-
文 档 实 例 包 含 数 据 (目 录) 和 标 注. 每 一 个 例 程 包 含 了 一 个
DTD 用 来 说 明 的 参 考.
HTML 的 SGML 声明 与HTML
4.0 DTD 包 含在 这 份 手 册 中, 在 DTD 的 统一设定
参 考 中.
HTML 语法
在 这 部 分 中, 我 们 讨 论 HTML 元 素, 特 性 和 注 解 的 语 法.
统一地
字 符 条 目 是 可 以 被 包 含 于 一 份 HTML 文 档 的 数 字 或 符 号 字
符 名 称. 当 你 的 作 者 工 具 在 输 入 不 常 输 入 的 字 符 时 遇 上 困
难 或 根 本 无 法 输 入 时 它 就 有 用 了. 你 可 以 在 这 份 文 档 中 看
到 这 些 字 符 条 目, 它 们 以 "&" 符 号 开 始 并 以 分 号 (;) 结 束.
我 们 将 在 以 后 的 HTML 字符条目
中 讨 论 这 些 细 节, 参 见 HTML 文 档 字 符 集 的 章 节.
元素
一 个 SGML 的 应 用 定 义 元 素 的 结 构 和 希 望 的 行 为. 一 个 典 型
的元 素 由三 部 分 组 成: 一 个 开 始 标 记, 内 容, 一 个 结
束 标 记.
一 个 元 素 的 开 始 标 记 写 作 <element-name>, 这 里 的
element-name 是 元 素 名 称. 一 个 元 素 的 结 束 标 记 在 开
始 标 记 前 加 上 一 个 斜 杠: </element-name>.
例 如,
<pre>The content of the PRE element is preformatted
text.</pre>
HTML 的 SGML 定 义 指 出 某 些 HTML 元 素 并 不 需 要 结 束 标 记. 在 本
参 考 手 册 的 每 个 元 素 的 定 义 中 指 出 了 是 不 需 要 结 束 标 记.
一 些 HTML 元 素 没 有 内 容. 如, 换 行 元 素 BR
没 有 内 容; 它 的 唯 一 作 用 就 是 终 止 一 行 文 字. 如 "empty" 元 素
从 来 没 有 结 束 标 记. 在 参 考 手 册 中 的 每 一 个 元 素 的 定 义 都
指 出 是 不 可 以 为 空 (没 有 内 容), 如 果 能 够 有 内 容, 则 讨 论 什
么 是 合 法 内 容.
元 素 名 称 经 常 是 大 小 写 无 关 的.
元 素 不 是 标 记. 某 些 人 们 不 正 确 地
认 为 元 素 就 是 标 记.(如 说 成"P 标 记"). 记 住, 元 素 是 一 件 事,
而 标 记 (无 论 是 开 始 标 记 不 是 结 束 标 记) 则 是 另 一 件 事. 例
如, HEAD 元 素 经 常 存 在, 而 HEAD 开 始 标 记 和 结 束 标 记 甚 至 可
以 不 存 在 于 标 注 中.
特性
元 素 可 能 有 相 关 的 属 性, 叫 做特 性, 作 者 对 分 配 值.
特 性/ 值 对 出 现 在 元 素 开 始 标 记 最 后 的 ">" 之 前. 在 元 素 开
始 标 记 中 可 以 出 现 任 意 数 量 的 (合 法 的) 特 性 数 值 对, 用 空
格 分 开. 它 们 可 以 用 任 意 次 序 出 现.
此 例中, 为H1
元 素 设 定 align
特 性:
<H1 align="center">
This is a centered heading thanks to the align attribute
</H1>
缺 省 的, SGML 要 求 你 用 双 引 号 (")或 单 引 号 (')
括 起 所 有 的 特 性 值. 单 引 号 可 被用 双 引 号 括 起 的 特 性 值 包
含 或 反 之. 你 也 可 以 使 用 编 号 字 符 条 目 来 显 示 双 引 号 (")
和 单 引 号 ('). 对 于 双 引 号, 你 还 可 以 使 用 命 名 字 符
条 目 ".
在 一 定 情 况 下, 可 能 在 HTML 中 指 定 特 性 的 值 而 无 需 任 何
引 号. 特 性 值 只 能 包 含 字 母 (a-z 和 A-Z), 数 字 (0-9), 短 线 (10
进 制 ASCII 码 45) 和 小 数 点 (10 进 制 ASCII 码 46). 我 们 建 议 即 使
在 可 以 无 须 的 情 况 下 也 使 用 引 号.
特 性 名 称 一 直 是 大 小 写 无 关 的.
特 性 值 通 常 是 大 小 写 元 关 的 . 在 参 考 手 册中 每 个 特 性 的
定 义 时 指 出 它 的 值 是 否 大 小 写 无 关.
注 意: HTML 文 档 可 以 被 压 缩 得 更 小 如 果 使
用 小 写 字 母 来 标 识 元 素 和 特 性 名 称. 这 个 原 因 是 压 缩 算 法
的 工 作 更 流 畅 于 重 复 的 参 数 而 对 于 大 写 字 母 来 说 小 写 字
母 也 更 流 畅 .
HTML 注释
HTML 注 释 具 有 以 下 的 语 法:
?
<!-- this is a comment -->
<!-- and so is this one,
which occupies more than one line -->
注 释 必 须 不 作 为 文 档 的 一 部 分 被 用 户 代 理 器 渲 染. 类 似 地,
用 户 代 理 器 必 须 不 渲 染 SGML 处 理 指 导 (如 <?full volume>).
如何阅读 HTML DTD
这 份 说 明 明 书 在 每 个 元 素 或 特 性 定 义 处 说 明 DTD 片 断. 因
此, 首 先 是 隐 藏 的 和 阻 止 的, DTD 片 断 给 出 关 于 元 素 和 其 特
性 的 简 明 信 息. 我 们 选 择 包 含 在 这 份 说 明 书 中 的 DTD 片 断
的 超 过 更 多 相 宜 性 的 搜 寻, 但 在 元 素 描 述 里 有 或 多 或 少 的
精 确 含 义. 几 乎 所 有 的 定 义 使 用 了 充 分 的 英 语 来 使 它 们 具
有 全 面 性, 对 于 那 些 需 要 定 义 信 息 的 人 们, 我 们 完 成 了 这
篇 关 于 阅 读 HTML DTD 的 规 格 书.
封闭级别和内层元素
当 其 它 的 元 素 被 叫 做 "内 层 (inline)" (也 称 之 为 "文 本 级 (text
level)")时 一 定 的 HTML 元 素 被 叫 做 "block level (封 闭 级)". 它 们
之 间 的 区 别 有 数 个:
-
内容模型
-
通 常, 封 闭 级 元 素 可 以 包 含 内 层 元 素 和 其 它 的 封 闭 级 元 素.
通 常, 内 层 元 素 只 能 包 含 数 据 和 其 它 内 层 元 素. 在 结 构 的
继 承 方 面 有 一 个 概 念 就 是 封 闭 级 建 立 较 之 于 内 层 元 素 的
"更 大" 的 结 构.
-
格式
-
缺 省 的, 封 闭 级 元 素 比 内 层 元 素 更 格 式 化. 封 闭 级 元 素 通
常 以 新 的 一 行 开 始, 而 内 层 元 素 则 不. 封 闭 级 元 素 结 束 一
个 未 终 止 的 段 落. 这 能 够 使 你 在 某 些 情 况 下 省 略 段 落 的 结
束 标 记.
-
方向性
-
由 于 技 术 的 原 因 包 括 [UNICODE]
双 向 运 算 法 则, 封 闭 级 和 内 层 元 素 在 如 何 继 承 方 向 信 息 上
有 所 不 同. 关 于 细 节, 请 参 见 文本方向的继承
部 分.
风 格 提 供 指 定 任 意 专 制 的 元 素 的 渲 染 方 法, 包 括 一 个 元 素
是 渲 染 为 封 闭 的 还 是 内 层 的. 在 某 些 情 况 下, 如 一 个 列 表
元 素 的 内 层 风 格, 这 是 相 宜 的, 但 通 常 的 说 法 是 不 鼓 励 作
者 以 这 种 方 法 超 越 HTML 元 素 的 约 定 解 译.
封 闭 级 的 和 内 层 元 素 的 典 型 展 现 习 惯 的 轮 替 也 有 一 个
对 于 双 向 文 本 运 算 法 则 的 冲 击. 参 见 风格页对于双向性的影响
章 节 获 得 更 多 信 息.
DTD 注释
在 DTD 中, 注 释 可 以 单 独 存 在 一 行 或 更 多 行 中. 在 DTD 中, 注
释 通 过 一 对 "--" 符 号 来 包 含, 如.
<!ELEMENT PARAM - O EMPTY -- named property value -->
这 里, 注 释 "named property value" 解 释 了 PARAM
元 素 的 使 用. HTML 的 DTD 注 释 没 有 标 准 的 值.
条目定义
HTML DTD 开 始 于 一 系 列 的 条 目 定 义.
一 个条 目 定 义 (不 要 与 SGML 条 目 混 淆) 这 下 为 一 种
可 以 DTD 任 意 地 方 扩 展 的 宏. 当 这 个 宏 通 过 名 称 在 DTD 中 被
指 定, 它 扩 展 为 一 个 字 符 串.
一 个 条 目 定 义 以 关 键 词 <!ENTITY % 开 始 后 随 条
目 名 称, 引 号 包 括 了 要 扩 展 的 条 目, 最 后 用 一 个 结 束 符 >.
下 面 的 例 程 定 义 了 一 个 %font 条 目 并 将 被扩 展.
<!ENTITY % font "TT | I | B | U | S | BIG |
SMALL">
条 目 扩 展 的 字 串 可 以 包 含 其 它 的 条 目 名 称. 这 些 名 称 的 户
展 是 恢 复 性 的. 下 在 的 例 程 中, %inline 条 目 被 定 义 为
包 含 %font, %phrase, %special 和 %formctrl
条 目.
<!ENTITY % inline "#PCDATA | %font | %phrase
| %special | %formctrl">
你 将 会 频 繁 地 遇 到 两 种 DTD 条 目 在 HTML
DTD 中: %inline 和 %block. 它 们 在 内 容 模 块 包 含 内 层 或 封 闭
元 素 时 被 使 用.
元素定义
HTML DTD 的 主 体 由 元 素 定 义 和 它 们 的 特 性 组 成. <!ELEMENT>
关 键 词 以 一 个 元 素 定 义 开 始 并 以 > 字 符 结 束. 在 此 之 间 则
定 义 了:
-
元 素 的 名 称.
-
元 素 的 结 束 标 记 是 否 是 可 选 的. 在 元 素 名 称 后 面 有 两 个 短
横 则 表 示 开 始 标 记 和 结 束 标 记 都 是 强 制 性 的. 一 个 后 随 字
母 "O" (不 是 零) 的 短 横 意 味 着 结 束 标 记 可 被 省 略. 一 对 字 母
"O" 则 意 味 着 开 始 标 记 和 结 束 标 记 均 可 省 略.
-
元 素 的 内 容, 如 果 有 的 话, 一 个 元 素 的 允 许 的 内 容 被 叫 做内
容 模 板. 没 有 内 容 的 元 素 被 叫 做 空 元 素. 空 元 素
以 关 键 词 "EMPTY" 定 义.
在 此 例 中:
<!ELEMENT UL - - (LI)+>
-
被 定 义 的 元 素 是 UL.
-
两 个 短 横 指 开 始 标 记 和 结 束 标 记 都 是 必 须 的.
-
这 个 元 素 的 内 容 模 板 被 定 义 为 "至 少 一 个 LI 元 素". 我 们 下
机 讨 论 内 容 模 板 的 细 节.
这 个 例 程 说 明 空 元 素 的 定 义:
<!ELEMENT IMG - O EMPTY>
-
被 定 义 的 元 素 是 IMG.
-
后 随 一 个 "O" 的 短 横 意 味 着 结 束 标 记 可 以 被 省 略, 但 要 与
内 容 模 板 "EMPTY" 一 起 出 现, 这 加 强 了 结 束 标 记 必 须 省
略 的 法 则.
-
"EMPTY" 关 键 词 的 意 思 是 必 须 没 有 内 容.
内容模板定义
内 容 模 板 描 更 述 了 元 素 中 可 以 包 含 些 什 么. 内 容 定 义 可 以
包 括:
-
允 许 或 禁 止 元 素 的 名 称 (例如 UL
元 素 包 含 一 个 LI
元 素 实 例).
-
DTD 条 目 (如 LABEL
元 素 包 含 %inline 条 目 实 例).
-
文 档 文 本 (指 通 过 SGML "#PCDATA" 结 构). 文 本 可 以 包 含 数字和命名字符条目.
以 & 开 始 呼 叫 并 以 分 号 结 尾 (如 "Hergé's adventures
of Tintin" 包 含了 "acute e" 字 符 的 命 名 字 符 条 目).
内 容 模 板 使 用 下 列 的 语 法 来 定 义 哪些 标 记 是 元 素 内 容
允 许:
-
( ... )
-
定 义 一 组.
-
A | B
-
A 和 B 两 者 均 允 许, 并 可 以 按 任 何 次 序.
-
A , B
-
A 必 须 出 现 在 B 之 前.
-
A & B
-
A 和 B 两 次 必 须 出 现 一 个, 但 可 以 按 任 何 次 序.
-
A
-
A 可 以 出 现 零 或 一 次.
-
A*
-
A 可 以 出 现 零 或 更 多 次
-
A+
-
A 可 以 出 现 一 次 或 更 多 次
这 里 是 一 些 来 自 于 HTML DTD 的 例 程:
-
<!ELEMENT SELECT - - (OPTION+)>
SELECT 元
素 必 须 包 含 一 个 或 更 多 的 OPTION
元 素.
-
<!ELEMENT DL - - (DT|DD)+>
DL 元 素 必 须 按
任 何 次 序 包 含 一 个 或 更 多 的 DT
或 DD 元 素.
-
<!ELEMENT OPTION - O (#PCDATA)*>
OPTION 元
素 只 能 包 含 文 字 和 条 目, 如 &
少 数 HTML 元 素 使 用 一 种 典 额 外 的 SGML 功 能 来 从 内 容 模 板 中
排除 一 个 的 元 素. 排 除 的 元 素 以 一 个 短 横 开 始. 显 式 地 从
包 含 中 减 去 排 除 的.
在 此 例 中, -(A) 指 出 元 素 A
不 能 包 含 于 另 个 A
元 素 (就 是 说 锚 点 不 能 嵌 套).
<!ELEMENT A - - (%text)* -(A)>
注 意 那 个 A 元 素
是 DTD %inline 条 目 的 一 部 分, 但 被 显 式 地 因 为 -(A)
被 排 除 了.
类 似 的, 下 例 的 FORM
定 义 阻 止 表 单 的 嵌 套:
<!ELEMENT FORM - - %block -(FORM)>
特性定义
<!ATTLIST> 关 键 词 开 始 一 个 元 素 可 以 使 用 的 特 性 的 定 义.
下 面 是 正 在 讨 论 的 元 素 的 特 性 定 义 列 表. 一 个 特 性 定 义 具
有 三 层 涵 义:
-
一 个 特 性 名 称.
-
特 性 值 的 类 型 或 一 个 显 式 的 可 能 的 值 的 集 合. 在 DTD 中 显
式 值 定 义 是 大 小 写 无 关 的.<!-- note that this is according to the SGML spec, but doesn't
take into account problems with Unicode, avoided here because
HTML sticks to ASCII -->
-
不 论 特 性 的 缺 省 值 是 否 是 隐 式 的 (关 键 词 "#IMPLIED"), 一 直
需 要 (关 键 词 "#REQUIRED") 还 是 或 组 合 后 给 出 值 (关 键 词 "#FIXED");
在 这 些 情 况 下 缺 省 值 必 须 由 用 户 代 理 器 提 供 (在 某 些 情 况
下 通 过 从 父 元 素 继 承 而 来). 某 些 元 素 显 示 地 指 定 特 性 元
素 的 缺 省 值.
在 此 例 中, name 特 性 为 MAP
元 素 而 定 义. 这 个 特 性 对 于 此 元 素 是 可 选 的.
<!ATTLIST MAP
name CDATA #IMPLIED
?>
这 个 特 性 允 许 的 值 的 类 型 为 CDATA, 一 种 SGML 数 据 类 型. CDATA
是 一 种 可 以 包 含 字符条目 的 文 本.
关 于 更 多 的 "CDATA", "NAME", "ID" 和 共 它 的 数 据 类 型 的 信 息,
请 参 见 HTML 数据类型 章 节.
下 面 的 例 程 说 明 了 可 能 的 特 性 定 义:
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 特 性 需 要 NAME 类 型 的 值. 可 选
特 性 id 需 要 ID 类 型 的 值. 可 选特 性 valign 被
考 虑 为 从 集 {top, middle, bottom, baseline}中 取 得 值.
在特性定义中的DTD 条目
特 性 定 义 也 可 以 包 含 DTD 元 素.
在 此 例 中, 我 们 看 到 LINK
元 素 的 特 性 定 义 列 表 element begins with the %attrs entity.
<!ATTLIST LINK
?%attrs; -- id, class, style, lang, dir, title --
?href %URL #IMPLIED?-- URL for linked resource --
?...more of the definition...
?>
%attrs 条 目 扩 展 为:
<!ATTLIST P
?id ID #IMPLIED?-- document-wide unique id --
?class CDATA #IMPLIED?-- comma list of class values --
?style CDATA #IMPLIED?-- associated style info --
?title CDATA #IMPLIED?-- advisory title/amplification --?
?lang NAME #IMPLIED?-- [RFC1766] language value --
?dir (ltr|rtl)?#IMPLIED?-- direction for weak/neutral text --
?align (left|center|right|justify)?#IMPLIED
?>
%attrs 条 目 被 合 适 地 定 义 了 大 多 数 HTML 元 素 的 七 种 特 性.
类 似 的, DTD 定 义 了 作 为 护 展 为 CDATA 的 %URL 条 目.
<!ENTITY % URL "CDATA"
-- The term URL means a CDATA attribute
whose value is a Uniform Resource Locator,
See [RFC1808] and [RFC1738]
-->
这 个 例 程 说 明, 这 个%URL 条 目 提 供 DTD 读 者 更 多 的 特 性 期 望
的 数 据 类 型 信 息. 类 似 的 条 目 定 义 为 %color, %Content-Type, %Length,
%Pixels 等 等.
布尔特性
某 些 特 性 担 任 布 尔 特 性 的 角 色 (如 selected).
它 们 在 一 个 元 素 的 开 始 标 记 中 的 出 现 暗 示 特 性 值 为 "true".
它 们 缺 席 则 隐 式 表 示 "false".
布 尔 特 性 可 以 有 一 个 合 法 的 简 单 值: 特 性 名 称 本 身.(如
selected="selected").
这 个 例 程 定 义 了 selected
特 性 为 一 个 布 尔 特 性.
selected (selected)?#IMPLIED?-- reduced interitem spacing --
这 个 特 性 通 过 出 现 于 元 素 开 始 标 记 被 设 为 "true":
<OPTION selected="selected">
...contents...
<OPTION>
最 小 化 布 尔 特 性 在 HTML 中, 布 尔 特 性
可 能 出 现 在 一 个 "最 小 化 表 单" -- 特 性 的 值 出 现 于 元 素 的
开 始 标 记. 因 此:
<OPTION selected>
替 代 为
<OPTION selected="selected">
作 者 应 当 知 道 许 多 用 户 代 理 器 只 识 别 最 小 化 表 单 而 非
完 整 表 单.
前页 | 后页 |
目录 | 元素 |
特性
|