2014-01-24 69 views
1

我有一個XML和XSD文件。 XML文件是在tomcat/ubuntu平臺上使用Java生成的。如何基於XSD「自動修復」XML?

它用於系統之間的集成。第二個系統使用XSD來驗證我的XML,它說我的XML不正確。

我想慢慢修復XML文件,但是有時間問題。他們希望我的XML能夠比ASAP更快地正確使用XSD。

是否有任何工具/算法可以把我的XML和XSD。添加不存在的模擬字段。

我想要什麼: 我還沒有正確的XML進入一個方法,並返回XML與XSD正確。

這聽起來像一些測試框架應該能夠做到這一點。

請幫忙。

+0

[使用XML模式修復Java中的XML]可能的重複(http://stackoverflow.com/questions/8968701/using-a-xml-schema-to-fix-an-xml-in-java ) – Stephan

回答

2

你所描述的f(invalid XML, target XSD) = valid XML實際上不可能以通用的方式構建,除了微不足道的XML/XSD之外的任何東西......這可能是(至少)我不知道任何主流工具可以做到的原因這樣的事情......(只是給你我的簡短回答你的問題)。

鑑於XSD中可能描述相同XML的多種方式,並且可能採用多種方法來使得無效XML符合要求(嚴格來說,有些方案無法修復)...找出模式是更實用的,你需要修復你的XML(假設他們有什麼錯誤是一致的),並通過一個自定義的腳本應用這些更正(XSLT可能是一個,但我也見過「diffgram」爲基礎的方法,取決於你有什麼工具和/或技能)。

我在這裏回覆自己的興趣......事實上,測試框架(我們只有一個,僅在Windows上運行)通常能夠從各種數據源收集測試數據,並創建有效的XML從它,根據指定的XSD和某種映射元數據。在「映射元數據」在這裏可以包含由模式我指的是上面所需要的數據...

配置這樣一個框架,雖然可能需要一段時間,具體取決於你的XML/XSD複雜...點,除了微不足道的東西外,測試框架中也沒有太多的「automagic」。

(更新回覆:您的評論嘲弄/框架方面)

你似乎在試圖解決的東西,是應該解決其他的東西(即嘲諷)。如果嘲笑是你需要的,那麼我的嘲笑方法就有點不同了,如果僅僅是因爲我在很多年前遇到了同樣的問題(甚至在發明XQuery或XML數據庫之類的東西之前)。在最簡單的設置中,數據駐留在電子表格中;將專有的XML Builder shapes數據轉換爲層次結構集合,通過遍歷(任意)XSD所描述的內容模型來引入數據;數據可以從Excel中提取,從外部數據源查找,默認等。結果可以是一個或多個XML片段,然後可以使用XSLT或COBOL副本進行轉換,並保存爲文件,或作爲基於TCP/IP的模擬框架(用於Web服務,IMS交易等)

這個模擬方法,我已經描述了...因爲我們意識到可以使用相同的數據/測試用例來測試Web服務,IMS事務,驅動UI自動化測試......或者在企業環境中遇到的任何問題。 「塑造」數據以符合特定規範(XSD,COBOL Copybook,CSV等)是「演示文稿」......因此是關注的分離。想象一下,對我來說,「注入」你似乎缺少的領域並獲得新的XML是多麼容易......

+0

我不同意,要求只是爲了讓XSD通過保持當前結構。任何使XSD傳遞的XML都是正確的。我可以編寫一個應用程序,循環所有組合都返回一個工作,但它的一個大項目,我今天需要它;-) Thx的回覆 – IAdapter

+0

@IAdapter,你太含糊不清,細節同意或不同意..在我的最後。首先,你認爲「當前結構」是有效的......一般工具如何知道這一點?兩個XML可能會在特定領域重疊,但不同的模型可能導致或尾隨相同...一般來說,生成所有可能的組合的機會很大(計算上講)...如果可以共享具體的例子,我們可以有一個更好的交談... :)例如 –

+0

。我有XML Ç和架構預計Ç˚F。所以我的文檔缺少d標籤。將「非常昂貴」並不在此情況下無所謂,因爲我只需要會保留現有數據的單一正確的組合,例如Ç TESTDATA IAdapter

1

這是一個有趣的計算機科學挑戰,但很難制定好。從某種意義上說,這個問題很簡單:如果你有一個文檔D不符合模式S,那麼你可以通過替換已知符合S的任何文檔V來「修復」D.但這沒有用,你真的想要的是一些符合S的文檔D',並且在某種意義上與D相似;理想情況下,在符合S的所有文檔中,您希望使用某種合適的度量標準找到最接近D的文檔。

我不知道在這個問題上的任何理論或實際工作,但這聽起來很有趣。除非你明天想要答案,在這種情況下忘記它。

+0

我認爲,這將是很酷的框架。我使用JAXB代碼geenration來解決我的問題,但通用解決方案對於開源項目來說是一個非常好的主意。 – IAdapter

+0

我甚至想過自己創建這樣的框架。說實話。我們的目標是幫助測試人員進行集成測試,併爲某人提供realData +某些fakeData比只有fakeData或真實數據好得多,但不是XSD有效,所以他無法在他選擇的工具中解析它。 – IAdapter