今天我给大家介绍一种xml的约束技术,dtd,这个技术在现在的程序中的框架中多见,但是在开发中通常使用schema,为了读懂框架,我们必备的知识之一。废话就不多说了,直接入门
一、一个关于产品的dtd
product.dtd
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT products (product+)> <!ELEMENT product (name,price,number,description)> <!ELEMENT name (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT number (#PCDATA)> <!ELEMENT description (#PCDATA)>
这是一个引用了product.dtd的xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE products SYSTEM "product.dtd"> <products> <product> <name>冰箱</name> <price>3000</price> <number>20</number> <description>冷藏食品</description> </product> <product> <name>手机</name> <price>1999</price> <number>50</number> <description>可以通讯</description> </product> </products>
经过上面的入门,应该能掌握一点点规律了,在dtd中,有三种引用方式
分别是:
1.内部引用 示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
</书架>
2.外部引用
当引用的文件在本地时(外部DTD),采用如下方式:
<!DOCTYPE 文档根结点 SYSTEM "dtd文件的路径">
例如: <!DOCTYPE products SYSTEM “c:\product.dtd”>。* DTD文件路径 本地的。
3.公共dtd的引用
当引用的文件是一个公共的文件时(公共DTD)采用如下方式:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
例如:<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
二、dtd中的元素定义

细心可以发现,这个+号,我们常用,用+类比,其他的元素的用法
三、属性:
属性声明举例

<!ATTLIST 商品
类别 CDATA #REQUIRED 必须的
颜色 CDATA #IMPLIED 可选的
>
示例:<?xml version="1.0" encoding="UTF-8"?>
<!-- 内部DTD --> <!DOCTYPE products [ <!ELEMENT products (product+)> <!ELEMENT product (name,price,number,description)> <!ELEMENT name (#PCDATA) > <!ELEMENT price (#PCDATA) > <!ELEMENT number EMPTY > <!ELEMENT description (#PCDATA) > <!ATTLIST product id ID #REQUIRED> ]> <products> <product id="p001"> <name>冰箱</name> <price>3000</price> <number></number> <description>冷藏食品</description> </product> <product id="p002"> <name>手机</name> <price>1999</price> <number /> <description>可以通讯</description> </product> </products>
数据类型:

<!ATTLIST 商品
类别 CDATA #REQUIRED 必须的
颜色 CDATA #IMPLIED 可选的
>
四、实体(ENTITY)定义
实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
<?xml version="1.0" encoding="UTF-8"?> <!-- 教师的company 都一样,将重复部分抽取出来 定义实体 --> <!DOCTYPE teachers [ <!ELEMENT teachers (teacher+)> <!ELEMENT teacher (name,company)> <!ELEMENT name (#PCDATA) > <!ELEMENT company (#PCDATA)> <!ENTITY cmy "传智播客2012" > ]> <teachers> <teacher> <name>老王</name> <company>&cmy;</company> </teacher> <teacher> <name>老李</name> <company>&cmy;</company> </teacher> <teacher> <name>老赵</name> <company>&cmy;</company> </teacher> </teachers>
五、约束的四种形式
