1、DTD
作用:
验证XML
声明方式:
DTD可以声明在XML内部,也可以声明在XML外部
1.声明在内部,通过如下语法包含一个内部校验的DTD
<!DOCTYPE 根节点 [节点的声明]>
2.引入外部DTD
<!DOCTYPE 根节点 SYSTEM "外部DTD地址">
为何使用DTD:
- 通过 DTD,可以为每一个 XML 文件均可携带一个有关其自身格式的描述。
- 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
- 应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
- 可以使用 DTD 来验证自身的数据。
DTD语法
元素:
声明元素
<!ELEMENT 元素名称 类型>或<!ELEMENT 元素名称 (元素内容)>
声明一个空元素
<!ELEMENT br EMPTY>
在XML中使用 <br />
只有PCDATA的元素
<!ELEMENT name (#PCDATA)>
带有任何内容的元素
<!ELEMENT name ANY>
带有子元素(序列的元素)
<!ELEMENT user (name,sex,age)>
当子元素按照由逗号隔开的序列进行声明时,这些子元素必须按照相同顺序出现在文档中,在一个完整的声明中,子元素也必须被声明,同时子元素也可以拥有子元素
声明只出现一次的元素
<!ELEMENT users (user)>
声明可以出现多次 * 0-N + 1-N ? 0-1
<!ELEMENT users (user*)>
声明或者元素 birthday与age任意出现一个
<!ELEMENT user (name,sex,(birthday|age))>
声明混合内容
<!ELEMENT birthday (#PCDATA|year|month|day)*>
属性:
在 DTD 中,属性通过 ATTLIST 声明来进行声明
<!ATTLIST element-name attribute-name attribute-type attribute-value>
<!ATTLIST user des CDATA "用户信息">
CDATA 值为字符数据 (character data)
(en1|en2|…) 此值是枚举列表中的一个值
ID 值为唯一的id
IDREF 值为另一个元素的id
IDREFS 值为其他id的列表
NMTOKEN 值为合法的XML名称
NMTOKENS 值为合法的XML名称列表
ENTITY 值是一个实体
ENTITIES值是一个实体列表
NOTATION 值是符号的名称
xml:值是一个预定义的XML值
属性的默认值有:
#REQUIRED 属性是必须的
#IMPLIED 属性不是必须的
#FIXED value 属性的值是固定的
<!ATTLIST user des CDATA #REQUIRED>
<!ATTLIST user des CDATA #IMPLIED>
<!ATTLIST user des CDATA #FIXED "描述信息">
<!ATTLIST user des (描述|说明) #REQUIRED>
<!ATTLIST user des ID #IMPLIED >ID的值只能是字母或者下划线开始
<!ATTLIST user num IDREF #IMPLIED >
取值为文档中已经存在的一个ID的取值,比如一个文档有教师,有学生,教师有ID,学生可以有一个教师的属性,志向教师的ID
<!ELEMENT Team EMPTY> <!ATTLIST Team num IDREFS #IMPLIED ><Team num=“a0001-02 a0001-01”/>XML中的取值是存在的ID值,多个值之间以空格隔开
<!ATTLIST user nikName NMTOKEN #IMPLIED >字母数字下划线句号冒号破折号 <!ATTLIST user nikName NMTOKENS #IMPLIED ><user des=“a0001-01” nikName=“xxsd as ter”>多个名称以空格隔开
代码示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users[
<!ELEMENT users (user)+>
<!ELEMENT user (id,name,age,sex)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST user type CDATA "null">
]>
<users>
<user type = "user">
<id>1</id>
<name>张三</name>
<age><![CDATA[age > 18]]></age>
<sex>男</sex>
</user>
<user type = "user">
<id>1</id>
<name>张三</name>
<age><![CDATA[age > 18]]></age>
<sex>男</sex>
</user>
<user type = "user">
<id>1</id>
<name>张三</name>
<age><![CDATA[age > 18]]></age>
<sex>男</sex>
</user>
</users>