xml-DTD约束

1 篇文章 0 订阅

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 书架 SYSTEM "books.dtd">
<书架>
	<书>
		<书名>设计模式<书名/>
		<作者>freeman<作者/>
		<售价>98.00<售价/>
	</书>
	<书>
		<书名>编程之美<书名/>
		<作者>微软亚洲研究院<作者/>
		<售价>40.00<售价/>
	</书>
     
</书架>

<!DOCTYPE 书架 SYSTEM "books.dtd">

xml文件使用DOCTYPE声明语句来指明它做遵循的DTD文件,DOCTYPE声明方式有两种:

1.当引用的DTD文件在本地时,采用如下:

<!DOCTYPE 文档根节点 SYSTEM "DTD文件的URL">

2,当引用的DTD文件时一个公共文件时:

<!DOCTYPE 文档根节点 PUBIC "DTD名称" "DTD文件URL">

<!ELEMENT 书架(书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA>
<!ELEMENT 售价(#PCDATA>
#PCDATA
是parse character data 的意思

书+ 是书架包含0-n个子标签(书)

下面会仔细解释语法细节

MyEclipse可以校验xml文档是否符合编写的dtd约束
一般开发中不会用到dtd的编写,开发框架要用到

DTD约束可以作为一个文件单独编写,也可以在xml文件中编写

DTD约束语法细节

1.元素定义
在DTD文档中使用ELEMENT声明一个xml元素,语法格式如下:
<!ELEMENT 元素名称 元素类型>
元素类型可以是元素内容或类型
--如果为元素内容,则需要使用()括起来
<!ELEMENT 书架(书+)>
<!ELEMENT 书(书名,作者,售价)>
--如果为元素类型,则直接书写。DTD规范定义了如下几种类型
EMPTY:用于定义空元素,例如<hr/> 、<br/>
ANY:表示用于定义任意类型
元素内容可以用以下方式来描述内容的组成关系
1.用逗号分隔,表示内容的出现顺序必须与声明时一致
2.用|分隔,表示只能选其一
3.+表示一次或多次,?表示0次或一次,*表示0次或多次
2.属性定义
xml文档中的标签属性需要通过ATTLIST为其设置属性,语法格式如下:
<!ATTLIST 元素名
        属性名1 属性值类型 设置说明
        属性名2 属性值类型 设置说明
        ......
>
属性值类型:
1.CDATA 表示属性值为普通文本字符串
2.ENUMERATED 枚举
3.ID
4.ENTITY
设置说明:
#REQUIRED--必须设置该属性
#IMPLIED--可以设置也可以不设置
#FIXED--固定值,xml文档中不可以设置
默认值--xml可以设置也可以不设置
例如:
<!ATTLIST 页面作者
	姓名 CDATA #IMPLIED
	年龄 CDATA #IMPLIED
	联系信息 CDATA #REQUIRED
	网站职务 CDATA @FIXED "页面作者"
	个人爱好 CDATA "上网"
>
对应xml
<页面作者 联系信息="1111111">
姓名、年龄可写可不写
联系信息必须写
网站职务不可修改
个人爱好不修改则是默认“上网”
所以上面的标签其实有三个属性






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值