【问题标题】:Is this html declaration repetitive这个 html 声明是否重复
【发布时间】:2010-10-27 10:06:13
【问题描述】:

我有一个 doctype 声明,如前 2 行所示。

在第三行,html标签也有一些xmlns声明和xml:lang和lang。这些 xmlns、xml:lang 或 lang 是否重复?他们是否复制了文档类型中的任何内容。我想保留文档类型并删除第三行中的所有声明(如果它们是重复的)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

</html>

【问题讨论】:

    标签: html xml xhtml doctype


    【解决方案1】:

    它们不是重复的。 XHTML 的 XML 命名空间和 doctype 声明不一样。 xml:langlang 属性也不是。 XHTML 1.0 specification 要求包含所有这些。

    XHTML 1.0 Strict DTD描述的&lt;html&gt;元素的属性列表如下:

    <!ATTLIST html
      %i18n;
      id          ID             #IMPLIED
      xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
      >
    

    (其中%i18n 是一个内部实体,代表xml:langlangdir 国际化属性,见下文)

    注意第四行。它表示xmlns 是给定 URI 值的属性,并且在该名称空间 URL 处固定。这意味着如果您省略该属性或给它一个不同的命名空间,您的文档是无效的严格 XHTML。

    %i18n 实体对应于这些属性:

    <!-- internationalization attributes
      lang        language code (backwards compatible)
      xml:lang    language code (as per XML 1.0 spec)
      dir         direction for weak/neutral text
    -->
    <!ENTITY % i18n
     "lang        %LanguageCode; #IMPLIED
      xml:lang    %LanguageCode; #IMPLIED
      dir         (ltr|rtl)      #IMPLIED"
      >
    

    lang 属性用于向后兼容(即 HTML ≤ 4.01),xml:lang 由 XML 1.0 描述(因此这里看到了 xml 命名空间)。我不太确定xml:lang 应该在lang 之前的确切原因,但考虑到XHTML 只是将HTML“改写”为XML 语法(可以这么说),这是有道理的。

    如果未指定,dir 属性默认为 ltr(从左到右的文本),因此它不是必需的属性。

    【讨论】:

      【解决方案2】:

      要符合 DOCTYPE 指示的严格 XHTML 标准,您必须指定 xmlns 属性。

      文档的根元素必须 使用指定 XHTML 命名空间 xmlns 属性 [XMLNAMES]。这 XHTML 的命名空间指示符是 “http://www.w3.org/1999/xhtml”。

      来自http://www.w3.org/TR/xhtml11/conformance.html的参考点#3

      【讨论】:

        【解决方案3】:

        不,xml文档的doctype和namespace是不同的东西。

        【讨论】:

          【解决方案4】:

          如果您使用的是 XHTML,那么(根据此处的其他 cmets)您需要指定所有这些内容。您的页面必须符合规范(如果 XHTML 页面未 100% 符合规范,则它们将失败)。

          但是,您的问题表明您希望简化代码。就目前的情况而言,使用 XHTML 是不行的。但是如果你切换到 HTML5 规范,那么你可以大大简化事情。

          HTML5 不需要复杂的文档类型,也不需要任何 XML 命名空间声明。 HTML5 文档如下所示:

          <!DOCTYPE html>
          <html>
          ....
          </html>
          

          我相信你会同意,这更简单,更容易阅读。

          好消息是您可以在不更改任何其他内容或丢失任何功能的情况下执行此操作。所有当前的浏览器都可以使用此代码,即使它们没有明确与 HTML5 兼容。

          【讨论】:

            【解决方案5】:

            不,没有什么比重复更重要的了。

            我们可以同时提及langxml:lang 属性。 xml:lang 属性的值优先

            xmlns 如果 Doctype 处于严格模式,则必须存在。

            【讨论】:

              猜你喜欢
              • 2014-01-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-12-22
              • 2023-01-12
              • 2015-04-30
              • 1970-01-01
              相关资源
              最近更新 更多