个人日记:DTD


XML文档使用DTD进行限制,DTD必须对所有标签进行限制,但是标签的子标签通过特殊字符可以不进行编写。

案例:
DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。
即可以通过引用地址来使用DTD文件,例如果想告诉10个人约束文档,那么就通过建立一个DTD文件来发给他们,让他们自己引用。

在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:
     <!ELEMENT 元素名称 元素类型> 
元素类型可以是元素内容、或类型

•如为元素内容:则需要使用()括起来,如
<!ELEMENT 书架 (书名,作者,售价)>    括号里面的是属性,即子标签,只包含子元素
<!ELEMENT 书名 (#PCDATA)>                              #PCDATA :代表文本类型,但不能在其中包含任何子元素

•如为元素类型,则直接书写,DTD规范定义了如下几种类型:

•EMPTY:用于定义空元素,例如<br/> <hr/>
•ANY:表示元素内容为任意类型。

元素内容中可以使用如下方式,描述内容的组成关系
•用逗号分隔,表示内容的出现顺序必须与声明时一致。<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>

• 用|分隔,表示任选其一,即多个只能出现一个
    <!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

在元素内容中也可以使用+、*、?等符号表示元素出现的次数:
        +: 一次或多次 (书+)
         ?: 0次或一次 (书?)
         *: 0次或多次  (书*)
                . :对象必须按照指定的顺序出现
                | :在列出的对象选择一个,表示括号中的内容必须出现一个。
             ( ):用来给元素分组                     
                          将这4个标签分为2部分,并且选择其一必须出现。
例    <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>


例如//记得空格也是很重要的分割部分,语法一定要正确
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT socres [
<!ELEMENT socres (student*)>//括号里是子标签,但是由于有多个相同的标签,所以使用*号
<!ELEMENT student(name,course,score)>//由于名为student的子标签有两个,但他们的属性并不一定相同,但是所有的属性都是要写到DTD里的,
                                       例如我在第一个student标签中加一个age子标签,但是第二个并不需要用,那么就可以使用 (name,course,score,age*)或者
                                       (name,course,score,age?)(这里是因为只有两个子标签,并且只使用一个age)   都可以。
<!ELEMENT name (#PCDATA)>            //name子标签里没有其他子元素,只有文本,所以使用(#PCDATA)。如果前面加了age子标签就需要加一个<!ELEMENT age (对应内容)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>

]>


上面代码就是对应下面XML文件的DTD代码,如果单写DTD文件不用带<!ELEMENT socres [>该标签

<?xml version="1.0" encoding="GB2312"?>//开头

-<scores>//根标签只有一个。 想象成一个对象的集合

-<student id="1"> //从这里一直到该标签结束可以理解为一个对象 

<name>王同</name> //对象的内容,相当于输出

<course>java</course>//对象的内容,相当于输出

<score>89</score>//对象的内容,相当于输出

</student>//对象结尾

-<student id="2">

<name>李佳</name>

<course>sql</course>

<score>58</score>

</student>

</scores>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值