空字符串作为 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 一起使用。)
我在提供用于处理的 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 一起使用。)