1.内部DTD
standalone=”yes”说明文档不关联任何外部的文件。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE student[
<!ELEMENT student (id,name)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
]>
<student>
<id>id</id>
<name>name</name>
</student>
2.外部DTD
私有的外部DTD && 公开的外部DTD
out_dtd.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT alisure (alisure_empty, alisure_any, alisure_text)>
<!ELEMENT alisure_empty EMPTY>
<!ELEMENT alisure_any ANY>
<!ELEMENT alisure_text (#PCDATA)>
<!ATTLIST alisure
id ID #REQUIRED
name CDATA "alisure"
sex (man | woman) "man"
>
<!ENTITY % text " (#PCDATA) ">
<!ELEMENT book (id,name,author) >
<!ELEMENT id %text;>
<!ELEMENT name %text;>
<!ELEMENT author %text;>
xml实例:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE alisure SYSTEM "out_dtd.dtd">
<alisure id="id_111" name="ALISURE" sex="man">
<alisure_empty></alisure_empty>
<alisure_any>
<alisure id="id_123" name="alisure" sex="woman">
<span style="white-space:pre"> </span><alisure_empty></alisure_empty>
<alisure_any></alisure_any>
<alisure_text>text</alisure_text>
</alisure>
<book>
<id>id</id>
<name>name</name>
<author>author</author>
</book>
</alisure_any>
<alisure_text>text</alisure_text>
</alisure>
3.元素内容
(1)空元素:<!ELEMENT alisure_empty EMPTY>
(2)任意内容的元素:<!ELEMENT alisure_any ANY>
(3)只含文本内容的元素:<!ELEMENT alisure_text (#PCDATA)>
(4)只包含子元素的元素:<!ELEMENT alisure (alisure_empty, alisure_any, alisure_text)>
(5)含指定子元素和文本内容的元素:<!ELEMENT alisure (#PCDATA|alisure1|alisure2)*>
4.元素属性
属性列表(属性类型、属性描述另查表,注意什么是有效的XML名称标记)
<!ATTLIST 元素名称 (属性名称 属性类型 属性描述)+ >
<!ATTLIST alisure
id ID #REQUIRED
name CDATA "alisure"
sex (man | woman) "man"
>
5.实体
placeholder:内容的占位符,相当于变量,可以包括单个字符、字符串文本、XML片段
实体分类:参数实体(DTD规则部分)和一般实体(XML文档数据)
(注:现在大部分已经不支持外部一般实体,只能在内部DTD中使用,但外部参数实体可用)
参数实体:
entity_out.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
entity.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % data " (#PCDATA) ">
<!ENTITY % out_entity SYSTEM "entity_out.dtd">
<!ELEMENT alisure (name,age,sex)>
<!ELEMENT name %data;>
%out_entity;
实例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE alisure SYSTEM "entity.dtd">
<alisure>
<name>text</name>
<age>text</age>
<sex>text</sex>
</alisure>
一般实体:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE alisure[
<!ELEMENT alisure (#PCDATA)>
<!ENTITY inf "哈哈 & 呵呵">
<!ENTITY text "alisure &inf; alisure">
]>
<alisure>&text;</alisure>
6.组合使用内外部DTD
(注意:解析器先读取内部的DTD,再读取外部的DTD)
实例:
extral.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE alisure SYSTEM "extral.dtd"[
<!ELEMENT sex (#PCDATA)>
]>
<alisure>
<name>alisure</name>
<age>21</age>
<sex>man</sex>
</alisure>
7.条件DTD
IGNORE 和 INCLUDE
(注意:解析器先读取内部的DTD,再读取外部的DTD)
实例:
extral.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT alisure (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ENTITY % include "INCLUDE">
<![%include;[
<!ELEMENT sex (#PCDATA)>
]]>
extral.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE alisure SYSTEM "extral.dtd"[
<!ELEMENT sex (sex_child)>
<!ELEMENT sex_child (#PCDATA)>
<!ENTITY % include "IGNORE">
]>
<alisure>
<name>alisure</name>
<age>21</age>
<sex>
<sex_child>man</sex_child>
</sex>
</alisure>