回复:
但是我该如何摆脱所有这些错误呢?
这个答案描述了一种方式。还有其他的。
回复:
为什么 jEdit+Sidekick 不喜欢我的简单、符合标准的 XHTML5 文件?
<!DOCTYPE html> 触发 jEdit 的基于 DTD 的解析,但没有提供足够的信息来定位相应的 DTD。详见W3C网页“HTML syntax”中“permitted-public-ID-system-ID-combination”的说明。
回复:
我不需要也不想要 DTD。
如果您想使用 XML 插件在 jEdit 中验证 XHTML5,那么您需要一个 DTD 或一个模式。此答案使用 W3C XML 模式。
如果您只想检查您的 XHTML5 是否格式正确,但不一定有效,那么,是的,正如您所说,您不需要 DTD 或模式,您可以忽略大部分答案:只需在 XHTML5 文档前 10 行之一的注释中插入字符串 :xml.validate.ignore-dtd=true:。
在 jEdit 中验证 XHTML5
总结
- 在 XHTML5 的前 10 行的注释中插入
:xml.validate.ignore-dtd=true: 以防止 jEdit DTD 解析。
- 下载 XHTML5 架构。
- 在 jEdit 中,将 XHTML5 架构与您的 XHTML5 文档相关联。
详细流程
以下过程假设您已经安装了带有 XML 插件的 jEdit。
-
在 XHTML5 文件前 10 行的注释中插入字符串 :xml.validate.ignore-dtd=true:。例如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- jEdit XML plugin property: :xml.validate.ignore-dtd=true: -->
<meta charset="UTF-8"/>
<title>XHTML5 document</title>
</head>
<body>
<p>Hello, World!</p>
</body>
</html>
这会阻止 jEdit 寻找不存在的 DTD。
-
从 GitHub 存储库 arasix/XHTML5-XML-Schema 下载 XHTML5 架构。
请注意存储库自述文件中关于 data-* 属性的警告。
XHTML5 的其他模式也可用。没有“官方”的 XHTML5 模式。
- 将存储库 .zip 文件解压缩到您选择的位置。
- 在 jEdit 中,为您的 XHTML5 文档设置架构:
- 选择插件 > XML > 设置架构...
- 从下载的存储库中选择 xhtml5_with_microdata.xsd 文件。
- 我还选择了单击“使此位置相对(预览如下)”(原文如此)。
jEdit 在与您的 XHTML5 文档相同的目录中创建一个 schemas.xml 文件。有关 schemas.xml 的详细信息,包括编辑它以便您无需为每个 XHTML5 文档设置架构,请参阅 jEdit XML 插件帮助。
已知问题
架构中的唯一粒子归属违规
当 jEdit 加载架构时(它执行一次,然后缓存它),它在 xhtml5.xsd 中报告以下错误:
159:cos-nonambig: "http://www.w3.org/1999/xhtml":link 和 "http://www.w3.org/1999/xhtml":link(或它们替换组中的元素)违反了“唯一粒子属性”。在针对此模式进行验证期间,将为这两个粒子创建歧义。
550:cos-nonambig: "http://www.w3.org/1999/xhtml":figcaption 和 "http://www.w3.org/1999/xhtml":figcaption(或它们替换组中的元素)违反了“唯一粒子属性”。在针对此模式进行验证期间,将为这两个粒子创建歧义。
我已将这些错误报告给架构作者。
实际上,您可以忽略这些错误:在错误列表窗格中,单击扫帚(“清除错误列表”)按钮。
清除这些错误后,我发现我需要“唤醒”我的 XHTML5 文档的 XML 解析:选择插件 > Sidekick > 解析缓冲区。然后按键解析再次开始工作。
不支持 HTML 命名字符引用
HTML 定义了各种命名字符引用,例如&nbsp;(不间断空格)。
此答案中描述的基于 XML 模式的验证不支持此类命名引用,predefined in XML 除外。
例如,在您的 XHTML5 文档中输入&nsbp; 将在 jEdit 中生成以下错误:
实体“nbsp”已被引用,但未声明。
作为一种解决方法,请指定相应的 XML 十进制或十六进制数字字符引用:&#160; 或 &#xA0;。
疑难解答
如果 jEdit 似乎没有将您的文档解析为 XML:
- 检查 XHTML5 的编辑模式是否为
xml(它尚未恢复为 html):选择实用程序 > 缓冲区选项 > 编辑模式:xml。
- “唤醒”XML 解析:选择插件 > Sidekick > 解析缓冲区
问题
为什么不直接删除 DOCTYPE?
与其将特定于 jEdit 的字符串插入到我的 XHTML5 源代码中以防止基于 DTD 的解析,为什么不直接删除 DOCTYPE?
有几个原因:例如,在 Web 浏览器中触发标准模式。有关更多信息,请参阅 WHATWG 常见问题解答;具体来说,“What is the DOCTYPE for modern HTML documents?”问题的答案