XML学习笔记(DTD元素及其内容模型)

本文详细介绍了XML中不同类型的元素如何进行声明,包括包含子元素、文本内容、空元素等,并通过实例展示了各种元素的声明方式及其意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.包含子元素的元素

  声明语法格式:

  <!ELEMENT  elementname(child1,child2,......)>

  实例:

<?xml version="1.0" encoding="gb2312"?>

 

<!DOCTYPE student[

<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*)>

]>

 

这表明student元素中必须包含sno,sname,sex,sdepartment,hobby这四个子元素,而且他们在具体是XML文档中的出现顺序不能颠倒。

上面出现了“*”这一符号,它表示hobby元素可以没有,也可以有多个,我们知道,有点人兴趣爱好很多,而有点人没有兴趣爱好,下面是在内容模型的描述中常用到的符号含义.

 

   符 号

    含   义  

           示     例

 

    ,

   

用于分隔元素序列中的每一项,必须按照说明的顺序出现

如上例所示:sno,sname,......在实例文档中sname必须出现在sno之后

   

    |

表示可以从前后的参数中任选一项

如上例所示:......,(sdepartment|dormitory),......在实例文档中可以在指定位置包含sdepartment子元素或者dormitory子元素

   

   ( ) 

 

表示括号中的内容为一个整体,可以看为一个元素组

如上例所示:(sno,sname,sex,(sdepartment|dormitory),hobby*)student元素的子元素组

  

    ?    

 

表示相应的元素或组,出现一次或者不出现

......,element?,......表示该内容模板所描述的元素,可以在指定的位置包含一个element元素或者没有element元素

    

    +    

 

表示相应的元素或组,出现一次或者多次

......,element+,......表示该内容模板所描述的元素,可以在指定位置包含一个或者连续多个element元素

  

    *  

 

表示相应的元素或组,出现零次或者多次

如上例所示:......,hobby*表示在实例文档中可以没有hobby,也可以有多个hobby

 

2.包含文本内容的元素

 声明语法格式:

 <!ELEMENT  elementname (#PCDATA)>

 实例:

<?xml version="1.0" encoding="gb2312"?>

 

<!DOCTYPE student[

<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*)>

<!ELEMENT sno (#PCDATA)>

<!ELEMENT sname (#PCDATA)>

......

]>

这表明snosname元素中只包含文本内容,不能包含子元素。PCDATA表示将被XML解析器进行解析的字符数据(Parsed Character DATA),其中不能包含任何XML标记。

 

3.空元素

 声明语法格式:

 <!ELEMENT  element  EMPTY>

 实例:

 <?xml version="1.0" encoding="gb2312"?>

 

<!DOCTYPE student[

<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*)>

......

<!ELEMENT sex EMPTY>

......

]>

这项表示sex元素的内容为空,不包含子元素或者文本

 

4.包含任意文本的元素

  声明语法格式:

  <!ELEMENT  elementname  ANY>

  实例:

  <?xml version="1.0" encoding="gb2312"?>

 

<!DOCTYPE student[

<!ELEMENT student(sno,sname,sex,(sdepartment|dormitory),hobby*,mark)>

......

<!ELEMENT  mark  ANY>

......

]>

这项声明表示mark元素中可以包含任何没有具体限制且可以进行解析的内容。

 

5.包含指定元素以及文本内容的元素

 声明一个包含文本内容以及指定子元素的元素,声明语法格式:

 <!ELEMENT  elementname  (#PCDATA child1 | child2)>

 实例:

 <!ELEMENT  course  (#PCDATA cno | grade)*>

 这项声明表示course元素中可以包含文本内容、cnograde的任意组合(任意个数、任意顺序)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值