Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用java生成DTD文件_Java_Xml_Dtd - Fatal编程技术网

如何用java生成DTD文件

如何用java生成DTD文件,java,xml,dtd,Java,Xml,Dtd,我对java不是新手,但对XML和DTD文件是新手。我有一个工具(我写的)可以将项目保存为XML。您可以从主项目创建应用程序,但我必须对照主项目检查应用程序的有效性。因此,对于每个主要项目,我都必须创建DTD文件和XML文件。因此,我可以检查应用程序(XML文件也)是否与DTD文件关联。如何用Java生成dtd文件。我建议您使用XMLSchema.xsd而不是dtd 与DTD相比,它有几个优点: xsd是XML;DTD不是 模式将比DTD进行更彻底的检查。它可以强制类型、正则表达式、枚举等 像I

我对java不是新手,但对XML和DTD文件是新手。我有一个工具(我写的)可以将项目保存为XML。您可以从主项目创建应用程序,但我必须对照主项目检查应用程序的有效性。因此,对于每个主要项目,我都必须创建DTD文件和XML文件。因此,我可以检查应用程序(XML文件也)是否与DTD文件关联。如何用Java生成dtd文件。

我建议您使用XMLSchema.xsd而不是dtd

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

  • xsd是XML;DTD不是
  • 模式将比DTD进行更彻底的检查。它可以强制类型、正则表达式、枚举等
  • 像IntelliJ这样的智能IDE可以从现有XML为您生成模式,反之亦然
  • 使用文本编辑器很容易生成模式。我认为这是一个值得做的练习


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

    DTD常常受到不好的评价,而且常常是因为考虑不周的原因,比如人们可能称之为“开发者时尚”(例如,最新的东西是最好的东西)。例如,认为DTD不是XML是相当奇怪的。我认为人们通常认为DTD的语法不是XML文档标记语法,这是正确的。但DTD本质上是XML,也就是说,它们在很大程度上是XML建议的一部分,当然比XML模式更重要,后者与XML名称空间一样,后来作为大量附加建议之一出现,这就提出了一个棘手的问题“什么是兼容的XML文档?”但我们在这里不涉及这个问题。可以肯定的是,每个兼容的XML处理器都需要支持
    DOCTYPE
    声明和DTD处理;它是免费的,你不需要其他任何东西。Apache Catalog Resolver等项目同时支持TR 9401和XML目录(“实体解析”),这两种目录在开源和商业产品中都有很长的行业支持历史

    相比之下,并非所有的XML处理器都支持XML模式(或者至少一致支持),XSD链接到文档实例的方式是通过一些相当复杂的XML命名空间属性来处理的,这些属性是文档实例的一部分(根元素上的属性),而不是prolog的一部分。(基本上,这意味着处理者必须在获得模式之前开始处理文档。如果你不理解这种区别的重要性,你应该做一些功课。)使用多个XSD的混合文档类型中的相互依赖关系是复杂的,而且没有指定。您可能会发现您必须为实体解析提供自己的支持

    在XML标记中使用模式并不总是一个好处,除非您计划通过软件工具来管理它们。DTD更易于人类阅读,尽管有一些相反的观点,但您可以使用名称空间前缀(请参阅)。如果您的验证需求主要是结构化的(例如,您的内容以文档为中心而不是以数据为中心),那么您可能不会尝试验证内容,而是验证标记。DTD可以做到这一点。您还可以研究完全不同的验证和文档约束方法,例如Schematron,它非常好地增强了DTD验证。最后,大多数可以生成XSD的工具也可以生成DTD,并且有一些转换应用程序可用(参见James Clark的)

    DTD也将和XML一样长,比如说50-100年。从长远来看,我们可能会发现XML模式无法生存:它只是众多可行竞争对手中的一个,这些竞争对手是由于XSD的许多缺陷而出现的。我发现DTD和Schematron的组合非常适合我的需要,是一个灵活的解决方案。但是YMMV


    总之,在接受一般的散点建议之前,您确实应该先查看实际的模式/约束需求。您可能会发现DTD工作得非常好。他们大约从1971年就开始这样做了。

    我的做法是使用JAXB对象和注释,使用XSD代替DTD

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

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

    如果您只是生成它,DTD将毫无用处,它不会检查任何有用的内容。听起来您的所有项目XML文件都应该根据相同的DTD进行验证。“…DTD更易于人类阅读…”您的观点;我不同意。没有人知道XML能否存活50-100年。更多的猜测。处理模式现在内置于JavaJDK中,因此您关于一致性支持的声明不再正确。DTD可能早在XML出现之前就存在了,但XML规范本身可以追溯到1998年:显然,您从未尝试在XML模式中读取或编辑复杂的内容模型。您可以在文本编辑器中的DTD中执行此操作;在XSD中,您最好使用工具,否则很快就会迷路。我很清楚各自的SGML和XML规范的日期,所以我不确定您的观点。SGML的起源可以追溯到60年代,至于XML,我从一开始就在那里,收到了第一个规范的打印副本。我从80年代末开始使用SGML(在工业界工作),因此我可以说我有一些在专业环境中负责DTD和XSD的经验。现在就开始响应了吗?我们都会保留我们的意见。你的评论不能使我信服。