引用本地DTD约束
<!DOCTYPE 文档根节点 SYSTEM "dtd文件">
如:
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
</书>
<书>
</书>
</书架>
引用公共的文件时
<!DOCTYPE 文档根节点 PUBLIC "DTD名称" “DTD文件的URL”>
如:
<!DOCTYPE web-app PUBLIC "....." “http://java.sun.com/dtd/web-app_2_3.dtd”>
DTD元素定义:
<!ELEMENT 元素名称 (子元素名称+)> 声明最少出现一次的元素
<!ELEMENT 元素名称 (子元素名称*)> 声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称?)> 声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> 带有子元素(序列)的元素
<!ELEMENT 元素名称 EMPTY> 空元素
<!ELEMENT 元素名称 ANY> 带有任何内容的元素
<!ELEMENT 元素名称 (#PCDATA)> 只有 PCDATA 的元素
<!ELEMENT note (to,from,header,(message|body))> 必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素
<!ELEMENT note (#PCDATA|to|from|header|message)*> 可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"
<?xml version="1.0" encoding="UTF-8"?> <!-- 书架 有多本书 --> <!ELEMENT 书架 (书+)> <!-- 书 可以要有书名,作者,售价--> <!ELEMENT 书 (书名,作者,售价)> <!-- 书名的内容为字符串--> <!ELEMENT 书名 (#PCDATA) > <!ELEMENT 作者 (#PCDATA) > <!ELEMENT 售价 (#PCDATA) >
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书> <书名>红楼梦</书名> <作者>堂婶</作者> <售价>34.0</售价> </书> <书> <书名>三国演绎</书名> <作者>老夫子</作者> </书> </书架>
属性定义:
<!ATTLIST 元素名称 属性名称 属性类型 属性值> 声明属性
其中属性类型
CDATA/(en1,en2,..)/ID/ENTITY实体
属性值:
默认值/#REQUIRED必须的/#IMPLIED不是必须的/#FIXED value固定值
<?xml version="1.0" encoding="UTF-8"?> <!-- 书架 有多本书 --> <!ELEMENT 书架 (书+)> <!-- 书 可以要有书名,作者,售价--> <!ELEMENT 书 (书名,作者,售价)> <!-- 书的id属性 是唯一的ID,其中id不能用纯数字--> <!ATTLIST 书 id ID #IMPLIED> <!-- 书名的内容为字符串--> <!ELEMENT 书名 (#PCDATA)> <!-- 用于定义空元素 --> <!ELEMENT 作者 (#PCDATA)> <!-- 作者的phone属性是必须的--> <!ATTLIST 作者 phone CDATA #REQUIRED> <!-- 作者的age属性默认值是0 --> <!ATTLIST 作者 age CDATA "0"> <!-- 作者的email的属性不是必须的 --> <!ATTLIST 作者 email CDATA #IMPLIED> <!-- 作者的地址只能是北京上海深圳 默认是北京--> <!ATTLIST 作者 address (北京|上海|深圳) "北京"> <!-- 表示内容元素可以是任何类型--> <!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书 id="a1"> <书名>红楼梦</书名> <作者 age="23" phone="123" address="上海">堂婶</作者> <售价>34.0</售价> </书> <书 id="a2"> <书名>三国演绎</书名> <作者 email="lfz@qq.com" phone="345">老夫子</作者> <售价>445</售价> </书> </书架>
实体定义:
<!ENTITY 实体名称 "实体的值">
<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义一个引用实体--> <!ENTITY copyright "Copyright W3Schools."> <!-- 书架 有多本书 --> <!ELEMENT 书架 (书+)> <!-- 书 可以要有书名,作者,售价--> <!ELEMENT 书 (书名,作者,售价)> <!-- 书的id属性 是唯一的ID,其中id不能用纯数字--> <!ATTLIST 书 id ID #IMPLIED> <!-- 书名的内容为字符串--> <!ELEMENT 书名 (#PCDATA)> <!-- 用于定义空元素 --> <!ELEMENT 作者 (#PCDATA)> <!-- 作者的phone属性是必须的--> <!ATTLIST 作者 phone CDATA #REQUIRED> <!-- 作者的age属性默认值是0 --> <!ATTLIST 作者 age CDATA "0"> <!-- 作者的email的属性不是必须的 --> <!ATTLIST 作者 email CDATA #IMPLIED> <!-- 作者的地址只能是北京上海深圳 默认是北京--> <!ATTLIST 作者 address (北京|上海|深圳) "北京"> <!-- 表示内容元素可以是任何类型--> <!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书 id="a1"> <书名>红楼梦</书名> <作者 age="23" phone="123" address="上海">堂婶</作者> <售价>34.0</售价> </书> <书 id="a2"> <书名>三国演绎</书名> <作者 email="lfz@qq.com" phone="345">老夫子</作者> <售价>445</售价> </书> <书 id="a3"> <书名>©right;</书名> <作者 phone="678">中央台</作者> <售价>23</售价> </书> </书架>
参数实体
<!ENTITY % 实体名称 "实体的值"> 参数实体名称用于属性定义时使用
<?xml version="1.0" encoding="UTF-8"?> <!-- 定义一个参数实体 --> <!ENTITY % common.attrutes "remark CDATA #REQUIRED"> <!-- 书架 有多本书 --> <!ELEMENT 书架 (书+)> <!-- 书 可以要有书名,作者,售价--> <!ELEMENT 书 (书名,作者,售价)> <!-- 书的id属性 是唯一的ID,其中id不能用纯数字--> <!ATTLIST 书 id ID #IMPLIED> <!-- 书使用参数实体--> <!ATTLIST 书 %common.attrutes;> <!-- 书名的内容为字符串--> <!ELEMENT 书名 (#PCDATA)> <!-- 用于定义空元素 --> <!ELEMENT 作者 (#PCDATA)> <!-- 作者的phone属性是必须的--> <!ATTLIST 作者 phone CDATA #REQUIRED> <!-- 作者的age属性默认值是0 --> <!ATTLIST 作者 age CDATA "0"> <!-- 作者的email的属性不是必须的 --> <!ATTLIST 作者 email CDATA #IMPLIED> <!-- 作者的地址只能是北京上海深圳 默认是北京--> <!ATTLIST 作者 address (北京|上海|深圳) "北京"> <!-- 表示内容元素可以是任何类型--> <!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书 id="a1" remark="色情书"> <书名>红楼梦</书名> <作者 age="23" phone="123" address="上海">堂婶</作者> <售价>34.0</售价> </书> <书 remark="历史书"> <书名>三国演绎</书名> <作者 email="lfz@qq.com" phone="345">老夫子</作者> <售价>445</售价> </书> <书 id="a3" remark="政治书"> <书名></书名> <作者 phone="678">中央台</作者> <售价>23</售价> </书> </书架>