XML约束:用来规范一份xml文档的书写要求的,包含哪些元素、属性、以及顺序、次数等。
xml的约束技术有两种:
DTD和Schema,本文主要介绍DTD约束
DTD约束
1.可以写在xml内部写,也可以引用外部的约束文件
在内部写:
<!DOCTYPE note[
<!ELEMENT note(to,from,heading,body)>
<!ELEMENT to(#PCDATA)>
]>
2.xml引用外部的约束文档时,可以引用本地的,可以引用公共的
本地:<!DOCTYPE 根节点 SYSTEM "DTD_URL">
公共:<!DOCTYPE 根节点 PUBLIC "DTD_NAME" "DTD_URL">
3.DTD中元素定义使用element
<!ELEMENT 元素名称 元素内容/元素类型>
- 使用()声明元素的内容
<!ELEMENT 书架 (书+)>
使用ANY、EMPTY生命元素的类型
<!ELEMENT 商店 ANY>
使用
,
|
来组织关系,
代表按顺序出现
如<!ELEMENT FILE (NAME,AUTHOR,DATE) >
声明了FILE的内容必须是先出现一个NAME标签,而后再出现一个AUTHOR标签和DATE标签。|
代表选择关系
如<!ELEMENT HERO (NAME|NICK)>
HERO标签的内容要么是NAME要么是NICK
- 使用
?*+
来说明内容出现的次数
这里的含义和正则中的含义是一样的
?
一次或零次
*
零次或多次
+
一次或多次 - 使用
()
可以来组织关系
如:<!ELEMENT FILE ((TITLE*,AUTHOR,TIME?)+|COMMENT) >
4.元素属性的定义
<!ATTLIST 元素名
属性名 属性类型 属性说明
属性名 属性类型 属性说明>
- 属性说明
#FIXED
#IMPLIED
#REQUIRED
默认值
<!ATTLIST 作者
姓名 CDATA #REQUIRED
联系方式 CDATA #IMPLIED
爱好 CDATA #FIXED "上网">
解释:姓名是必须的属性,联系方式是可选的属性,爱好有默认值上网,且不能改
属性的类型
CDATA ID ENUMERATED 实体
- CDATA就是字符串类型
- ID是说这个属性的值唯一,不能相同
如:
<!DOCTYPE 联系人列表 <!ELEMENT 联系人 (姓名,联系方式)> <!ELEMENT 姓名 #PCDATA> <!ELEMENT 联系方式 #PCDATA> <!ATTLIST 联系人 联系人编号 CDATA ID #REQUIRED> >
- ENUMERATED 的意思是“枚举”
如:
<!ELEMENT 商品 EMPTY> <!ATTLIST 商品 分类 CDATA (吃的|喝的|玩的) 价格 CDATA #REQUIRED >
- 实体包括 引用实体(xml)和参数实体(dtd)
如:
<!ENTITY book "javaweb开发"><!-- 声明了一个引用实体 --> <!-- 在xml中写 &book; 就是使用了实体 --> <!ENTITY % person "姓名,性别,年龄,生日"> <!-- 声明了一个参数实体 --> <!ELEMENT 雇员 (%person,薪水)><!-- (姓名,性别,年龄,生日,薪水) --> <!ELEMENT 客户 (%person,联系方式)> <!-- (姓名,性别,年龄,生日,联系方式) -->