1.XML文件束缚与DTD的简单介绍
<?xml version="1.0" encoding="gb2312"?>
<class>
<stu id="001">
<name>杨过</name>
<sex>男</sex>
<age>20</age>
<面积>100</面积>
</stu>
</class>
<!ELEMENT 元素名 类型>
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>
<?xml version="1.0" encoding="utf⑻"?>
<!DOCTYPE 班级 SYSTEM "myClass.dtd">
<班级>
<学生>
<名字>周小星</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
</学生>
<学生>
<名字>林晓</名字>
<年龄>25</年龄>
<介绍>是1个好学生</介绍>
</学生>
</班级>
<?xml version="1.0" encoding="utf⑻"?>
<!DOCTYPE 班级 SYSTEM "myClass.dtd">
<班级>
<学生>
<名字>周小星</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
<面积>100平米</面积>
</学生>
<学生>
<名字>林晓</名字>
<年龄>25</年龄>
<介绍>是1个好学生</介绍>
</学生>
</班级>
<html>
<head>
<script language="javascript">
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.validateOnParse = "true";
xmldoc.load("myClass.xml");
document.writeln("毛病信息:"+xmldoc.parseError.reason+"<br>");
document.writeln("毛病行号:"+xmldoc.parseError.line);
</script>
</head>
<body>
</body>
</html>
2.DTD细节
<!DOCTYPE 根元素 [定义内容]>
<!DOCTYPE 根元素 SYSTEM "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">
<!ELEMENT NAME CONTENT>
<!ELEMENT 家庭(人+,家电*)>
<家庭>
<人 名字="张晓明" 性别="男" 年龄="25"/>
<人 名字="李小钢" 性别="男" 年龄="36" 爱好="作个教育家和巨人"/>
<家电 名称="彩电" 数量="3"/>
</家庭>
符号 |
用处 |
示例 |
示例说明 |
() |
用来给元素分组 |
(古龙|金庸),(王朔|余杰) |
分成两组 |
| |
在列出的对象当选择1个 |
(男人|女人) |
表示男人或女人必须出现,二者最少选其1 |
+ |
该对象必须出现1次或屡次 |
(成员+) |
表示成员必须出现,而却可以出现多个成员 |
* |
该对象允许出现0次或屡次 |
(爱好*) |
爱好可以出现两次到屡次 |
? |
该对象必须出现0次或1次 |
(菜鸟?) |
菜鸟可以出现,也能够不出现,如果出现的话,最多只能出现1次 |
, |
对象必须按指定的顺序出现 |
(西瓜,苹果,香蕉) |
表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现 |
<!ATTLIST 元素名称
属性名称 类型 属性特点
属性名称 类型 属性特点......
>
<?xml version="1.0" encoding="utf⑻"?>
<!DOCTYPE 班级 SYSTEM "myClass.dtd">
<班级>
<学生 地址="香港">
<名字>周小星</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
</学生>
<学生 地址="澳门">
<名字>林晓</名字>
<年龄>25</年龄>
<介绍>是1个好学生</介绍>
</学生>
</班级>
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (名字,介绍)>
<!ATTLIST 学生
地址 CDATA #REQUIRED
>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>
2.4.1 对属性类型的详细解释
<!ATTLIST 木偶
姓名 CDATA #REQUIRED
>
<木偶 姓名="匹诺曹"/>
<木偶 姓名="PiNuocao"/>
<木偶 姓名="123"/>
<!ELEMENT 公司职员 ANY>
<!ATTLIST 公司职员
编号 ID #REQUIRED
姓名 CDATA #REQUIRED
>
<公司职员 编号="Z001" 姓名="张3"/>
<公司职员 编号="Z002" 姓名="李思"/>
<!ELEMENT 家庭(人+)>
<!ELEMENT 人 EMPTY>
<!ATTLIST 人
relID ID #REQUIRED
paraentID IDREFS #IMPLIED
name CDATA #REQUIRED
>
<家庭>
<人 relID="P_1" name="爸爸"/>
<人 relID="P_2" name="妈妈"/>
<人 relID="P_3" parentID="P_1 P_2" name="儿子"/>
</家庭>
<!ATTLIST person
婚姻状态 (single|married|divorced|widowed) #IMPLIED
>
<!ATTLIST person
性别 (男|女) #REQUIRED
>
<!ENTITY 实体名称 "实体内容">
<!ENTITY copyright "I am a programmer">
....
©right;
<!ENTITY % 实体名称 "实体内容">
<!ENTITY % TAG_NAME "姓名|EMAIL|电话|地址">
<!ELEMENT 个人信息 (%TAG_NAME;|生日)>
<!ELEMENT 客户信息 (%TAG_NAME;|公司名)>
3.DTD实际案例
<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools,Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">
<!ELEMENT CATALOG (PRODUCT+)>
<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">
<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>
<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte"
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
<?xml version="1.0" encoding="utf⑻"?>
<!DOCTYPE CATALOG SYSTEM "product.dtd">
<CATALOG>
<PRODUCT NAME="康帅傅矿泉水" CATEGORY="Table" PARTNUM="12" PLANT="Chicago">
<SPECIFICATIONS WEIGHT="20" POWER="18">这里是细节</SPECIFICATIONS>
<PRICE>25</PRICE>
<PRICE>28</PRICE>
</PRODUCT>
</CATALOG>