DTD约束和DTD校验

 一、DTD(document type  define)文档类型定义

一个基本的dtd文档范例:


<!ELEMENT  bookshelf (book+)>
<!ELEMENT  book (name,sale,author)>
<!ELEMENT  name (#PCDATA)>
<!ELEMENT  sale (#PCDATA)>
<!ELEMENT  author (#PCDATA)>


如果存在中文则必须保存为UTF-8或者Unicode编码
在编写xml文档时为了遵守上面的dtd文件规则,应该按下面编写,


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE bookshelf SYSTEM "book.dtd>
<bookshelf >
 <book>
  <name>One Day</name>
  <sale>23.9元</sale>
  <author>somebody</author>
 </book>
 <book>
  <name>World</name>
  <sale>10元</sale>
  <author>someone</author>
 </book>
</bookshelf>


目前浏览器一般进行dtd校验,即使xml文件不按照dtd规则编写也能够访问,想对xml文件进行dtd校验可在eclipse中完成,将dtd文件和xml文件cpoy到任何一个包下即可,例如将上面的两个文件拷贝到eclipse中则可以通过校验,如果将xml文件改动一下,例如改成

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE bookshelf SYSTEM "book.dtd>
<bookshelf >
 <book>
  <name>One Day</name>
  <sale>23.9元</sale>
  <author>somebody</author>
 </book>
 <book>
  <name>World</name>
  <sale>10元</sale>
  <author>someone</author>
 </book>


 <a>内容</a>
</bookshelf>
则会提示不匹配的错误信息,因为在dtd文件中规定了booshelf的子标签只有书,因此标签a与dtd文件中规定不符合,校验不通过

DTD文档即可写在xml文件内部,又可以作为单独文件编写
当xml文件引用的DTD文件在本地时可采用下面的引用方式
<!DOCTYOE 根节点 SYSTEM “文档名”>
当引用的文件时一个公共的文件时,则采用下面的方式
<!DOCTYPE web-app PUBLIC "-//sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">


二、DTD的语法细节
<!ELEMENT 元素名称 元素内容或类型>

1、元素内容或类型
    |--元素内容
        |--<!ELEMENT  book (name,sale,author)>用“,”进行分隔,那么表示xml文档中的元素出现顺序应该与其一致
        |--<!ELEMENT  book (name|sale|author)>用“|”进行分隔,表示name,sale,author三个元素只能出现一个
        |--<!ELEMENT  bookshelf (book+)>中book+的加号代表book标签出现的次数包括三类符号
          |-- + 代表标签可以出现一次或多次
          |-- ? 代表标签出现0次或1次
          |-- × 代表标签出现0次或多次
    |--元素类型
         |--EMPTY 即内容为空,注意如果开始标签之间存在空格或换行仍不能通过校验,因为空格和换行也会被当做内容处理
        |--ANY即内容可以为任意类型

2、xml文档中的元素属性也需要在dtd文件中进行声明

语法格式
<!ATTLIST 元素名
 属性名1  属性值类型  设置说明
 属性名2  属性值类型  设置说明
 .......
>

举例:
属性值
    |--<!ATTLIST apple
 color  CDATA  #REQUIRED
 shape  CDATA  "圆形"
 sale   CDATA  #FIXED "10"
 address CDATA #IMPLIED
 >
 color属性是必须写的
 shape是默认值
 sale是固定值
 address 是可缺省的值
 在xml文档中<apple color="green">虽然只声了一个属性,但是apple这个元素存在三个属性,相当于<apple color="green" shape ="圆形" sale ="10>

属性值类型
      |--CDATA 普通文本字符串
      |--ENUMERATED  枚举类型的值  例如<!ATTLIST 水果 名称  (苹果|香蕉|西瓜)  苹果>
      |--ID    表面该属性的值为一个唯一值 ,并且id的值一般以字母开头  <!ATTLIST 联系人列表  编号  id  #REQUIRED>
      |--ENTITY实体
  |--引用实体:<!ENTITY  实体名称 “内容”>  例如<!ENTITY represent "DTD文件实体">在xml文件中&represent就可以代表 "DTD文件实体"这段内容
  |--参数实体:DTD文件自己用<ENTITY % 实体名称 “实体内容”>,并通过%实体名称引用


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值