【问题标题】:Is it non-conformant to use a DTD only for the purpose of defining entities?仅出于定义实体的目的使用 DTD 是否不符合标准?
【发布时间】:2017-03-26 17:21:16
【问题描述】:

我创建了一个 XML 文件,该文件利用 .dtd 文件中定义的实体来缩写重复内容。该文件还引用了一个用于验证的 XSD 文件。 .dtd 文件不用于验证,除了<!ENTITY ...> 声明和 cmets 之外,它不包含任何内容。

MS Visual Studio 接受这种安排并且不会标记任何错误。 (我已经通过暂时扰乱 XML 文件的内容并观察到出现预期的验证错误来测试 XSD 确实被用于验证。)但是,我很好奇这种安排是否严格符合 DTD 文件的方式应该可以工作,所以我尝试将这 3 个文件提交给基于 Web 的验证器。基于 Web 的验证器吐出 2,000 个左右的错误列表,这些错误的形式都是“必须声明元素类型“元素名称””。这表明它希望 DTD 文件包含其他内容,用于验证目的。

Visual Studio 的观察行为对我很有用,但它在技术上是否偏离了这里的相关标准?

XML 文件的前几行格式如下:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE FooCollection SYSTEM "entities.dtd">

<FooCollection
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="FooCollection.xsd">
    ...

【问题讨论】:

    标签: xml visual-studio validation xsd dtd


    【解决方案1】:

    您的 XML 文件格式正确但不是有效。这完全没问题(并且符合)。如果你要求 XML 解析器做有效性检查,它会报错,但如果你要求它只做格式良好检查,它不会。

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      相关资源
      最近更新 更多