2_1 用XML文档的形式来描述Email

1 元素声明

DTD 中所用的第一种声明是元素声明。其形式如下:

<! ELEMENT name content>

其中,name是一个标准的XML标记的名字。

Content由以下三种之一组成:

关键字EMPTY;

关键字ANY;

描述包含在本元素中的子元素的顺序和重复次数的内容模型。

 

      可以看出,文档中的每一元素在DTD中都有一个相应的声明。只有在DTD中定义

的元素才能出现在文档中。定义元素的顺序是任意的。一般来说,先定义高层次的元素会更好些

      在DTD中声明元素时应注意:

(1)声明以关键字ELEMENT开头,后面是元素名和包含于元素中的子元素列表

(2)数据类型不是DTD的一个特征。

(3)上述DTD中所定义的每个元素,在对应的XML文档中有且仅有一个。若要指

定某个元素出现的次数,则需使用元素出现的次数,则需使用元素出现次数指示符

(4)XML是区分大小写的,所以,ELEMENT和上面其他大写形式的关键字必须用大写字母

 2   元素内容类型(Eelement Content Model)

元素内容通常有5种情况:EMPTY,ANY,#PCDATA,子元素和混合型.

1)EMPTY类型

EMPTY用于定义空元素,该元素只可能有属性而不会有字符数据或子元素,如

<banner>元素.其形式为<banner/>或者<banner></banner>

声明空元素的语法是

2)ANY类型

这种类型的元素声明是:

                  <!ELEMENT anyelement ANY>

这表明该元素可包含DTD中定义的其他任何元素或已编译的字符数据.

ANY的使用应加以限制.DTD的出发点是设置规则来清晰地定义各种元素.而使用ANY就意味元素可以包含DTD中定义的所有其他元素,实质上没有什么规则限制.这与使用DTD的目的背道而驰,所以不鼓励使用

3)#PCDATA类型

不包含其他元素而包含字符数据的元素(如<form>),用关键字#PCDATA进行定义,它代表"已编译的字符数据"

<! ELEMENT para(title,text)>

<! ELEMENT tilte(#PCDATA)>

<! ELEMENT text(#PCDATA)>

PCDATA可以包含除标记以外的一切字符,包括数字,字母和符号等. 被定义包含PCDATA的元素不能包含任何其他子元素.

4)子元素类型

元素可以包含一系列的子元素,子元素内容模型用于指定某个元素可以包含哪些子元素,

                    <!ELEMENT message(header,body,signature,footer)>

说明message元素包含4个元素,依次是header,body,signature和footer元素。

根据子元素间的关系,子元素内容模型可以有两种可能的结构:序列和选择。

 

(1)序列

对message元素的声明,其所有子元素必须出且有仅出现一次,而且要依次出,这种结果称为序列。

如,若与其对应的XML文档中,body子元素出现在header子元素之前而不是这后,则该文档即使是结构良好,但由于它未遵循该DTD,从而也是无效的。

使用序列时应注意两点:

首先,序列中不能出#PCDATA。

其次,子元素自身还可以包含其他子元素

(2)选择

元素间的选择可以进行如下声明

<!ELEMENT elem(subelem1|subelem2|subelem3)>

将子元素用“|”进行分隔,表明elem元素的子元素为subelem1,subelem2,subelem3三者之一

 

5)混合类型

若某元素既包含子元素又包含已编译的字符数据,则该元素具有混合内容

其声明的语法如下:

<! ELEMENT pick(#PCDATA |one|two|three)*>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值