Xml的dtd约束
xml的约束
*为什么需要约束?
** 比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中
写了一个标签<猫>,发现可以正常显示,因为符合语法规范。但是猫肯定不是人的信息,
xml的标签是自定义的,需要技术来规定xml中只能出现的元素,这个时候需要约束。
* xml的约束的技术 : dtd约束 和 schema约束
W3C教程
dtd的快速入门
*创建一个文件 后缀名 .dtd
步骤:
(1)看xml中有多少个元素 ,有几个元素,在dtd文件中写几个 <!ELEMENT>
(2)判断元素是简单元素还是复杂元素
- 复杂元素:有子元素的元素
<!ELEMENT 元素名称 (子元素)>
- 简单元素:没有子元素
<!ELEMENT 元素名称 (#PCDATA)>
(3)需要在xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM “dtd文件的路径”>
** 打开xml文件使用浏览器打开的,浏览器只负责校验xml的语法,不负责校验约束
** 如果想要校验xml的约束,需要使用工具(myeclipse工具)
** 打开myeclipse开发工具
** 创建一个项目 day05
* 在day05的src目录下面创建一个xml文件和一个dtd文件
**\*当xml中引入dtd文件之后,比如只能出现name age,多写了一个a,会提示出错**
dtd的三种引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM “dtd路径”>
(2)使用内部的dtd文件
- <!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
(3)使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
- 后面学到框架 struts2 使用配置文件 使用 外部的dtd文件
- <!DOCTYPE struts PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd“>;
使用dtd定义元素
*语法: <!ELEMENT 元素名 约束>
*简单元素:没有子元素的元素
<!ELEMENT name (#PCDATA)>
**(#PCDATA): 约束name是字符串类型
**EMPTY : 元素为空(没有内容)
-
**ANY:任意
* 复杂元素:
<!ELEMENT person (name,age,sex,school)>
- 子元素只能出现一次
* <!ELEMENT 元素名称 (子元素)>
*表示子元素出现的次数
+ : 表示一次或者多次
? :表示零次或者一次
* :表示零次或者多次
* 子元素直接使用逗号进行隔开 ,
** 表示元素出现的顺序
*子元素直接使用|隔开
** 表示元素只能出现其中的任意一个
使用dtd定义属性
*语法:
<!ATTLIST 元素名称
属性名称 属性类型 属性的约束
>
*重点内容属性类型
- CDATA: 字符串
- <!ATTLIST birthday
ID1 CDATA #REQUIRED
- 枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个
** 红绿灯效果
** (aa|bb|cc)
- <!ATTLIST age
ID2 (AA|BB|CC) #REQUIRED- ID: 值只能是字母或者下划线开头
- <!ATTLIST name
ID3 ID #REQUIRED
*属性的约束
- #REQUIRED:属性必须存在
- #IMPLIED:属性可有可无
- #FIXED: 表示一个固定值 #FIXED “AAA”
- 属性的值必须是设置的这个固定值
- <!ATTLIST sex
ID4 CDATA #FIXED “ABC”
>
-直接值
* 不写属性,使用直接值
* 写了属性,使用设置那个值
- <!ATTLIST school
ID5 CDATA “WWW” //WWW直接值
>
实体的定义
*语法:
<!ENTITY 实体名称 “实体的值”>
* <!ENTITY TEST “HAHAHEHE”>
*\ 使用实体 &实体名称;**
比如 &TEST;
** 注意
* 定义实体需要写在内部dtd里面,
如果写在外部的dtd里面,有某些浏览器下,内容得不到
还没有评论,来说两句吧...