您的位置:首页 > 数据库 > Oracle

根据 XML 模式验证 XML 文档

2007-05-18 16:03 513 查看
 


XML 




 




根据 XML 模式验证 XML 文档


作者 Deepak Vohra 




学习的三种方法包括:SAX 分析器、DOM 分析器和 XSD 校验器 




越来越多地采用 XML 文档作为数据交换的格式。如果 XML 文档不是为了被不同的开发人员/用户所接受的话,则 XML 文档应该符合标准的结构。 




XML 模式是 XML 文档结构基于 XML 的表示。通过其对数据类型和命名空间的支持,XML 模式具有为 XML 元素和属性提供标准结构的潜力。 




但是,要检查某个 XML 文档是否符合某种 XML 模式,则必须根据该 XML 模式验证该文档。本教程解释了执行该验证的过程,过程中使用了那些用于 XML 的简单 API (SAX) 和文档对象模型 (DOM) 的分析器以及 XML 模式设计 (XSD) 校验器。表 1 比较了这些组件各自的不同用途。在每种情况下,我们使用 Oracle XML 开发人员工具包 (XDK) 10g Beta 来执行验证。 






SAXParser DOMParser XSDValidator 


用于在需要进行分析时验证 XML 文档 用于在 XML 文档需要进行分析并生成 XML 文档的 DOM 结构时进行验证 用于在不需要进行分析时验证 XML 文档 






准备安装 




要利用 Oracle XDK 验证 XML 文档,则在 Java CLASSPATH 中需要有分析器类。首先,将 xdk_nt_10_1_0_1_0A_beta.zip 文件解压缩到安装目录中。将 <Oracle_XDK>/lib/xmlparserv2.jar, <Oracle_XDK>/lib/xml.jar , 和 <Oracle_XDK>/lib/xschema.jar 添加到 Java CLASSPATH,其中 <Oracle_XDK> 是安装 Oracle XDK 的目录。 




要验证的文档 




在验证 XML 文档前,必须指定 XML 模式的位置。 




XML 模式的位置可以利用带有命名空间的 XML 模式的 xsi:schemaLocation 属性以及不带命名空间的 XML 模式的 xsi:noNamespaceSchemaLocation 属性来指定,它们位于根/顶级元素中或 XML 文档的任何其他元素中。在此情形中,将使用 XML 文档示例 XmlDocumentUrl,它包含一个 Oracle Magazine 目录。 




如果模式位置设置在 XML 文档中,则 <catalog> 元素定义为 




 




<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


    xsi:noNamespaceSchemaLocation="file://c:/Schemas/OracleCatalog.xsd"  ...>


 <
4000
br />



示例 XML 文档在列表 1中列出。 




验证 XML 模式 




我在前面曾解释过,XML 模式(在我们的示例中是 SchemaUrl)定义 XML 文档的结构。XML 模式中的元素声明可以指定 XML 文档中元素的命名空间。命名空间利用标注 xmlns:prefix= 来定义。prefix 是命名空间的前缀;默认的命名空间利用 xmlns= 来指定。我们的示例模式文档 OracleCatalog.xsd 中的 xs:schema 元素利用命名空间的声明而指定为 




 




<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">


 




OracleCatalog.xsd XML 模式文档中的元素(参见列表 2)位于 http://www.w3.org/2001/XMLSchema 的 XML 模式命名空间中。 




利用 SAXParser 验证 XML 文档 




接下来,我们需要进行验证。首先,导入 SAXParser 类: 




 




import oracle.xml.parser.v2.SAXParser;


 




创建 SAXParser: 




 




SAXParser saxParser=new SAXParser();  


 




设置报告合法性错误的验证模式: 




 




saxParser.setValidationMode(XMLParser.SCHEMA_VALIDATION);


 




现在设置用于验证的 XML 模式: 




 




saxParser.setXMLSchema(SchemaUrl);


 




利用 SAXParser 分析器创建并注册 ErrorHandler。ErrorHandler 类是 Validator 类。 




 




Validator handler=new Validator();


saxParser.setErrorHandler(handler);


 




分析要利用 XML 模式进行验证的 XML 文档。 




 




saxParser.parse(XmlDocumentUrl);


 




任何由分析器产生的错误都利用 ErrorHandler 进行注册,并可以从 ErrorHandler 检索这些错误。 




示例程序 XDKValidator.java 用于利用 OracleCatalog.xsd 和 SAXParser API 来验证 OracleCatalog.xml,如列表 3 所示。 




利用 DOMParser 进行验证 




现在,让我们利用 DOMParser 来验证我们的 XML 文档。首先,导入 DOMParser 类: 




 




import oracle.xml.parser.v2.DOMParser;


 




创建 DOMParser: 




 




DOMParser domParser=new DOMParser();  


 




设置报告合法性错误的验证模式: 




 




domParser.setValidationMode(XMLParser.SCHEMA_VALIDATION);


 




设置用于验证的 XML 模式: 




 




domParser.setXMLSchema(SchemaUrl);


 




利用 DOMParser 分析器创建并注册 ErrorHandler。ErrorHandler 类是 Validator 类: 




 




Validator handler=new Validator(); 


DOMParser.setErrorHandler(handler);


 




分析要利用 XML 模式进行验证的 XML 文档: 




 




domParser.parse(XmlDocumentUrl);


 




任何由分析器产生的错误都利用 ErrorHandler 进行注册,并可以从 ErrorHandler 检索这些错误。此处使用的示例程序 DOMValidator.java 在列表 4 中列出。 




利用 XSDValidator 进行验证 




导入 XSDValidator 类: 




 




import oracle.xml.schemavalidator.XSDValidator;


 




创建 XSDValidator: 




 




XSDValidator xsdValidator=new XSDValidator();


 




指定用于验证 XML 文档的 XML 模式: 




 




XSDBuilder builder = new XSDBuilder();


 URL url =  new URL(schemaUrl);       


 XMLSchema schemadoc = (XMLSchema)builder.build(url);


xsdValidator.setSchema(schemadoc);


 




利用 XSDValidator 校验器创建并注册 ErrorHandler。ErrorHandler 类是 Validator 类: 




 




Validator handler=new Validator();


XMLError xmlError=new XMLError();


xmlError.setErrorHandler(handler);    


xsdValidator.setError(xmlError);


 




分析您要利用 XML 模式进行验证的 XML 文档: 




 




xsdValidator.validate(new URL(XMLDocumentUrl));


 




如前文所述,任何由分析器生成的错误利用 ErrorHandler 进行注册,并可以从该处检索这些错误。 




此处使用的示例程序 SchemaValidator.java 在列表 5 中列出。 




验证完成 




 




您刚刚学习了根据 XML 模式验证 XML 文档的三种不同方法。其中一种应该能够满足您的需要。 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息