目录
发展历史
XML和HTML对比之可扩展
XML和HTML对比之语法细节
XML验证之DTD
XML名称空间
XML语法结构
XML验证之Schema
DOM4J读写配置文件
关于SLT
XML验证之Schema
就像前面的文章所说的,通过DTD我们可以很容易的判断要验证的XML是否符合我们所定义的规范(元素之间的关系,属性的取值是否正确)但是如果要验证元素的内容DTD就无能为力了,于是人们研究了新的验证方法——Schema。
除了上面的优势之外Schema相对于DTD而言更令人兴奋的是其自身就是一个良好形式的XML文档,这样一来编写Schema就非常容易了。相对于自己有一套独立的语法的DTD而言,无论是编写还是维护起来都是非常困难的。
一个Schema文件就是一个XML文件所以所编写一个XML对应的Schema的过程就是对照着XML写XML,这样的话编写Schema是非常容易的。下面演示如何对照XML编写其对应的Schema
原XML文件(test2.xml)
George Bush John Adams Oxford Street London UKEmpire Burlesque Special Edition 1 10.90Hide your heart 1 9.90
登录后复制
对于上面的这个XML下面我们开始创建一个Schema。遵从的原则就是原来的XML怎么写那么其对应的Schema就怎么描述,就像你在和一个人面对面的描述一样。
Schema代码如下(shiporder.xsd)
登录后复制
代码解析:
第一行是所有XML的声明无需赘述。
第二行为此XML(Schema本身就是一个XML)定义了一个命名空间。
从第四行开始才是对原XML的一些要求:
首先定义了根元素为shiporder(行4),其次因为shiporder元素有一个属性,其中包含其他的元素所以其为复合类型(行5)。然后通过sequence元素按照顺序包围其子元素(行10—行15),描述元素的名称以及元素的类型(行11—-行14),如果需要描述元素的限制条件(行22)。描述根元素的属性,由于是必选属性所以选择required关键字,需要注意的是这个属性必须放在最后(行29)
通过Schema验证XML的代码和前面文章中的DTD验证大同小异,代码如下:
package ValidateXml; import java.io.File;import java.io.IOException; import javax.xml.XMLConstants;import javax.xml.transform.stream.StreamSource;import javax.xml.validation.Schema;import javax.xml.validation.SchemaFactory;import javax.xml.validation.Validator; import org.xml.sax.ErrorHandler;import org.xml.sax.SAXException; importcom.sun.org.apache.xml.internal.utils.DefaultErrorHandler; public class XmlValidator{ private String xsdFilePath; public XmlValidator(String xsdFilePath) { this.xsdFilePath =xsdFilePath; } public String validata(String xmlFilePath,ErrorHandler errorHandler) { String msg = null; SchemaFactoryfactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); try { Schema schema = factory.newSchema(new File(xsdFilePath)); Validator validator = schema.newValidator(); validator.setErrorHandler(errorHandler); validator.validate(new StreamSource(new File(xmlFilePath))); } catch (SAXExceptione) { msg = e.getMessage(); e.printStackTrace(); } catch (IOExceptione) { msg = e.getMessage(); e.printStackTrace(); } return msg; } public static void main(String[] args) { String xmlFilePath ="d://test2.xml"; String xsdFilePath ="d://shiporder.xsd"; XmlValidator my =new XmlValidator(xsdFilePath); String msg =my.validata(xmlFilePath, new DefaultErrorHandler()); System.out.println(msg == null); }}
登录后复制
如果原XML文件符合Schema文件中的描述则返回true;否则抛出异常进行描述哪里不符合,并且返回false。(具体的操作可在实际工程中自行定制,这里只是进行简单的描述)
以上就是XML简明教程(7) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2491818.html