1

我有一个 XHTML5 文档。这只是意味着我正在创建一个 HTML5 文档,但我希望所有结束标记都存在并且我想要适当的编码等。所以文件扩展名是xhtml并且文件以:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html lang="en-us" xmlns="http://www.w3.org/1999/xhtml">

所有这些都是完全标准的东西。只是用 XML 编码的简单 HTML5。

我使用 XML Sidekick 插件安装了 jEdit 5.3.0。我立即得到一个错误列表,上面写着:

Element type "html" must be declared.
Element type "html" must be declared.
Element type "body" must be declared.
Element type "h1" must be declared.
Element type "p" must be declared.
...

Sidekick 的轮廓看起来很酷,提示元素和属性名称的弹出窗口也不错。

但是我如何摆脱所有这些错误呢?我不需要也不想要 DTD。

如果我将解析器更改为htmlthen 我不会收到任何错误 --- 但我也不会收到任何 DOM 树表示或自动建议。

为什么 jEdit+Sidekick 不喜欢我的简单、符合标准的 XHTML5 文件?

4

2 回答 2

1

回覆:

但是我如何摆脱所有这些错误呢?

这个答案描述了一种方式。还有其他的。

回覆:

为什么 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

概括

  1. 在 XHTML5 的前 10 行插入:xml.validate.ignore-dtd=true:注释以防止 jEdit DTD 解析。
  2. 下载 XHTML5 模式。
  3. 在 jEdit 中,将 XHTML5 模式与您的 XHTML5 文档相关联。

详细程序

以下过程假定您已经安装了带有 XML 插件的 jEdit。

  1. :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。

  2. 从 GitHub 存储库arasix/XHTML5-XML-Schema下载 XHTML5 模式。

    请注意存储库自述文件中有关data-*属性的警告。

    XHTML5 的其他模式也可用。没有“官方”XHTML5 模式。

  3. 将存储库 .zip 文件解压缩到您选择的位置。
  4. 在 jEdit 中,为您的 XHTML5 文档设置架构:
    1. 选择插件 > XML > 设置架构...
    2. 从下载的存储库中选择 xhtml5_with_microdata.xsd 文件。
    3. 我还选择了单击“使此位置相对(预览如下)”(原文如此)。

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 定义了各种命名字符引用,例如&nbsp;(不间断空格)。

此答案中描述的基于 XML 模式的验证不支持此类命名引用,但在 XML 中预定义的引用除外。

例如,&nsbp;在您的 XHTML5 文档中输入将在 jEdit 中生成以下错误:

实体“nbsp”被引用,但未声明。

作为一种解决方法,请指定相应的 XML 十进制或十六进制数字字符引用:&#160;&#xA0;.

故障排除

如果 jEdit 似乎没有将您的文档解析为 XML:

  1. 检查您的 XHTML5 的编辑模式是否xml(它没有恢复到,比如说,html):选择实用程序 > 缓冲区选项 > 编辑模式:xml
  2. “唤醒” XML 解析:选择 Plugins > Sidekick > Parse Buffer

问题

为什么不直接删除 DOCTYPE?

与其将特定于 jEdit 的字符串插入到我的 XHTML5 源代码中以防止基于 DTD 的解析,为什么不直接删除 DOCTYPE?

有几个原因:例如,在 Web 浏览器中触发标准模式。有关更多信息,请参阅 WHATWG 常见问题解答;具体来说,就是“什么是现代 HTML 文档的 DOCTYPE? ”这个问题的答案。

于 2016-02-12T05:05:14.557 回答
0

你只需要更新你的 XML 插件。当前版本识别 HTML5 Doctype 声明并自动切换到 DTD-less 验证和完成。

于 2016-04-05T11:56:04.187 回答