xml DTD验证

来源:互联网 发布:c unity3d 仿真 编辑:程序博客网 时间:2024/05/22 01:35

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;</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>

原创粉丝点击