早起的菜鸟

FEer---思考,感悟,总结,翻译,分享

导航

怎么看DTD

Overview:

HTML DTD 有四个部分:

  • 注释定义
  • 实体定义
  • 元素声明
    • 内容模型定义
  • 属性声明
DTD Comments :

使用 闭合的 -- 表示,如下:

generic language/style container 就是注释部分
1 <!ELEMENT DIV - - (%flow;)*            -- generic language/style container -->

 

Parameter entity definitions :

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 declarations:

具体定义格式:以<!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 -->
Attribute declarations:

以<!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识别上一种

References:

1.On SGML and HTML

posted on 2012-03-26 17:02  早起的菜鸟  阅读(786)  评论(0编辑  收藏  举报