UML软件工程组织 |
整合Java与XML的新应用(2) |
作者:谷和启 本文选自:开放系统世界——赛迪网 2002年11月20日 |
如果一个XML文档符合上述文档所表现出来的一些特征,即可称之为良构的XML文档。这些特征如下: 1. 每个元素必须有起始和结束标记; 2. 文档只有一个根元素; 3. 正确地对空元素进行格式化; 4. 开始和结束标注必须匹配(区分大小写); 5. 元素必须正确地嵌套; 6. 属性值必须用引号括起来。 IsXMLAvailable.java 是用于进行XML文档良构检验的Java程序,代码如下: //IsXMLAvailable.java 运行“java IsXMLAvailable People.xml”命令,如程序出错,则显示第几行有错,并给出可能的错误提示;如程序正确,则显示 “XML 文件结构正确!” 建立一个有效的XML 文档(DTD)及验证的实例 良好的XML 文档只说明了其语法正确,并没有解决语义问题。XML 描述了有一定含义的数据,其中可以指定包含数据的规则。通过这种指定的规则,可以验证已声明符合规则的XML 文档的有效性,即DTD——文档类型定义。 DTD 可以确保应用程序接收到一个有效的XML 文档,然后可以针对某一类XML 设计出应用程序接口。这样符合某种DTD 的XML 文档都可以被应用程序解析,也可以用DTD 制定自己的文档规则,而这个规则可被其它应用程序利用。DTD 有两种方法声明XML文件: (1) 外部 DTD 声明如下: <!DOCTYPE peopleinfo SYSTEM "People.dtd"> (2) 内部 DTD 声明(PeopleDTD.xml)如下: <? xml version="1.0" encoding="GB2312"?> 从上面的文件可以看到内嵌的DTD 在<! DOCTYPE> 标记中。首先声明的是XML 文档的根元素<PeopleInfo>,然后指明在<PeopleInfo>根元素中必须包含有一个或是多个的<People>元素(用People+ 表示)。下一句定义了在<People>元素中必须包含<PeopleName>、<PeopleSex>和<PeopleAge>3个元素。这3个元素的内容类型为#PCDATA,表示内容为文本类型。然后是对属性的定义,表示PeopleInfo 必须含有PeopleId 属性。#REQUIRED(必须含有)默认的可以省略,CDATA 表示属性值是字符串型。 要检验一个XML 文件是否有效需要在解析XML 文件时检验其是否有效。首先在创建DocumentBuilder 对象之前,利用语句设置有效性检验,语句如下: dbf.setValidating(true);//设置对XML 文件进行有效验证 因为SAX 在解析XML 文件时,遇到不符合DTD规定的地方要触发相应的事件,所以还要在程序中定义实现了事件接口的类。在这里用的是常用的处理事件的静态内部类,在此类中必须实现的方法语句如下: public void warning(SAXParseException spe) throws SAXExcepton 不同级别的错误事件将分别触发这3个方法中的一个。 在IsXMLAvailableDTD.java 中,提供了对XML 文档进行有效性检验的源程序。从中可以看到SAX事件驱动的解析XML程序的编写方式http:。
|
版权所有:UML软件工程组织 |