XML_DTD

[b]
DTD,约束xml中元素出现的特性:
是否必须,出现次数,书写顺序等
[/b]
[b]DTD的缺点[/b]
[color=blue]不同元素下不能出现同样的节点名称;能够提供的数据类型比较少,比如枚举类型(男,女,未知)不支持;定制不灵活;等等[/color]


编写一个person的dtd:
persons作为根,persons下能够存在多个person
person有属性:id 有且唯一,height必须有,sex有默认值
person有元素:name 默认出现1次,password可有可无,age默认出现1次,addr至少出现1次

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义persons的DTD文件,指定根对象-->
<!DOCTYPE persons[
<!-- 元素与类型之间要有空格,否则格式报错 -->

<!-- 声明persons类型 -->
<!ELEMENT persons (person+)>

<!-- 定义person,并指定其中包含的元素和出现的顺序 -->
<!-- 标签出现次数控制符 ?:0次或者1次; *:0次或者多次;+:1次或者多次;默认为1次-->
<!-- 使用+说明addr至少出现1次 -->
<!ELEMENT person (name,password?,age,addr+)>

<!-- 定义person的属性 -->
<!--使用ATTLIST增加属性-->
<!-- id类型,不允许重复 -->
<!ATTLIST person id ID #REQUIRED>
<!-- 使用#REQUIRED 表示该属性必须要出现 -->
<!ATTLIST person height CDATA #REQUIRED>
<!-- CDATA 值为字符数据character data -->
<!ATTLIST person sex CDATA "男">

<!-- 定义person的元素节点 -->
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
]>

<persons>
<!-- persons中可以出现多个person元素 -->
<!-- id如果为数字,xmlspy会报错,这里使用字母来标识id -->
<person sex="男" height="170CM" id="p1">
<name>zhangsan</name>
<!--password可有可无,因为在声明的时候用?进行了修饰-->
<password>abc</password>
<age>18</age>
<addr>bj</addr>
<addr>sh</addr>
</person>

<person height="187CM" id="p2">
<name>lisi</name>
<age>21</age>
<addr>sz</addr>
<addr>xg</addr>
</person>

</persons>



[b]编写一个dtd[/b]
classroom.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT classroom (cname,grade,students)>
<!ATTLIST classroom id ID #REQUIRED>
<!ELEMENT cname (#PCDATA)>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT students (student+)>
<!ELEMENT student (id,sname,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT sname (#PCDATA)>
<!ELEMENT age (#PCDATA)>


[b]将dtd编入到eclipse的目录中[/b]
[color=blue]window-->preference-->XML-->XML Catolog-->User Specified Entried-->Add
Next Catalog(从当前工程中引入)-->Workspace-->OK![/color]

[b]引入dtd,并编写一个xml[/b]
classroom.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
引入编写的classroom DTD文件对当前的xml进行文档约束
1.使用DOCTYPE说明需要引入dtd文件
2。给被引入的dtd文件取一个名称:classroom
3.指定如何引入外部dtd文件:
PUBLIC 公共的,引用外部互联网的dtd
SYSTEM 内部的,引入内部的dtd
-->
<!DOCTYPE classroom SYSTEM "classroom.dtd">
<!-- 定义一个班级 -->
<classroom id="c1">
<!-- 班级的名称 -->
<cname>one</cname>
<!-- 班级所在年级 -->
<grade>2013</grade>
<!-- 学生集合 -->
<students>
<!-- 学生 -->
<student>
<id>1</id>
<sname>zs</sname>
<age>12</age>
</student>
<!-- 学生 -->
<student>
<id>2</id>
<sname>ls</sname>
<age>12</age>
</student>
</students>
</classroom>



-------------------------------------------------------------
[b]根据xml反向编写DTD文件[/b]
[b]person.xml[/b]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons SYSTEM "C:\Users\lenovo\Desktop\person.dtd">
<persons>
<person id="p1">
<name></name>
<age></age>
<sex></sex>
<messages>
<message>
<title></title>
<content></content>
</message>
</messages>
</person>
<person id="p2">
<name></name>
<age></age>
<sex></sex>
<messages>
<message>
<title></title>
<content></content>
</message>
</messages>
</person>
</persons>


[b]person.dtd[/b]

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT persons (person+)>
<!ELEMENT person (name,age,sex,messages+)>
<!ATTLIST person id ID #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT messages (message+)>
<!ELEMENT message (title,content)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT content (#PCDATA)>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值