栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 人工智能 > NLP

XML简明教程(7)

NLP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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) 的内容,更多相关内容请关注PHP中文网(www.kaotop.com)!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/794844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号