簡體   English   中英

如何使用Java生成DTD文件

[英]How to generate a DTD file with java

我不是Java的新手,而是XML和DTD文件的新手。 我有一個工具(我寫過),可以將項目另存為XML。 您可以從主項目創建應用程序,但是我必須對照主項目檢查應用程序的有效性。 因此,對於每個主要項目,我都必須創建一個DTD文件以及XML文件。 這樣我就可以再次檢查該DTD文件的應用程序(也包括XML文件)。 我如何用Java生成該dtd文件。

我這樣做的方式是使用JAXB對象和注釋,以及XSD而不是DTD。

  • 創建帶有表示XML結構注釋的JAXB Java對象,
  • 使用Marshaller將(“ marshall”)寫入文件,
  • 使用schemagen從JAXB對象及其注釋生成XSD。

另外,JAXB允許您將XML讀回到對象結構中。

我建議您使用XML模式.xsd而不是DTD。

與DTD相比,它具有以下優點:

  1. .xsd XML; DTD不是。
  2. 模式將比DTD進行更徹底的檢查。 它可以強制執行類型,正則表達式,枚舉等。
  3. 像IntelliJ這樣的智能IDE可以通過現有的XML為您生成模式,反之亦然。

使用文本編輯器很容易生成模式。 我認為這是一個值得的練習。

我不建議在任何情況下都生成這樣的東西。 您正在表達有關架構或DTD中文檔的大量知識。

DTD通常會受到不好的說唱,並且通常是出於考慮不周的原因,例如可能被稱為“開發者風尚和時尚”(例如,最新的東西是最好的東西)。 例如,認為DTD不是XML很奇怪。 我認為人們經常說DTD的語法不是XML文檔標記語法,這是正確的。 但是DTD 本質上是 XML,也就是說,它們是XML Recommendation的重要組成部分,當然比XML Schema還要重要,XML Schema像XML Namespaces一樣后來成為大量附加建議之一,這提出了一個棘手的問題:“什么是兼容的XML文檔?” 但是我們這里不會碰那個。 可以肯定的是,每一個符合XML處理器必須支持的DOCTYPE聲明和DTD處理; 它是免費的,您不需要其他任何東西。 諸如Apache Catalog Resolver之類的項目為TR 9401和XML Catalogs(“實體解析”)提供了支持,而XML Catalogs在開放源代碼和商業產品方面都具有悠久的行業支持歷史。

相比之下,並非所有XML處理器都支持XML Schema(或者至少一直如此),並且XSD鏈接到文檔實例的方式是通過大量復雜的XML命名空間屬性來處理的,這些屬性是文檔的一部分實例(屬於根元素),而不是序言的一部分。 (從根本上講,這意味着處理器必須在獲取模式之前開始處理文檔。如果您不了解這種區別的重要性,則應該做一些功課。)使用多個XSD的混合文檔類型之間的相互依賴性非常復雜且未指定。 您可能會發現必須為實體解析提供自己的支持。

並且,將模式包含在XML標記中並非總是有好處的,除非您計划通過軟件工具進行管理。 DTD更具人類可讀性,盡管有相反的意見,您也可以使用名稱空間前綴(請參閱XHTML Modularisation )。 如果您的驗證要求主要是結構性的(例如,您的內容是以文檔為中心,而不是以數據為中心),則您可能不是在嘗試驗證內容,而是在嘗試驗證標記。 DTD很好。 您可能還會研究完全不同的驗證和文檔約束方法,例如Schematron,它可以很好地增強DTD驗證。 最后,大多數可以生成XSD的工具也可以生成DTD,並且有轉換應用程序可用(請參閱James Clark的trang )。

DTD也將與XML一樣長,例如50-100年。 從長遠來看,我們可能會發現XML Schema無法生存:它只是眾多可行的競爭者之一,這些競爭者是由於XSD的許多失敗而出現的。 我發現DTD和Schematron的組合非常適合我的需求,並且是一種靈活的解決方案。 但是YMMV。

總之,在接受通用的散布建議之前,您確實應該查看您的實際架構/約束要求。 您可能會發現DTD可以很好地工作。 他們從1971年左右開始這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM