如何比较2个xsd模式文件的等效功能
我想比较两个XSD模式A和B,以确定对模式A有效的所有实例文档对模式B也有效。我希望用这一点来证明,即使模式A和B“不同”,它们实际上是相同的。这不会触发的差异示例是模式A使用类型,模式B内联声明其所有元素 我发现很多人都在谈论“智能”diff类型的工具,但他们会说这两个文件是不同的,因为它们有不同的文本,但结果结构是相同的。我找到了一些对XSOM的引用,但我不确定这是否有用如何比较2个xsd模式文件的等效功能,xsd,Xsd,我想比较两个XSD模式A和B,以确定对模式A有效的所有实例文档对模式B也有效。我希望用这一点来证明,即使模式A和B“不同”,它们实际上是相同的。这不会触发的差异示例是模式A使用类型,模式B内联声明其所有元素 我发现很多人都在谈论“智能”diff类型的工具,但他们会说这两个文件是不同的,因为它们有不同的文本,但结果结构是相同的。我找到了一些对XSOM的引用,但我不确定这是否有用 有没有关于如何继续的想法?我的方法是规范化XML模式的表示 不幸的是,我还可以告诉您,与XML文档的规范化(例如,用于计
有没有关于如何继续的想法?我的方法是规范化XML模式的表示 不幸的是,我还可以告诉您,与XML文档的规范化(例如,用于计算数字签名)不同,它没有那么简单,甚至没有那么标准化 因此,基本上,您必须将两个XML模式转换为“规范形式”——无论您构建或使用的工具认为该形式是什么,然后进行比较 我的方法是为我需要的每个根元素创建一个XML模式集(如果您有更多的名称空间,那么可以是多个文件),因为我发现比较使用俄罗斯玩偶风格编写的XSD更容易,从PSVI模型开始 然后,我使用了一些选项,例如自动匹配替换组成员,并使用一个选项替换替换组;删除“多余”的XML模式序列、折叠单个选项选项或移动单个项合成器的minOccurs/maxOccurs等 根据支持XSD的比较工具的功能,或者您决定构建,您可能还必须在诸如XSD:choice或XSD:all等合成器下重新排列粒子;等等 不管怎么说,我学到的是,要构建一个适合所有“酷”XSD特性的工具是非常困难的。。。我深深记得的一个测试用例是处理各种xsd:any内容 我确实想知道,自……以来情况是否发生了变化。
提供了一个在线工具,该工具显示两个XSD之间的差异报告,这两个XSD似乎是由膜SOA模型生成的。Darn我希望有一些我刚刚错过的“简单”方法。我找不到并且一直停留在我脑海中的帖子是关于XSOM的,它是XSD的规范化,然后可以进行比较。您使用了哪些支持XSD的比较工具?XSOM肯定不是XSD的规范化;也许他们指的是XSOM为您编译的PSVI“视图”。但这只能用于某些非常基本的场景。如果需要外部工具为您进行比较,您仍然需要应用自定义转换来生成新的XSD。我还不知道(或者还没有听说)有任何XSOM会将PSVI视图序列化回XSD文件。。。最后我自己编写了一个完整的工具,并最终将其命名为XML模式重构;不过,转换成俄罗斯玩偶的版本在1.0版之后无法继续使用……可供下载的版本无法正常工作。其中一个库的线程“main”java.lang.NoClassDefFoundError:org/codehaus/groovy/runtime/BytecodeInterface8中缺少.class文件:Exception。LE:显然,如果你手动下载groovy 1.8.6并将其添加到构建路径中,它是有效的。嗨..我已经尝试了你的示例,但对我来说不起作用。我正在尝试比较两个模式文件,一个是完全结构化的,另一个是内联的(实际模式是使用导入导入导入的)。你能帮我一下吗?谢谢。这就是我坚持了一段时间的原因。你知道如何过滤这些差异并使只有元素移除的差异可见吗?
package sample.schema;
import java.util.List;
import com.predic8.schema.Schema;
import com.predic8.schema.SchemaParser;
import com.predic8.schema.diff.SchemaDiffGenerator;
import com.predic8.soamodel.Difference;
public class CompareSchema {
public static void main(String[] args) {
compare();
}
private static void compare(){
SchemaParser parser = new SchemaParser();
Schema schema1 = parser.parse("resources/diff/1/common.xsd");
Schema schema2 = parser.parse("resources/diff/2/common.xsd");
SchemaDiffGenerator diffGen = new SchemaDiffGenerator(schema1, schema2);
List<Difference> lst = diffGen.compare();
for (Difference diff : lst) {
dumpDiff(diff, "");
}
}
private static void dumpDiff(Difference diff, String level) {
System.out.println(level + diff.getDescription());
for (Difference localDiff : diff.getDiffs()){
dumpDiff(localDiff, level + " ");
}
}
}
ComplexType PersonType has changed: Sequence has changed:
Element id has changed:
The type of element id has changed from xsd:string to tns:IdentifierType.