当前位置: 首页 > 面试题库 >

如何使用RELAX NG模式和JAXP验证XML文档?

尉迟冯浩
2023-03-14
问题内容

我想使用RELAX NG模式来验证XML文档,并且我想使用JAXP验证API。

从谷歌搜索开始,看来我可以使用Jing和ISO
RELAX JARV到JAXP Bridge了
。不幸的是,将它们都添加到我的类路径后,我无法使其正常工作。试图实例化工厂时,它SchemaFactory只是抛出一个IllegalArgumentException—我在内部查看SchemaFactory,显然SchemaFactoryFinder返回的是空结果。

因此,我希望能回答以下两个问题:

  • 我该如何与Jing和这座桥一起工作?
  • 我应该尝试一组更好/不同的库吗?

我需要它才能与Java 5和Java 6一起使用。

谢谢!


问题答案:

请参阅Stefan Bodewig在2008年3月7日撰写的标题为XMLUnit中的RELAX NG
Validation
的Weblog

从昨晚开始,XMLUnit的主干包含一个基于Javax.xml.validation的新Validator类,该类是JAXP 1.3(即Java5
+)的一部分。

据我所知,没有开箱即用的JAXP实现支持RELAX NG。Sun自己的JAXP 1.4(Java6
+)肯定没有。经过一番搜索,我来到了川口浩辅的博客,鉴于他在JAXP,Sun的Multi Schema
Validator,isorelax等方面的工作,他应该知道。

使用他的isorelax-bridge和Jing并没有使我在Java6上获得任何帮助。我回到了河口晃介的文章并阅读了以下注释:由于Java6更改了SchemaFactory查找算法,因此该桥不适用于Java6。好了,改用Java5-进展,我现在在Jing内部的某个地方得到了NullPointerException,因此至少它正在加载工厂。接下来,我用MSV替换了Jing(现在在这里,无论有多少链接将您带到Sun的WebServices堆栈页面,对于“良好的URL永远不变”来说,太多了​​),实际上,我的简化测试通过了。

因此,您可能需要跳过一些步骤才能在JAXP设置中获得RELAX NG支持-
在我的情况下,Java5,MSV和Kawaguchi的网桥也能正常工作,但注释表明它也应与Java6兼容-
但一旦您成功配置了所有功能正确地说,现在可以使用XMLUnit来声明您在单元测试中文档的有效性。不过,似乎它不适用于紧凑语法。

要阅读川口浩辅博客上的评论,您必须使用archive.org,因为它们现在已经消失了:

Java 5将服务提供者文件解释为键/值对的列表,这违反了Java 5和6 JAR文件规范,但恰好与您的示例匹配。

Java
6按照指定的方式解析服务提供者文件,即。作为标准类名的列表,但是由于服务提供程序文件的内容无效,因此无法实例化适配器的SchemaFactory。

为了与Java 5和Java 6兼容而不必更改JAXP-JARV-adapter
JAR文件,可以简单地添加另一个包含正确的javax.xml.validation.SchemaFactory服务提供者文件的JAR文件



 类似资料:
  • 问题内容: 我有工作,并为我解编和编组XML转换为Java对象,反之亦然。现在,我试图根据我们的模式(test.xsd)来验证我们的XML。假设我的XML中缺少任何必填字段,那么我想根据模式test.xsd验证XML后知道哪个字段缺失。 如何根据test.xsd模式验证XML。我的test.xsd模式路径是- C:\ workspace \一\二\三\ src \ main \ java \ co

  • 使用JDK6将XML文件加载到DOM中。必须根据XSD验证XML文件。XSD文件位置因运行环境而异。无论目录结构如何,都需要一个目录解析器,以确保可以根据XSD验证XML。一旦XML被验证,就可以对其进行转换。 我的理解是,DocumentBuilderFactory可以用来配置这样的验证。这是通过使用带有XMLCatalogResolver的DocumentBuilder查找与XML文件关联的X

  • 我正在用JDK7在IDEA 13.02中试用XML SCHEMA 1.1 这是我从教程中获得的XML模式代码。当我在IntelliJ IDEA中打开这个文件并单击“验证”时,我得到以下错误: CVC-complex-type2.4.a:发现以元素“open content”开头的内容无效。“”http://www.w3.org/2001/XMLSchema“:注释、”http://www.w3.o

  • 问题内容: 我在另一个文件中有一个XML文件和一个XML模式,我想验证我的XML文件是否遵循该模式。如何在Python中执行此操作? 我希望使用标准库,但是如果需要,我可以安装第三方程序包。 问题答案: 我假设您的意思是使用XSD文件。令人惊讶的是,没有太多支持此功能的python XML库。但是,lxml确实可以。使用lxml检查验证。该页面还列出了如何使用lxml与其他架构类型进行验证。

  • 我正在使用Jena框架来操作RDF文件,但我找不到一种方法来用您各自的RDF模式验证RDF。我正在尝试这个方法: 但它总是返回true。

  • 问题内容: 我正在使用来验证XML文件。我已经完成了一个仅使用导入的架构,并且一切正常。现在,我尝试使用另一种使用导入和包含的模式进行验证。我的问题是主模式中的元素被忽略,验证表明无法找到它们的声明。 这是我构建模式的方法: 现在这是main.xsd中声明的摘录 如果我将包含的XSD的代码复制到main.xsd中,则可以正常工作。如果我不这样做,验证将找不到“元素”的声明。 问题答案: 您需要使用