[http://www.membrane-soa.org/soa-model-doc/1.4/java-api/compare-schema-java-api.html]
我试过,但只有我可以从我的模式得到的是这个 targetNamespace从(schema1的名称空间)更改为(schema2的名称空间) 我正在使用与下载部分中的包完全相同的代码和完全相同的库。我会很感激任何建议。
我的目标是获得他们的承诺:D
元素createResponse已更改: ComplexType已更改: 顺序已更改: 元素NewElementForTest已添加。
ComplexType GetAllType已更改: 注释已删除。 等......等等。
谢谢James:)
答案 0 :(得分:0)
首先,你提到的工具是我第一次看到它,所以我想说的就是一点点盐;在快速查看可用于比较的选项之后,我冒昧地猜测你有几个选择。我需要首先解释一些事情,考虑一下我之前看过XSD和XML的比较工作。
对于许多任务,XSD简化为XML或纯文本。您对XSD的期望似乎与比较两个简单XML时的情况非常相似,即使命名空间不同:
命名空间是你的问题。通常,将XSD与不同目标命名空间进行比较的工具不应假设具有相同名称的全局内容;这是因为目标命名空间也可用于避免冲突和细化同音异义(家具表与计算/数据库中的表)。在您的情况下,似乎它被用作版本控制机制,因为您希望继续比较具有相同本地名称的实体,即使完整限定名称(由架构的targetNamespace限定)也不同。
对于您正在使用的API,似乎没有可以提供命名空间映射的选项(出于比较目的,将不同的值视为相同)。我想说,看看报告是如何构建的,只是因为更改命名空间肯定会打破一切......
尝试手动循环遍历模式定义的对象列表(例如elements,complex types等),手动匹配它们的本地名称(源/目标集),以及然后逐个调用你所能做到的(例如elements)。对于复杂类型,您可能需要手动遍历其内容模型。
另一种策略(如果XSD不那么复杂,则更容易)可能是将修订复制到临时位置,将targetNamespace替换为旧值,然后使用工具支持的内容运行。
比较XSD虽然是一个非常复杂和有趣的主题,但仅仅因为什么是“重要”变化(破坏与否)是你如何使用XSD的问题。换句话说,以某种方式更改XSD对基于XSLT(XSD感知或不基于)的代码没有影响,而对于使用JAXB生成的类的人来说将是一场灾难,而同时.NET消费者不会必须改变一行代码...
上面显示了其他条件,例如“传递”影响,其中更改基类型(取决于修改)会破坏从XSD生成的代码...而所描述的XML绝对是相同的。