XML格式验证——DTD

来源:互联网 发布:mac系统清理软件 编辑:程序博客网 时间:2024/05/29 05:14

        我们要写出格式良好的XML文档,就需要对XML文档进行格式验证。目前验证XML文档的格式验证有两种方式:DTD和Schema。

       DTD(Document Type Definition) 是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。DTD 是一种保证XML文档格式正确的有效方法,可通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能成为数据交换标准,因为不同的公司只需定义好标准DTD,各公司都能依DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。DTD文件是一个ASCII文本文件,后缀名为.dtd。

       这里我们通过一个实例,对DTD的使用方法进行了解。

<?xml version="1.0" encoding="UTF-8"?><!--DTD中的元素(ELEMENT):?表示0次或1次,*表示0次或多次,+表示一次或多次,默认为1次|:表示枚举的元素至少出现一种DTD中元素的属性(ATTLIST):属性类型:CDATA 值为字符数据 (character data)(en1|en2|..) 此值是枚举列表中的一个值ID 值为唯一的 idIDREF 值为另外一个元素的 idIDREFS 值为其他 id 的列表NMTOKEN 值为合法的 XML 名称NMTOKENS 值为合法的 XML 名称的列表ENTITY 值是一个实体ENTITIES 值是一个实体列表NOTATION 此值是符号的名称xml: 值是一个预定义的 XML 值属性参数:#REQUIRED 属性值是必需的#IMPLIED 属性不是必需的#FIXED value 属性值是固定的--><!DOCTYPE students [<!ELEMENT students (student+)><!ELEMENT student (name, sex?, (age|birthday)?,course+)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ELEMENT birthday (#PCDATA)><!ELEMENT sex (#PCDATA)><!ELEMENT hobby (#PCDATA)><!ELEMENT course (#PCDATA)><!ATTLIST student id ID #REQUIRED><!ATTLIST student sex CDATA #IMPLIED><!ATTLIST student valid CDATA #FIXED "1"><!ATTLIST course cid (YW|SX|YY|WL|HX) "YW">]><students><student id="s1" valid="1"><name>张三</name><sex>男</sex><course cid="HX">化学</course></student><student id="s2" sex="男"><name>李四</name><birthday>1993-02-29</birthday><course cid="YY">英语</course></student><student id="s3"><name>小红</name><sex>女</sex><age>19</age><course cid="YW">语文</course></student></students>


       通常情况下,我们需要将XML内容和验证分开。

       1.新建stu.dtd,将XML文档验证的代码移入该文件:

<?xml version="1.0" encoding="UTF-8"?><!--DTD中的元素(ELEMENT):?表示0次或1次,*表示0次或多次,+表示一次或多次,默认为1次|:表示枚举的元素至少出现一种DTD中元素的属性(ATTLIST):属性类型:CDATA 值为字符数据 (character data)(en1|en2|..) 此值是枚举列表中的一个值ID 值为唯一的 idIDREF 值为另外一个元素的 idIDREFS 值为其他 id 的列表NMTOKEN 值为合法的 XML 名称NMTOKENS 值为合法的 XML 名称的列表ENTITY 值是一个实体ENTITIES 值是一个实体列表NOTATION 此值是符号的名称xml: 值是一个预定义的 XML 值属性参数:#REQUIRED 属性值是必需的#IMPLIED 属性不是必需的#FIXED value 属性值是固定的--><!ELEMENT students (student+)><!ELEMENT student (name, sex?, (age|birthday)?,course+)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ELEMENT birthday (#PCDATA)><!ELEMENT sex (#PCDATA)><!ELEMENT hobby (#PCDATA)><!ELEMENT course (#PCDATA)><!ATTLIST student id ID #REQUIRED><!ATTLIST student sex CDATA #IMPLIED><!ATTLIST student valid CDATA #FIXED "1"><!ATTLIST course cid (YW|SX|YY|WL|HX) "YW">

       2.在同一个目录下新建stu.xml,将XML文档内容代码移入该文件,并引入DTD验证文件:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE students SYSTEM "stu.dtd"><students><student id="s1" valid="1"><name>张三</name><sex>男</sex><course cid="HX">化学</course></student><student id="s2" sex="男"><name>李四</name><birthday>1993-02-29</birthday><course cid="YY">英语</course></student><student id="s3"><name>小红</name><sex>女</sex><age>19</age><course cid="YW">语文</course></student></students>


至此,我们的实例就编写完成!
原创粉丝点击