当前位置: 首页 > 图文教程 > 认证考试 > java认证 > Java开发教程:用Schema验证xml

java认证
软件工程之Java实现策略
讲述java语言中内部类的研究
简单介绍log4j一般的使用步骤
入门:Java语言中常见的十大误解
入门:Java代码编写的一般性指导
编写跨平台Java程序注意事项
java语言的网络功能与编程
java语言的文件操作方法
Java程序性能和速度优化实例
异常问题在Java编程中处理的优劣
处理Java及其相关字符集编码的问题
解读Java语言灵巧指针与垃圾回收
用于Java的SCA客户机和实现模型
开发中对于Java中文问题的几条分析原则
JAVA深入了解:JavaBeans 增加XPath功能
网络方式安装Linux(CentOS)系统的方法
一篇介绍 Java Socket 编程的经典文章
Java程序中用Servlet容器实现程序监听
使用Java进行图像处理 图像编码输出
JAVA认证:SCJP310-055中文考纲

java认证 中的 Java开发教程:用Schema验证xml


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-03-20   浏览: 448 ::
收藏到网摘: n/a

在过去我们用 DTD 来定义 XML 文档的和法性,而现在可以利用 XML Schema (XML Schema Definition,XSD)来替代 DTD。同 DTD 相同,XML Schema 描述了 XML 文档的结构,既然如此,那么我们为什么要选择 XML Schema 而不是 DTD 呢?

1、XML Schema 可针对未来的需求进行扩展,DTD 不易扩展。
2、XML Schema 更完善,功能更强大。
3、XML Schema 基于 XML 编写,一个 XML Schema 也是一个 XML 文件。DTD 不遵循 XML 语法,这表示你不得不多去学习另外一门语言。
4、XML Schema 支持数据类型,内置多种数据类型。DTD 数据类型有限。
5、XML Schema 支持命名空间,DTD 不支持命名空间。
6、XML Schema 在 2001年5月2日成为 W3C 标准。

最近正在将 Grapevine 升级至第2代版本 ,将全 xml 配置转为 Annotation + xml 的方式。如此一来,将大大简化 xml 文件的配置,提高生产效率。我们来看看 Grapevine2 中最基础的 xml 配置是如何利用 XML Schema 进行验证的。

<?xml version="1.0" encoding="UTF-8"?> 
<GRAPEVINE> 
    <GRAPE class=test.TestAbc id=resourceTestAbc /> 
    <GRAPE class=java.lang.String id=stringName value="ok..." /> 
</GRAPEVINE> 

这是一个再简单不过的 xml 文件,仅仅包含了 grapevine 根元素和 grape 子元素。grape 子元素中包含了 id、class、value 三个属性。其中 id 和 class 为必选属性, value 为可选。再来看看 xsd (XML Schema)文件内容。

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<XS:SCHEMA xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <XS:ELEMENT name="grapevine"> 
        <XS:COMPLEXTYPE> 
            <XS:SEQUENCE> 
                <XS:ELEMENT name="grape" minOccurs="0" maxOccurs="unbounded"> 
                    <XS:COMPLEXTYPE> 
                        <XS:ATTRIBUTE name="id" use="required" type="xs:string" /> 
                        <XS:ATTRIBUTE name="class" use="required" type="xs:string" /> 
                        <XS:ATTRIBUTE name="value" type="xs:string" /> 
                    </XS:COMPLEXTYPE> 
                </XS:ELEMENT> 
            </XS:SEQUENCE> 
        </XS:COMPLEXTYPE> 
        <XS:UNIQUE name="idUnique"> 
            <XS:SELECTOR xpath=".//grape" /> 
            <XS:FIELD xpath="@id" /> 
        </XS:UNIQUE> 
    </XS:ELEMENT> 
</XS:SCHEMA>

在上面的 schema 中,我们使用了标准的命名空间 (xs),与此命名空间相关联的 URI 是 Schema 的语言定义(Schema language definition),其标准值是 http://www.w3.org/2001/XMLSchema。

接下来我们定义了 grapevine 元素,该元素包含了 grape 元素,grape 用 xs:element 定义,并由 xs:sequence 包围。maxOccurs=”unbounded” 表示该元素出现次数没有限制。minOccurs=”0″ 表示该元素可以不出现。grape 元素的三个属性由 xs:attribute 定义,其中 type=”xs:string” 表示该属性的数据类型 ( XML Schema 拥有多种内建数据类型,如:xs:string、xs:integer、xs:boolean、xs:date 等)。use=”required” 表示该属性是必选的,若不定义表示该属性为可选的。

我们定义相同 id 的 grape 元素在 grapevine 中是唯一的,所以必须对 grape 的 id 属性进行唯一性验证。xs:unique 用来定义一个唯一性验证,你也可以用多个 xs:unique 对多个元素或属性进行验证。这里我们只针对 id 属性,所以命名为 idUnique 。xs:selector 用来定义其范围,xs:field 定义验证的值。也可以针对元素内容进行验证,如下:

<ID>resourceTestAbc</ID> 
<XS:UNIQUE name="idUnique"> 
<XS:SELECTOR xpath=".//grape" /> 
<XS:FIELD xpath="id" /> 
</XS:UNIQUE> 

resourceTestAbc

利用xsd文件校验xml文件的java代码:

try {  
    SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema")  
        .newSchema(new File("grapevine.xsd")).newValidator()  
            .validate(new StreamSource(xmlPath));  
} catch (Exception ex) {  
// 验证失败  

try {
    SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema")
        .newSchema(new File("grapevine.xsd")).newValidator()
            .validate(new StreamSource(xmlPath));
} catch (Exception ex) {
// 验证失败
}

Popularity: 47%