怎么看DTD
HTML DTD 有四个部分:
- 注释定义
- 实体定义
- 元素声明
- 内容模型定义
- 属性声明
使用 闭合的 -- 表示,如下:
generic language/style container 就是注释部分
1 <!ELEMENT DIV - - (%flow;)* -- generic language/style container -->
HTML DTD 是由一系列parameter entity definitions构成的,一个parameter entity definitions定义了一个可以被引用或扩展的宏。这些宏在HTML 文档里是看不到的,只在DTD中。即HTML elements的逻辑特征分组。
HTML 实体在DTD中按名引用,通过字符串形式扩展。
具体定义:<!ENTITY % 实体名 "扩展字符串;" > 其中";" 是可选的
字体样式实体定义:
<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">
内联实体定义:
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
具体定义格式:以<!ELEMENT开头,>结尾
其中包括:
- 元素名
- 元素标签是否可选:用连字符(-)表示标签,2个 -连接符 表示前后标签必须;一个连字符,一个0 (- 0 )表示尾标签可选[1]的;2个0 (0 0)表示头尾标签可选。
- 元素内容:定义元素的内容,即内容模型,若元素内容为空,即为空元素,用关键字EMPTY表示
定义UL元素,头尾标签必须,至少一个LI元素:
<!ELEMENT UL - - (LI)+>
定义IMG元素,只需要开始标签,禁止结束标签 空内容
<!ELEMENT IMG - O EMPTY>
定义P元素,结束标签可选,包含内联元素,0+个
<!ELEMENT P - O (%inline;)* -- paragraph -->
Content model definitions :
内容模型定义可能包括:
- 允许/禁止元素类型名
- DTD实体(例如:label 元素 就是 % inline实体的实例 )
- Document 文本("#PCDATA" 表示)
(...)
元组
A
A必须出现且只出现一次
A+
A出现>=1次
A?
A出现0或者一次
A*
A出现>=0次
+(A)
A可选
-(A)
除了A
A | B
不是A就是B,但不能同时存在
A , B
A 和 B 同时存在,并且保持顺序
A & B
A 和 B同时存在,顺序不限制
例如:
定义A元素,内容:除了A元素以外所有inline元素
<!ELEMENT A - - (%inline;)* -(A)>
定义了FORM元素,内容:除了FORM元素,允许多个块元素或者SCRIPT元素(不能同时存在),
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>
定义P元素,内容:0+个inline元素
<!ELEMENT P - O (%inline;)* -- paragraph -->
以<!ATTLIST 开始,>结尾,其中包括:
- 属性名
- 属性值的类型,或者一个确定的值,不区分大小写
- 属性值状态:隐式(关键字#IMPLIED),由UA提供(通常是继承值);必须("#REQUIRED");固定值("#FIXED")。一些属性在声明时,都会提供默认值。
MAP元素的name属性,值CDATA类型,必须:
<!ATTLIST MAP name CDATA #REQUIRED >
DTD entities in attribute definitions
拿LINK 元素定义:
<!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 --
>
<!ENTITY % attrs "%coreattrs; %i18n; %events;">
"%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 --"
>
这里的%coreattrs;相当于对所有元素共用特征的又一次包装。
Boolean attributes :
一些属性相当于布尔变量(例如,option元素的selected属性)。
selected (selected) #IMPLIED -- option is pre-selected --
OPTION默认选择状态:
<OPTION selected="selected"> ...contents... </OPTION>
下面2种方式是等价的:
<OPTION selected>
<OPTION selected="selected">
注:不过一些UA只识别上一种