【发布时间】:2012-12-26 12:02:50
【问题描述】:
如何验证一个 XSD 架构是另一个 XSD 架构的子集?
我们正在使用一组“蓝图”XSD 模式(定义子组件可用的所有可能输入或输出)来创建系统系统应用程序。正在实现许多子组件,这些子组件使用 XML 文件在它们之间传递数据。每个子组件创建相关蓝图 XSD 模式的子集(以指示它选择实现的可能输入或输出)。针对子集 XSD 架构验证的任何 XML 数据文件也必须针对蓝图 XSD 架构进行验证,但反之则不正确(因为子集 XSD 架构可能不包含来自蓝图 XSD 架构的所有“可选”或“选择”XML 元素,并且它可以选择进一步限制现有 XML 标记上允许的数据值)。系统将根据子组件的子集 XSD 架构验证子组件的所有 XML 输入(以标记任何错误输入并隔离数据相关问题的来源)。
在测试期间,我们打算验证每个子组件的子 XSD 架构确实是关联蓝图 XSD 架构的子集,但我们没有自动执行此验证的方法。这些 XSD 架构相当大且丑陋,需要手动进行此测试。如果有一种“针对 XSD 文件 2 验证 XSD 文件 1”命令会很不错,类似于 Java 如何针对 XSD 模式执行 XML 文件的验证。我们想要确认每个子组件的子集 XSD 架构将不允许任何违反蓝图 XSD 架构的 XML 输入/输出组合。借助这种模式到模式的能力,验证来自子组件 A 的输出 XML 是否适合用作子组件 B 的输入也将非常有帮助(我们可以轻松地针对 XSD 模式验证单个输出 XML,但是我们想确认子组件 A 的所有可能的 XML 输出都将根据子组件 B 的 XSD 模式进行验证)。
有用信息:此应用程序是 Java 6 应用程序的集合,这些应用程序实现为 OSGi 包并使用 Maven 2.2.1 编译/执行。没有使用任何特定开发 IDE 的要求。该系统正在 Microsoft Windows XP 环境中进行测试,但也计划在其他环境中执行该系统(因此首选跨平台解决方案)。
【问题讨论】:
-
如果子集 XSD 会自动生成,那么至少按照设计它们是主集的子集,你还会问这个问题吗?
-
好问题。如果子模式是从蓝图模式生成的,那将解决我的一些问题;但是,我们仍然希望针对子集模式 B 验证子集模式 A(如果可能),以帮助自动化一些互操作性问题(即哪个子组件可以安全地与另一个子组件通信,而不会有无效 XML 文件的风险)。
-
不同的子组件开发团队手工创建了所有模式(由于它们的复杂性和每个子组件的定制需求)。他们还倾向于使用不同的开发工具套件,除非我们的项目要求使用特定工具。
-
不幸的是,我相信没有生产工具可以做到这一点。最近我看到的是一篇关于“模式嵌入”的论文,这就是你正在做的事情。 docs.google.com/viewer?url=http://www.vldb2005.org/program/…作者可能有一个工具或知道一个。
-
@13ren,QTAssistant 实际上做了大部分它在这个问题中描述的事情,以及this related one,自 1997 年以来,在与 TOP 50 相关的生产环境中世界上的FI。我在这里试图弄清楚的问题是,按照我们的标准,“一个破碎的过程”......
标签: validation xsd schema subset