2013-10-22 20 views
1

[http://www.membrane-soa.org/soa-model-doc/1.4/java-api/compare-schema-java-api.html]有沒有人試圖運行XML模式比較器?

我試過,但只有我可以從得到的東西我的模式是這樣的 targetNamespace從(schema1的命名空間)改爲(schema2的命名空間) 而我在下載部分包含的代碼中使用完全相同的代碼和完全相同的庫。我會很感激任何建議。

我的目標是讓他們許諾:d

元createResponse發生了變化: 的ComplexType發生了變化: 順序發生了變化: 元NewElementForTest增加。

ComplexType GetAllType已更改: 刪除了註釋。 ECT ..... ECT ....

感謝詹姆斯:)

回答

0

首先,你指的工具是我第一次看到它,所以採取與鹽的任何一粒我說出來;在快速查看可供您比較的選項之後,我會冒險猜測您在這裏有幾個選項。我需要首先解釋一些事情,考慮我之前看過XSD和XML比較工作。

對於許多任務,XSD簡化爲XML或純文本。您的XSD的預期顯得較爲相似,比較兩個簡單的個XML時看到,儘管命名空間是不同的:

enter image description here

命名空間是你的問題就在這裏。一般而言,將XSD與不同目標命名空間進行比較的工具不應該假定任何關於具有相同名稱的全局內容;這是因爲目標命名空間也可以用來避免衝突和縮小同名(計算/數據庫中的傢俱表與表)。在你的情況下,它似乎被用作版本機制,因爲即使全限定名(由模式的targetNamespace限定)不同,你仍然希望繼續比較具有相同本地名的實體。

對於您正在使用的API,您似乎沒有提供名稱空間映射(用於比較目的,將不同值視爲相同)的選項。我想說,看看報表的結構如何,這只是因爲更改命名空間肯定會打破所有的...

嘗試手動循環架構定義的對象列表(例如elements,complex types,等等),用他們的本地名稱(在源/目標集合中)手動匹配它們,然後一個接一個地調用你可以(例如對於elements)。對於複雜類型,您可能需要手動遍歷其內容模型。

另一種策略(如果XSD並非那麼複雜,則更容易)可能是將修訂拷貝到臨時位置,字符串 - 將targetNamespace替換爲舊值,然後使用您的工具支持的值運行。

儘管比較XSD是一個非常複雜和有趣的主題,但僅僅是因爲什麼是「重要」更改(決定與否)是您如何使用該XSD的問題。換句話說,以某種方式更改XSD對XSLT(基於XSD的或不基於)的代碼沒有任何影響,而對於使用JAXB生成的類的用戶而言,這將是一場災難,而同時.NET用戶不會必須更改一行代碼...

enter image description here

上面顯示的其他條件,諸如「傳遞」衝擊,其中,改變基本類型(取決於改性)將脫離XSD生成代碼...而所描述的XML絕對會是相同的。

+0

我做了一點點瘋狂的方式,我在Java應用程序中改變它,這些命名空間自動地相同,例如第一個xsd NS =「第一」,所以我把這個和第二個XSD的NS改爲「第一」,然後它的工作原理:D。我會在旁邊生成它,並且它工作得很好;)但是,謝謝你的幫助我現在發現它無意中。乾杯Jakub – James