空字符串作为 DOCTYPE 路径是否有意义?

Does an empty string make sense as DOCTYPE path?

我在提供用于处理的 XML 文件中发现以下内容:
<!DOCTYPE exchange_rates SYSTEM "">
空字符串对我没有任何意义,我在网上找不到任何关于它的讨论。如果我使用在线验证器,它们都不会为此发出警告,如果我在引号之间放置任何垃圾,它们也不会帮助我确定此声明是否无效。如果有效,这个 XML 文件应该如何验证?

DOCTYPE 声明确实有效。要确定这一点,您可以查看规范...

Prolog section you will find the model for the DOCTYPE declaration (doctypedecl):

如果你再看看 ExternalID:

你会看到 SYSTEM 后面跟着 SystemLiteral:

这表明引号可以为空。

If it is valid, how is this XML file supposed to be validated?

由于 DOCTYPE 有一个空的 SYSTEM 标识符,并且没有 PUBLIC 标识符可以映射到 SYSTEM 标识符,因此无法以编程方式知道要验证的 DTD。

根据 DTD 验证这个 XML 的唯一方法是让您知道它应该提前验证什么 DTD 以及您使用什么来验证允许您指定 DTD 与 DOCTYPE 分开宣言。 (例如,通过将 --dtdvalid arg 与 xmllint 一起使用。)