仅仅为了定义实体而使用DTD是否不符合要求?

时间:2017-03-26 17:21:17

标签: xml visual-studio validation xsd dtd

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

MS Visual Studio接受此安排,不会标记任何错误。 (我已经测试过XSD确实用于验证,暂时扰乱了XML文件的内容,并观察到出现了预期的验证错误。)但是,我很好奇这种安排是否严格符合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">
    ...

1 个答案:

答案 0 :(得分:0)

您的XML文件格式正确无效。这完全没问题(符合)。如果你要求XML解析器进行有效性检查,它会给出错误,但是如果你只是要求它进行格式良好的检查,那就不会有。