1、DTD:Document Type Definition 文档类型定义
XML文件:
格式良好的XML:只要符合语法规范,就是格式良好的
合法的: 经过验证并且验证通过的就是合法的
2、先将DTD验证规则和XML文件关联起来
<!DOCTYPE 根元素 SYSTEM “dtd文件”>
现在已经关联起来,但是还没有验证
3、什么时候验证呢?
Php文件加载xml文件的时候验证
alidateOnParse
4,定义DTD的规则:
(1)DTD与XML文档联系起来
(2)加载XML文档时,使用DTD验证XML文档
(3)DTD中应该规定:
(1)有哪些元素
(2)元素的位置
(3)元素有哪些属性
DTD规则
(1)定义元素
<!ELEMENT 元素名 元素的特征>
()表示子元素列表,后面规定子元素的数量 * + ?
如果没有子元素,需要声明这个元素保存的是一个值
(#PCDATA)
(2)定义属性
<!ATTLIST 元素名 属性名 属性类型 属性的特征值>
CDATA 属性是一个普通值
ID 属性是唯一的标识
#REQUIRED 代表当前的属性是必须的
#IMPLIED 代表当前的属性是可选的
5、DTD中定义实体符号
1,引用实体
在XML文档中使用的实体符号
<!ENTITY 实体名称 “实体的值”>
2,参数实体
在DTD文档中使用的实体符号
<!ENTITY % 实体名称 “实体的值”>
例:
1、store.dtd
<!ELEMENT bookshelf (book+)>
<!ATTLIST book id ID #REQUIRED>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT book (title,author)>
<!ATTLIST book name CDATA #IMPLIED>
<!ENTITY copy SYSTEM"copyright@hbsi.com">
2、store.php
<?php
//现有DOMDocument对象
$doc = newDOMDocument('1.0','utf-8');
//加载进来之前验证
$doc->validateOnParse = true; //表示加载的时候验证
$doc->load('store.xml');
3、store.xml
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE bookshelf SYSTEM"store.dtd">
<bookshelf>
<book id="book1">
<title>笑傲江湖</title>
<author>金庸</author>
</book>
<book id="book2"name="book">
<title>天龙八部</title>
<author>金庸</author>
</book>
<book id="book3">
<title>侠客行</title>
<author>古龙</author>
<copy>©</copy>
</book>
</bookshelf>
例2:xml的DTD规则
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book)*><!--在bookstore中只能包含一个book,*出现任意个book--><!ELEMENT book (bookname , author , (publisher | published_b))><!--第一个是publisher第二个是published_b-->
<!ELEMENT bookname (#PCDATA)><!--#PCDATA解析文本-->
<!ELEMENT author (#PCDATA | au_name)*><!--author中可以包含au_name-->
<!ELEMENT au_name (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT published_b (#PCDATA)>
<!ATTLIST author zhicheng (初级 | 中级 | 高级) "中级"><!--attlist属性author中的职称有初中高,默认是中级-->
<!ATTLIST author id ID #IMPLIED><!--#IMPLIED代表属性不必是唯一的,id值不能重--><!ATTLIST publisher p_name CDATA #FIXED "电子工业出版社"><!--#FIXED属性值是固定的-->
<!ENTITY me "高锣鼓"><!--实体定义-->
]>
<bookstore>
<book>
<bookname>细说php</bookname>
<author id="a1" zhicheng="高级">&me;<au_name>兄弟连</au_name></author>
<publisher p_name="电子工业出版社"/>
</book>
<book>
<bookname>mysql</bookname>
<author id="a2" zhicheng="高级">张三</author>
<published_b/>
</book>
</bookstore>