重新安排XML文檔的一致性的元素說我有一個XML文檔(表示爲文本,W3C DOM,等等),還一個XML Schema。 XML文檔具有由模式定義的所有正確元素,但順序錯誤。使用模式與模式
如何使用該模式以「重新排序」的元素在文檔中符合由架構定義的排序?
我知道這應該是可能的,可能使用XSOM,因爲JAXB XJC代碼生成器使用正確的元素序列化順序爲其生成的類註釋。
不過,我不熟悉XSOM API,它是相當密集的,所以我希望你們很多人有它一定的經驗,並能指出我在正確的方向。像「在這個父元素中允許哪些子元素,以什麼順序?」
讓我舉個例子。
我有一個這樣的XML文檔:
<A>
<Y/>
<X/>
</A>
我有一個XML Schema它說的<A>
的內容必須是<X>
後跟一個<Y>
。現在很明顯,如果我試圖根據模式驗證文檔,它會失敗,因爲<X>
和<Y>
的順序是錯誤的。但是我知道我的文檔事先是「錯誤的」,所以我現在還沒有使用該模式進行驗證。但是,我知道我的文檔具有模式定義的所有正確元素,只是順序錯誤。
我想要做的就是以編程方式檢查架構(可能使用XSOM--這是XML架構的對象模型),並詢問它應該是什麼內容<A>
。 API將公開「你需要一個<X>
後跟一個<Y>
」的信息。
所以我把我的XML文檔(使用DOM API)和重新排列,並相應地,因此,現在的文件將根據模式驗證。
瞭解XSOM是什麼在這裏很重要 - 它是一個java API,代表包含在XML Schema中的信息,而不是包含在我的實例文檔中的信息。
我不想做的就是生成的模式代碼,因爲該模式是在構建時未知。此外,XSLT是沒有用的,因爲元素的正確排序僅由模式中包含的數據字典確定。
希望這已經夠明確了。
什麼是對輸入的約束?你給出一個相當簡單的例子,但顯然可以有更復雜的情況,如選擇(序列(選擇(...)))。另外,是否事先知道輸入文檔可以通過對元素進行重新排序來符合模式?如果這不是保證,那坦率地說,我甚至不知道哪裏開始。 – 2009-09-16 21:54:55
是的,我事先知道正確的元素都在那裏,但順序已經被先前的處理步驟有效地隨機化。你是對的,因爲模式類型定義的潛在複雜性可能令人望而生畏,這就是爲什麼我希望XSOM能夠解譯我並用簡單的術語代表它。 – skaffman 2009-09-16 21:56:40
就我所見,XSOM並沒有真正簡化任何東西 - 它更像是一個XML Schema的強類型DOM。它主要爲您提供便捷的現成解析器和類AST結構,但無助於您的需求。因此,無論您處理XML Schema的方式如何,解決方案都是通用的。 – 2009-09-16 22:04:53