加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

XML自学笔记14——DTD的结构组成(元素类型声明)

(2013-08-10 16:17:04)
标签:

教育

分类: 建站笔记

 DTD的结构一般由元素类型声明、属性表声明、实体声明、记号声明等构成。一个典型的文档类型定义文件会把将来所要创建的XML文档的元素结构、属性类型、实体引用等预先进行定义。

 元素类型声明

 一个DTD不公要告诉XML处理器它所应用XML文档的根元素是什么,而且要告诉XML处理器文档的内容和结构,描述清楚文档结构中的每一个细节。

 元素类型申明不但说明了每个文档中可能存在的元素,给出了元素的名称,而且给出了元素的具体类型。

 一个xml元素可以为空,也可以只包含字符数据,还可以有若干子元素,而这些子元素同时又可以有它们的子元素。DTD呢正是通过元素之间的父子关系描述了整个文档的结构关系。

 元素类型声明采用了如下的语法格式:

<IELEMENT  元素名称  元素内容说明>

元素内容说明可以指明五种可能的元素内容形式:#PCDATA、子元素、混合内容、EMPTY和ANY。

 

(一)元素内容说明——#PCDATA

关键字#OCDATA说明元素包含字符数据。

例子:

http://s7/mw690/54c367d4gx6BKhChtX076&690
 

(二)元素内容说明——子元素

当一个元素只包含子元素,而没有字符数据时,则称此元素类型具有元素型内容。在该类型的元素声明时,通过内容模型来指定在其内容上的约束。内容模型是决定子元素类型和子元素出现顺序的一种简单语法。

内容模型的语法:

1、直接在xml中给出DTD(中括号中)的元素类型声明

一个元素包含一个子元素,同时对子元素进行类型声明。

http://s8/mw690/54c367d4gx6BKhH4YBh67&690

    2、子元素又包含多个子元素,同时对子元素进行声明,并对出场序列作出规定。

公司在XML文档又为员工添加了姓名、年龄、性别信息

 http://s14/mw690/54c367d4gx6BKhMfKot0d&690


    3、现在公司给员工提供两种形式发放工资,一种是现金,一种打帐,但每名员工只能选择其中一种,那就要求我们在定义DTD时指明这种情况,让文档的编写者在编写时只能使用其中的一个元素。我们可以先给empoyee元素再添加一个salary元素,然后再对这个salary元素进行声明,而声明时salary元素的内容模型是选择型的,它只能在cash 和credit_card两个元素之间进行选择,我们可以用竖线隔开表示这种选择。

 http://s8/mw690/54c367d4gx6BKhR3HT117&690

 

    4、公司想在xml文档中体现员工的兴趣爱好,这需要我们在DTD中声明employee元素时给它增加一个子元素interist,再对它进行声明,现在有一个问题,一名员工的举爱好有很多,也可能没有,那我们在DTD如何体现可能有,可能没有,有呢又有可能有很多的这样一种关系呢。我们可以在interist后面加上一个星号(*),它表示0或者多个。

如果公司希望每名员工至少一个爱好,我们可以用+号代替*号,加号说明文档中可以有一个或者多个元素

http://s10/mw690/54c367d4gx6BKhU9Wvn99&690

    5、可给employ再增加一个子元素spouse来记录员工配偶信息,一个人的配偶只能有一个或者没有即0个,可以在元素后面加?号来表示,问号表示元素在文档中有一个或者0个。

 

注意:利用括号、逗号、竖线、星号、加号的组合,可以说明很复杂的内容模型。我们看下面的例子:

<!ELEMENT 简历 (名字,性别,年龄,(电话|手机),家庭住址?,爱好*,教育经历+,工作经验*)>

这说明简历要有名字,性别,年龄,并按照这个顺序出现,电话和手机任选一个,可以填一个家庭住址或者不填,然后是0个或多个兴趣爱好,至少有一个教育经历或多个工作经验。

内容模型虽然简单但是可以产生灵活多样的结构。

 

 

(三)元素内容说明——混合内容

 

1、说明元素即可以包含字符数据,也可以包含子元素,混合内容必须被定义0个或多个。

例子:

 http://s12/mw690/54c367d4gx6BKhXJaifbb&690

    其中,employee(#PCDATA | name)*表示employee元素可以有0个或多个字符数据,或者0 个或多个name子元素。

在使用混合内容模型时,#PCDATA关键字必须是模型中的第一个选项,不能在模型中使用逗号、问号和加号。用竖线分隔#PCDATA和子元素名的列表是合法的,其它用法都是不合法的。

 

  (四)元素内容说明——EMPTY

关键字EMPTY表明该元素既不包含字符数据,也不包含子元素,是一个空元素。

如果在文档中,元素本身已经表示了明确的含义,就可在在DTD中用关键字EMPTY来声明空元素。例如:

<!ELEMENT  br  EMPTY>表明br是一个没有内容的空元素。

 

  (五)元素内容说明——ANY

    关键字ANY表明该元素可以包含任何的字符数据和子元素,只要它们不违反XML格式良好的约束就可以了。

例如:

  <!ELEMENT  employee ANY>表明employee元素可以包含任何形式的内容。

    在实际使用时应该尽量避免ANY,一个定义明确的DTD,有助于我们理清文档的结构,更好地理解文档。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有