XML简明教程(7)

目录

发展历史

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  UK    Empire Burlesque  Special Edition  1  10.90    Hide 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)

 以上就是XML简明教程(7) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2491818.html

(0)
上一篇 2025年3月5日 00:46:58
下一篇 2025年2月23日 11:26:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • XML简明教程(1)

    目录 发展历史 XML和HTML对比之可扩展 XML和HTML对比之语法细节 XML验证之DTD XML语法结构 XML命名空间 DOM4J读写配置文件 关于SLT 发展历史 学习知识首先要知道这个知识是如何产生的,是为了解决什么问题产生的…

    2025年3月3日
    200
  • XML简明教程(2)

    目录 发展历史 XML和HTML对比之可扩展 XML和HTML对比之语法细节 XML验证之DTD XML语法结构 XML命名空间 DOM4J读写配置文件 关于SLT 和HTML对比之可扩展 相信对于XML而言更多的人比较熟悉HTML,随便打…

    2025年3月3日
    200
  • XML简明教程(3)

    目录 发展历史 XML和HTML对比之可扩展 XML和HTML对比之语法细节 XML验证之DTD XML语法结构 XML命名空间 DOM4J读写配置文件 关于SLT 和XML对比之语法细节 除了上一篇文章中所说的可扩展之外,XML文档还常常…

    2025年3月3日
    200
  • XML简明教程(4)

    目录 发展历史 XML和HTML对比之可扩展 XML和HTML对比之语法细节 XML验证之DTD XML语法结构 XML命名空间 DOM4J读写配置文件 关于SLT XML验证之DTD 如前面教程中所说的那样,XML的最大作用在于存储、传输…

    2025年3月3日
    200
  • XML简明教程(5)

    目录 发展历史 XML和HTML对比之可扩展 XML和HTML对比之语法细节 XML验证之DTD XML名称空间 XML语法结构 DOM4J读写配置文件 关于SLT XML名称空间 一个XML文档中可以包含许多元素与属性,当我们使用他人的X…

    编程技术 2025年3月3日
    200
  • XML简明教程(6)

    目录 发展历史 XML和HTML对比之可扩展 XML和HTML对比之语法细节 XML验证之DTD XML名称空间 XML语法结构 DOM4J读写配置文件 关于SLT XML语法结构 nbsp;SYSTEM “test.dtd”>   …

    编程技术 2025年3月3日
    200

发表回复

登录后才能评论