Java开发教程:用Schema验证xml

Java高级开发 Java 764浏览 490评论

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

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

1、XMLSchema可针对未来的需求进行扩展,DTD不易扩展。

2、XMLSchema更完善,功能更强大。

3、XMLSchema基于XML编写,一个XMLSchema也是一个XML文件。DTD不遵循XML语法,这表示你不得不多去学习另外一门语言。

4、XMLSchema支持数据类型,内置多种数据类型。DTD数据类型有限。

5、XMLSchema支持命名空间,DTD不支持命名空间。

6、XMLSchema在2001年5月2日成为W3C标准。

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

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

在上面的schema中,我们使用了标准的命名空间(xs),与此命名空间相关联的URI是Schema的语言定义(Schemalangu**edefinition),其标准值是。

接下来我们定义了grapevine元素,该元素包含了grape元素,grape用xs:element定义,并由xs:sequence包围。maxOccurs=”unbounded”表示该元素出现次数没有限制。minOccurs=”0″表示该元素可以不出现。grape元素的三个属性由xs:attribute定义,其中type=”xs:string”表示该属性的数据类型(XMLSchema拥有多种内建数据类型,如: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定义验证的值。也可以针对元素内容进行验证,如下:

SchemaFactory.newInstance("")

.newSchema(newFile("grapevine.xsd")).newValidator()

.validate(newStreamSource(xmlPath));

}catch(Exceptionex){

//验证失败

}

try{

SchemaFactory.newInstance("")

.newSchema(newFile("grapevine.xsd")).newValidator()

.validate(newStreamSource(xmlPath));

}catch(Exceptionex){

//验证失败

}