java验证xml是否规范_Java XML验证API

本文介绍了Java中用于XML验证的API,包括验证方式、抽象工厂、错误处理和模式扩充等内容。通过示例展示了如何使用API进行XHTML和DocBook文档的验证,强调了验证在数据处理中的重要性,并提到了不同架构语言的处理方式。
摘要由CSDN通过智能技术生成

2010年2月10日- 作为读者评论的后续活动,作者对Validation下的最后一段进行了更新,只有模式是线程安全的,而验证程序和模式工厂则不是。

验证是一个强大的工具。 它使您能够快速检查输入内容是否大致符合您的期望,并快速拒绝任何与流程无法处理的文档。 如果数据有问题,最好早发现。

在可扩展标记语言(XML)的上下文中,验证通常涉及使用几种架构语言(例如,万维网联合会(W3C)XML架构语言(XSD),RELAX NG,文档类型)中的文档内容编写详细的规范。定义(DTD)和Schematron。 有时验证是在解析时执行的,有时是在解析之后立即执行的。 但是,通常是在对输入进行任何进一步处理之前完成。 (此描述用粗笔描画-有例外。)

直到最近,程序要求进行验证的确切应用程序编程接口(API)随架构语言和解析器的不同而变化。 通常在XML的简单API(SAX),文档对象模型(DOM)和XML处理的Java™API(JAXP)中将DTD和XSD作为配置选项进行访问。 RELAX NG需要自定义库和API。 Schematron可能会使用XML(TrAX)的Transformations API; 甚至其他模式语言也要求程序员学习更多的API,即使它们执行的基本操作相同。

Java 5引入了javax.xml.validation包,以向验证服务提供独立于模式语言的接口。 当单独安装JAXP 1.3时,此包在Java 1.3和更高版本中也可用。 在其他产品中,该库的实现包含在Xerces 2.8中。

验证方式

javax.xml.validation API使用三个类来验证文档: SchemaFactorySchemaValidator 。 它还广泛使用了TrAX的javax.xml.transform.Source接口来表示XML文档。 简而言之, SchemaFactory会从中读取创建Schema对象的架构文档(通常是XML文件)。 Schema对象创建一个Validator对象。 最后, Validator对象验证表示为Source的XML文档。

清单1显示了一个简单的程序,用于根据DocBook XSD模式验证在命令行上输入的URL。

清单1.验证可扩展超文本标记语言(XHTML)文档
import java.io.*;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import org.xml.sax.SAXException;

public class DocbookXSDCheck {

    public static void main(String[] args) throws SAXException, IOException {

        // 1. Lookup a factory for the W3C XML Schema language
        SchemaFactory factory = 
            SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
        
        // 2. Compile the schema. 
        // Here the schema is loaded from a java.io.File, but you could use 
        // a java.net.URL or a javax.xml.transform.Source instead.
        File schemaLocation = new File("/opt/xml/docbook/xsd/docbook.xsd");
        Schema schema = factory.newSchema(schemaLocation);
    
        // 3. Get a validator from the schema.
        Validator validator = schema.newValidator();
        
        // 4. Parse the document you want to check.
        Source source = new StreamSource(args[0]);
        
        // 5. Check the document
        try {
            validator.validate(source);
            System.out.println(args[0] + " is valid.");
        }
        catch (SAXException ex) {
            System.out.println(args[0] + " is not valid because ");
            System.out.println(ex.getMessage());
        }  
        
    }

}

这是使用Java 2 Software Development Kit(JDK)5.0附带的Xerces版本检查无效文档时的一些典型输出:

file:///Users/elharo/CS905/Course_Notes.xml is not valid because cvc-complex-type.2.3: Element 'legalnotice' cannot have character [children], because the type's content type is element-only.

您可以轻松更改要验证的架构,要验证的文档,甚至架构语言。 但是,在所有情况下,验证都遵循以下五个步骤:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值