xml DTD验证

本文详细介绍了XML DTD验证的过程,包括如何将DTD规则与XML文件关联、何时进行验证、如何定义DTD规则以及元素、属性的声明。通过两个具体的例子展示了DTD的使用,解释了元素数量、位置和属性的定义,并提供了XML和DTD文件的示例。
摘要由CSDN通过智能技术生成

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值