是否必须在XML中指定DTD?

时间:2014-11-28 11:45:11

标签: xml rest soap dtd

我正在构建一个返回XML响应的API。我已经为响应创建了DTD,它可以在公共URL上使用。 DTD已在我创建的API文档中与目标用户共享。是否必须在响应XML中包含DTD引用?使用XML响应的XML解析器是否会自动尝试使用DTD验证响应?如果指定DTD是可选的,那么指定和跳过它的优缺点是什么?

2 个答案:

答案 0 :(得分:3)

只有在使用5中内置于XML(&等)之外的命名实体时才需要DTD。

某些XML解析器会完全忽略它。有些人会下载并使用它。

优点:

  • 可以验证XML
  • 您可以在支持它的解析器中使用自定义命名实体

缺点:

  • 支持它的解析器中的其他HTTP请求
  • 自定义命名实体会在不支持它的解析器中破坏文档

答案 1 :(得分:3)

  

是否必须在响应XML中包含DTD引用?

XML规范没有强制要求。无论您是否希望(或有义务)遵守其他规范或规则,只有您可以说。

  

使用XML响应的XML解析器是否会自动尝试使用DTD验证响应?

如果你指定它,有些人会,因为他们错误地混淆了文件类型声明的声明性含义(本文件[打算]对这个DTD有效)具有强制性含义'请查看本文件对此DTD的有效性'。

如果您没有指定它,那么XML解析器不太可能尝试针对任何DTD验证实例,更不用说您想到的那个了。

  

如果指定DTD是可选的,那么指定和跳过它的优缺点是什么?

支持指定它:对于试图解决涉及相关XML文档的问题的人来说,它是有用的信息。这使得XML数据流中的错误更有可能被提前发现。

赞成省略它:一些脑死亡系统将针对DTD的验证视为带来安全风险,并且无法想出任何更好的方法来抵御数十亿次的笑声攻击。如果那些脑死亡系统也无法区分文档类型声明的声明性和命令性含义,则它们可能拒绝处理该文档。 (当然,因为如果你能够避开这样的系统,你的生活可能会更快乐,这个论点可能会采取相反的方式:如果你指定DTD,你就不太可能不知不觉中有这样的大脑-dead系统。他们对DTD的抱怨是一个早期预警系统,给你时间以另一种方式运行。如果省略DTD,你可能会发现自己使用的系统的缺点最终会以其他方式显现。)