如何使用java生成DTD文件

时间:2012-02-27 20:45:57

标签: java xml dtd

我不是Java中的新手,而是XML和DTD文件中的新手。我有一个工具(我写过)将项目保存为XML。您可以从主项目创建应用程序,但我必须根据主项目检查应用程序的有效性。因此,对于每个主项目,我都必须创建一个DTD文件以及XML文件。这样我就可以检查应用程序(XML文件)还有DTD文件。我如何使用Java生成该dtd文件。

3 个答案:

答案 0 :(得分:1)

我这样做的方法是使用JAXB对象和注释,而使用XSD代替DTD。

  • 使用表示XML结构的注释创建JAXB Java对象,
  • 使用Marshaller
  • 将文件(“marshall”)写入文件
  • 使用schemagen从JAXB对象及其注释生成XSD。

作为奖励,JAXB将允许您将XML读回到对象结构中。

答案 1 :(得分:0)

我建议您使用XML架构.xsd而不是DTD。

与DTD相比,它有几个优势:

  1. .xsd XML; DTD不是。
  2. 架构将比DTD更彻底地进行检查。它可以强制执行类型,正则表达式,枚举等。
  3. 像IntelliJ这样的智能IDE可以从现有XML为您生成架构,反之亦然。
  4. 使用文本编辑器可以轻松生成模式。我认为这是值得的练习。

    我不建议在任何情况下生成这样的东西。您在架构或DTD中表达了很多关于文档的知识。

答案 2 :(得分:0)

DTD通常会得到糟糕的说唱,并且经常出于考虑不周的原因,例如人们可能称之为“开发者时尚和时尚”(例如,最新的事情是最好的事情)。例如,认为DTD不是XML是相当奇怪的。我认为人们通常认为DTD的语法不是XML文档标记语法,这是正确的。但是DTD本质上是 XML XML,即它们是XML建议书的重要组成部分,当然比XML Schema更为重要,后者像XML命名空间一样后来成为大量附加建议书之一,提出了一个棘手的问题“什么是兼容的XML文档?”但我们不会在这里触及那个。 的确定是每个兼容的XML处理器都需要支持DOCTYPE声明和DTD处理;它是免费的,你不需要任何其他东西。 Apache Catalog Resolver等项目为TR 9401和XML目录(“实体解析”)提供支持,该目录在开源和商业产品方面拥有悠久的行业支持历史。

相比之下,所有XML处理器都不支持XML Schema(或者至少一直如此),并且XSD链接到文档实例的方式是通过许多相当复杂的XML Namespace属性来处理的。文档实例(根元素上的属性),而不是prolog的一部分。 (基本上,这意味着处理器必须在获取模式之前开始处理文档。如果您不了解这种区别的重要性,则应该做一些功课。)使用多个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年左右以来,他们已经这样做了。