我有幾個大的DTD文件。我用trang將它們轉換成XSD文件,所以我可以很容易地從JAXB和其他工具中使用它。但是,生成的XSD文件在頂層具有所有聲明的元素。這意味着任何元素都可以是輸入XML的根元素。我只想指定一個特定的元素。使用已定義的根(開始)元素將DTD轉換爲XSD
有了這些多個根元素會導致一些問題,例如xjc
爲所有類生成@XmlRootElement
,所以我需要添加更多附加檢查。
據我瞭解,我需要重寫生成的XSD,移動<xs:element>
s到<xs:complexType>
S,改變element ref
s轉換element type
S和等等,但是這將是太多了猴子的工作,沒有辦法驗證是否全部完成正確。
有沒有更有效的方法來做到這一點?
+1的問題是有道理的,但我們也明確指出DTD到XSD轉換始終只是近似。 –
@JirkaHanika據我所知,生成的XSD很接近DTD。除了可能的DOCTYPE定義(雖然沒有意外)和一些命名空間的東西。另外一些奇怪的DTD構造不能整齊地轉換成XSD。我目前面臨的唯一問題是,DTD沒有定義根元素的概念。 (RelaxNG確實用''來定義它,但是它不被支持,'xjc'因此失敗)。 –
kan
是的,但命名空間的東西是一個biggie。另外很多被命名爲相似的構造意味着完全不同的東西。對第一個答案+1,因爲它不假裝任何XSD語義。 –