XML引用DTD约束:
1. 内部引用,内部定义DTD:
<!DOCTYPE 根元素 [ 各种元素声明 ]>
2. 引用系统本地DTD:
<!DOCTYPE 根元素 SYSTEM "DTD文件的URL.dtd">
3. 引用公共DTD
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">
例子:
我们在创建XHTML时,就有这种引用公共DTD的方式获取网络DTD,是W3C定义好的。
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
DTD语法:
1. 元素的定义:
<!ELEMENT 元素名称 元素类型>
元素类型是指这个元素,有几个子元素,或者说,这个元素是什么类型(文本等)。
1)包含多个子元素:
<!ELEMENT book (name,price)>
用逗号分隔元素,表示必须按照这个书写顺序来书写XML
<!ELEMENT book (name|price)>
用 | 分隔,表示name和price任选其一,只能使用一个
1-1) 限定符:
+:一次或多次
*:0次或多次
?:0次或一次
<!ELEMENT store (book+)>
2) 无子标签的元素类型:
<!ELEMENT name (#PCDATA)>
EMPTY:用于定义空元素(没有#号,没有括号)
ANY:表示元素内容为任意类型(没有#号,没有括号)
<!ELEMENT name ANY>
3) 组合方式:
<!ELEMENT MYFILE ( ( TITLE*, AUTHOR?, EMAIL )* | COMMENT ) >
MYFILE元素下面,出现( TITLE*, AUTHOR?, EMAIL )0次或多次,或者COMMENT出现一次。
( TITLE*, AUTHOR?, EMAIL ),如果出现的话,必须按照定义的顺序。
2. 属性的定义
格式:
< ! ATTLIST 元素名
属性名1 属性类型 默认值
属性名2 属性类型 默认值
>
属性类型:字符、唯一ID、.........
CDATA 字符数据
ID 唯一的id
默认值:是否必填,是否固定,固定值是多少。
#REQUIRED 属性值是必须的
#IMPLIED 属性值不是必须的
#FIXED value 属性值是固定的
例子一枚:
bookstore.dtd文件:
1 <!ELEMENT books (book+)> 2 <!ELEMENT book (name,price)> 3 <!ATTLIST book 4 id ID #REQUIRED 5 > 6 <!ELEMENT name (#PCDATA) > 7 <!ELEMENT price (#PCDATA) >
bookstore.xml文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE books SYSTEM "bookstore.dtd"> 3 <books> 4 <book id="book_code_1"> 5 <name>JAVA</name> 6 <price>$99</price> 7 </book> 8 </books>