空字符串作为XML DOCTYPE路径是否具有合法性?
XML空SYSTEM标识符DOCTYPE声明合法性及校验方法
合法性判定
该DOCTYPE声明完全符合W3C XML 1.0规范要求。
<!DOCTYPE exchange_rates SYSTEM "">中SYSTEM关键字后跟随的双引号包裹的空字符串属于合法的相对URI引用,语义上指向当前XML文件本身的基准访问路径。
在线校验工具无警告的原因
- 绝大多数在线XML校验工具默认仅执行XML良构性检查,不会主动开启DTD有效性验证逻辑,只要DOCTYPE本身格式符合规范就不会抛出错误
- 部分开启了DTD验证的工具,在无法通过空URI获取到对应DTD资源时,会选择跳过外部DTD验证步骤,仅继续检查XML本身结构的合法性,因此不会上报路径无效的警告
校验实施方案
如果需要对该XML做有效性校验,可以选择以下任意一种方案:
- 替换空URI为实际DTD路径
将SYSTEM后的空字符串替换为对应DTD文件的本地/远程实际路径,开启DTD验证选项后即可完成常规校验 - 嵌入内部DTD子集
如果有对应DTD的定义内容,可以直接在DOCTYPE中加入内部DTD子集,无需依赖外部资源即可完成校验,示例如下:
<!DOCTYPE exchange_rates SYSTEM "" [ <!-- 此处填写exchange_rates元素对应的完整DTD定义 --> <!ELEMENT exchange_rates (rate+)> <!ELEMENT rate (currency, amount, update_time)> <!ELEMENT currency (#PCDATA)> <!ELEMENT amount (#PCDATA)> <!ELEMENT update_time (#PCDATA)> ]>
- 移除占位符DOCTYPE
如果没有对应的DTD定义,说明该空SYSTEM标识符是XML生成工具遗留的占位符,无实际作用,可以直接删除整个DOCTYPE声明,仅做XML良构性检查即可。
内容的提问来源于stack exchange,提问作者Dávid Laczko
相关产品推荐
相关产品推荐

