当前位置: 首页 > 知识库问答 >
问题:

如何针对多个XSD文件验证XML?

松雅健
2023-03-14

我需要针对给定的XSD文件验证多个XML文件。问题是XSD由两个文件组成。它们是嵌套的,尽管我知道哪个是第一个(其他文件的“父”)。在XML文件中,我使用命名空间来定义子节点在哪个XSD中定义

是否有一个工具能够针对多个XSD文件测试生成的XML文件?


共有2个答案

鲜于峰
2023-03-14

我想指出还有另一种方法可以实现这一点。然而,我应该首先声明,我相信记事本的模式验证工具是。。。buggy,所以我提供的这个方法不能与Notepad的XMLTools插件一起使用。通常,您应该能够在XML文件的根元素中声明多个名称空间及其对应的架构文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ROOT xmlns="https://www.A.org"
xmlns:r="https://www.B.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.A.org A.xsd https://www.B.org B.xsd" >

简而言之,上述示例与O'Reilly的XML第454页提供的示例类似。

在这种情况下,当您在记事本中运行验证时,您不必选择目标XSD文件进行验证,因为记事本会检测到您的模式位置声明并使用该声明运行验证。但是,记事本似乎只会检查模式位置属性中最后声明的模式文件。因此,在我的示例中,记事本只会针对B. xsd验证您的XML文件,并且不可避免地会抛出错误。解决方案是Petru提到的:通过“导入”声明将A. xsd导入B. xsd。

如果您使用的是更健壮的XML工具,则可能不会遇到此问题。例如,OxygenXML可以很好地处理这个问题,只要您让它自己检测XSD文件,而不是强制它针对特定的XSD进行验证。

林修雅
2023-03-14

你应该觉得自己很幸运,因为你没有被严重否决。。。如果仅仅因为做事情的工具(建议)超出了这里的范围。。。

尽管如此,如果这是关于如何使用您已经在使用的工具来实现您所需要的。。。我看到了很多关于这方面的报道,所以。。。然后,有一种方法可以在任何人有能力提供单个XSD文件的限制时工作。。。就是创建这样一个XSD文件,它下面将导入您需要引用的所有其他XSD文件。

这是一个适用于您的情况的存根XSD示例:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:import namespace="(a)" schemaLocation="(b)"/>
</xsd:schema>

哪里:

(a)是您在希望引用的xsd:模式的Target etNamespace属性中看到的值;如果没有Target etNamespace,则删除命名空间属性(并将包含一些虚拟值的Target etNamespace添加到存根XSD)

(b) 包含要引用的XSD的文件的位置。从这里使用完整路径开始;当您进一步了解XSD或您的工具时,您可能会得出这样的结论:如果您的工具支持,那么最好提供相对URI,即在“存根”XSD(它实际上是一个“聚合器”)的位置和其他引用的XSD之间。相对URI在移动你的东西(作为一个整体,压缩你的所有文件并发送给其他人)方面更友好。示例。。。如果文件位于同一文件夹中,只需在此处输入文件名即可。

为无法通过所有其他xsd“访问”的每个xsd添加一个xsd:import行,或者您的工具似乎抱怨无法访问的xsd。

 类似资料:
  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):

  • 我是XSD新手,不知道为什么我的XSD没有进行验证。我收到以下错误: s4s-elt-无效-内容.1:“参数信息”的内容无效。元素“复杂类型”无效、放错位置或出现过于频繁。 cvc复合型。2.4。d: 发现以元素“exception”开头的无效内容。此时不需要任何子元素。 XML: XSD: 我错过了什么吗?我想通过使用复杂类型并引用它们来分解它,从而使其更容易...

  • 我有一个servlet,它使用打包在.jar存档中的实用程序: 此实用工具获取xml文件流,针对xsd模式执行验证并解析它: xsd文件以: xml文件: Servlet Init方法抛出异常: 如何指定SAXParser在哪里需要xsd模式来验证xml文件? 附注。对不起,我的英语不好 UPD: 我正在尝试添加此属性: UPD2:在xml文件中使用“classpath:appcontext.xs

  • 问题内容: 我正在尝试针对许多不同的模式(对人为的示例表示歉意)来验证XML文件: xsd 格式 格式 c.xsd特别是导入b.xsd和b.xsd导入a.xsd,使用: 我正在尝试通过Xerces以以下方式执行此操作: 但这无法正确导入所有三个架构,导致无法将名称“ blah”解析为一个(n)“ group”组件。 我已经使用 Python 成功地验证了这一点,但是 Java 6.0 和 Xerc

  • 问题内容: 我有一个像下面这样的标准代码,可以针对xsd验证xml,但是它会在第一个错误时引发异常并停止。如何验证xml,但继续出现第一个和下一个错误,并在最后获得所有错误?可能吗? 问题答案: 在和之间添加此片段: 这样,您将获得完整的异常列表之后,但是如果发生一个致命错误,则分析将停止… 编辑:JavaDoc说: _应用程序必须假定解析器调用此方法后该文档不可用,并且仅应出于收集其他错误消息的

  • 问题内容: 但是,这将返回一条错误消息:线程“ main”中的异常java.lang.IllegalArgumentException:无法加载实现由http://www.w3.org/2001/XMLSchema -instance 指定的模式语言的SchemaFactory。 这是我的代码还是实际的xsd文件有问题? 问题答案: 该错误意味着您安装的Java没有任何可解析XMLSchema文件