回覆:
但是我如何摆脱所有这些错误呢?
这个答案描述了一种方式。还有其他的。
回覆:
为什么 jEdit+Sidekick 不喜欢我的简单、符合标准的 XHTML5 文件?
<!DOCTYPE html>
触发 jEdit 的基于 DTD 的解析,但没有提供足够的信息来定位相应的 DTD。详见W3C网页“ HTML语法”中“permitted-public-ID-system-ID-combination”的说明。
回覆:
我不需要也不想要 DTD。
如果您想使用 XML 插件在 jEdit 中验证 XHTML5,那么您需要一个 DTD 或一个模式。此答案使用 W3C XML 模式。
如果您只想检查您的 XHTML5 格式是否正确,但不一定有效,那么,是的,正如您所说,您不需要 DTD 或模式,您可以忽略大部分答案:只需插入:xml.validate.ignore-dtd=true:
XHTML5 文档前 10 行之一的注释中的字符串。
在 jEdit 中验证 XHTML5
概括
- 在 XHTML5 的前 10 行插入
:xml.validate.ignore-dtd=true:
注释以防止 jEdit DTD 解析。
- 下载 XHTML5 模式。
- 在 jEdit 中,将 XHTML5 模式与您的 XHTML5 文档相关联。
详细程序
以下过程假定您已经安装了带有 XML 插件的 jEdit。
:xml.validate.ignore-dtd=true:
在 XHTML5 文件的前 10 行的注释中插入字符串。例如:
<?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 解析:选择 Plugins > Sidekick > Parse Buffer。然后击键解析再次开始工作。
不支持 HTML 命名字符引用
HTML 定义了各种命名字符引用,例如
(不间断空格)。
此答案中描述的基于 XML 模式的验证不支持此类命名引用,但在 XML 中预定义的引用除外。
例如,&nsbp;
在您的 XHTML5 文档中输入将在 jEdit 中生成以下错误:
实体“nbsp”被引用,但未声明。
作为一种解决方法,请指定相应的 XML 十进制或十六进制数字字符引用: 
或 
.
故障排除
如果 jEdit 似乎没有将您的文档解析为 XML:
- 检查您的 XHTML5 的编辑模式是否
xml
(它没有恢复到,比如说,html
):选择实用程序 > 缓冲区选项 > 编辑模式:xml
。
- “唤醒” XML 解析:选择 Plugins > Sidekick > Parse Buffer
问题
为什么不直接删除 DOCTYPE?
与其将特定于 jEdit 的字符串插入到我的 XHTML5 源代码中以防止基于 DTD 的解析,为什么不直接删除 DOCTYPE?
有几个原因:例如,在 Web 浏览器中触发标准模式。有关更多信息,请参阅 WHATWG 常见问题解答;具体来说,就是“什么是现代 HTML 文档的 DOCTYPE? ”这个问题的答案。