W3C home > Mailing lists > Public > public-html@w3.org > April 2010

Proposal to make Content-Language pragma non-conforming altogether for ISSUE-88 (mark I)

From: Ian Hickson <ian@hixie.ch>
Date: Fri, 9 Apr 2010 00:00:51 +0000 (UTC)
To: public-html@w3.org
Message-ID: <Pine.LNX.4.64.1004082341470.4065@ps20323.dreamhostps.com>

ISSUE-88
========

SUMMARY
People are confused by the Content-Language pragma, so it should be made 
non-conforming.

RATIONALE
The continued existence of the Content-Language pragma encourages 
standards advocates and authors to consider it potentially useful. In 
practice, it is not useful for its original purpose (having servers update 
their HTTP headers), since servers ignore it and clients don't. It is not 
useful for the purpose that people previously assumed it had, namely 
declaring the target audience of the document, because clients treat it as 
the language of the document, treat multiple values in inconsistent ways, 
and do not treat it as anything to do with the audience. Finally, for the 
only purpose that it actually has, it is redundant with simpler and more 
reliably implemented features.

Thus, this change proposal suggests making the feature entirely 
non-conforming. The specification already makes it trigger a warning in 
validators, but this doesn't go far enough, as it will just lead to people 
arguing that's actually useful when it isn't.


DETAILS

Index: source
===================================================================
--- source	(revision 4987)
+++ source	(working copy)
@@ -13097,57 +13097,56 @@ gave me some of the songs they wrote. I 
   </div>
 
   <p>Metadata names whose values are to be <span
   title="URL">URLs</span> must not be proposed or accepted. Links must
   be represented using the <code>link</code> element, not the
   <code>meta</code> element.</p>
 
 
 
   <h5>Pragma directives</h5>
 
   <p>When the <dfn
   title="attr-meta-http-equiv"><code>http-equiv</code></dfn> attribute
   is specified on a <code>meta</code> element, the element is a pragma
   directive.</p>
 
   <p>The <code title="attr-meta-http-equiv">http-equiv</code>
   attribute is an <span>enumerated attribute</span>. The following
   table lists the keywords defined for this attribute. The states
   given in the first cell of the rows with keywords give the states to
-  which those keywords map. <!--<span class="impl">Some of the
+  which those keywords map. <span class="impl">Some of the
   keywords are non-conforming, as noted in the last
-  column.</span>--></p>
+  column.</span></p>
 
 <!-- things that are neither conforming nor do anything are commented out -->
-<!-- if you add something non-conforming, uncomment out the last sentence above -->
   <table>
    <thead>
     <tr>
      <th>State
      <th>Keywords
      <th>Notes
    <tbody>
-    <tr>
+    <tr class="impl">
      <td><span title="attr-meta-http-equiv-content-language">Content Language</span>
      <td><code title="">content-language</code>
-     <td>Conformance checkers will include a warning
+     <td>Non-conforming
     <tr>
      <td><span title="attr-meta-http-equiv-content-type">Encoding declaration</span>
      <td><code title="">content-type</code>
      <td>
 <!--
     <tr class="impl">
      <td><span title="attr-meta-http-equiv-content-script-type">Content-Script-Type</span>
      <td><code title="">Content-Script-Type</code>
      <td>Non-conforming
     <tr class="impl">
      <td><span title="attr-meta-http-equiv-content-style-type">Content-Style-Type</span>
      <td><code title="">Content-Style-Type</code>
      <td>Non-conforming
 -->
     <tr>
      <td><span title="attr-meta-http-equiv-default-style">Default style</span>
      <td><code title="">default-style</code>
      <td>
     <tr>
      <td><span title="attr-meta-http-equiv-refresh">Refresh</span>
@@ -13191,107 +13190,95 @@ Here's some more data, this time from Ph
    [...]
 http://philip.html5.org/data/meta-http-equiv.txt
 
 These numbers are low; further study is required to establish what
 people expect to have work and what is necessary.
 -->
 
   <div class="impl">
 
   <p>When a <code>meta</code> element is <span title="insert an
   element into a document">inserted into the document</span>, if its
   <code title="attr-meta-http-equiv">http-equiv</code> attribute is
   present and represents one of the above states, then the user agent
   must run the algorithm appropriate for that state, as described in
   the following list:</p>
 
   </div>
 
   <dl>
 
-   <dt><dfn title="attr-meta-http-equiv-content-language">Content language state</dfn> (<code title="">http-equiv="content-language"</code>)
+   <dt class="impl"><dfn title="attr-meta-http-equiv-content-language">Content language state</dfn> (<code title="">http-equiv="content-language"</code>)
 
-   <dd>
+   <dd class="impl">
+
+    <p class="note">This feature is non-conforming. Authors are
+    encouraged to use the <code title="attr-lang">lang</code>
+    attribute instead.</p>
 
     <p>This pragma sets the <dfn>pragma-set default
     language</dfn>. Until the pragma is successfully processed, there
     is no <span>pragma-set default language</span>.</p>
 
-    <p class="note">Conformance checkers will include a warning if
-    this pragma is used. Authors are encouraged to use the <code
-    title="attr-lang">lang</code> attribute instead.</p>
-
-    <div class="impl">
-
     <ol>
 
      <li><p>If another <code>meta</code> element with an <code
      title="attr-meta-http-equiv">http-equiv</code> attribute in the
      <span title="attr-meta-http-equiv-content-language">Content
      Language state</span> has already been successfully processed
      (i.e. when it was inserted the user agent processed it and
      reached the last step of this list of steps), then abort these
      steps.</p></li>
 
      <li><p>If the <code>meta</code> element has no <code
      title="attr-meta-content">content</code> attribute, or if that
      attribute's value is the empty string, then abort these
      steps.</p></li>
 
      <li><p>If the element's <code
      title="attr-meta-content">content</code> attribute contains a
      U+002C COMMA character (,) then abort these steps.</p></li><!--
      if you remove this, un-comment-out the corresponding bits in the
      step below. -->
 
      <li><p>Let <var title="">input</var> be the value of the
      element's <code title="attr-meta-content">content</code>
      attribute.</p></li>
 
      <li><p>Let <var title="">position</var> point at the first
      character of <var title="">input</var>.</p></li>
 
      <li><p><span>Skip whitespace</span>.</p></li>
 
      <li><p><span title="collect a sequence of characters">Collect a
      sequence of characters</span> that are not<!--neither--> <span
      title="space character">space characters</span><!-- nor a U+002C
      COMMA character (,)-->.</p></li>
 
      <li><p>Let the <span>pragma-set default language</span> be the
      string that resulted from the previous step.</p></li>
 
     </ol>
 
-    </div>
-
-    <p>For <code>meta</code> elements with an <code
-    title="attr-meta-http-equiv">http-equiv</code> attribute in the
-    <span title="attr-meta-http-equiv-content-language">Content
-    Language state</span>, the <code
-    title="attr-meta-content">content</code> attribute must have a
-    value consisting of a valid BCP 47 language code. <a
-    href="#refsBCP47">[BCP47]</a></p>
-
     <p class="note">This pragma is not exactly equivalent to the HTTP
-    <code>Content-Language</code> header, for instance it only
-    supports one language. <a href="#refsHTTP">[HTTP]</a></p>
+    <code>Content-Language</code> header. <a
+    href="#refsHTTP">[HTTP]</a></p>
 
    </dd>
 
    <dt><dfn title="attr-meta-http-equiv-content-type">Encoding declaration state</dfn> (<code title="">http-equiv="content-type"</code>)
 
    <dd>
 
     <p>The <span title="attr-meta-http-equiv-content-type">Encoding
     declaration state</span> is just an alternative form of setting
     the <code title="meta-charset">charset</code> attribute: it is a
     <span>character encoding declaration</span>. <span
     class="impl">This state's user agent requirements are all handled
     by the parsing section of the specification.</span></p>
 
     <p>For <code>meta</code> elements with an <code
     title="attr-meta-http-equiv">http-equiv</code> attribute in the
     <span title="attr-meta-http-equiv-content-type">Encoding
     declaration state</span>, the <code
     title="attr-meta-content">content</code> attribute must have a
     value that is an <span>ASCII case-insensitive</span> match for a
@@ -96030,46 +96017,40 @@ time:empty { binding: <i title="">time</
 
   <p>When the user actually <span title="obtain a physical
   form">obtains a physical form</span> (or a representation of a
   physical form) of a <code>Document</code>, the user agent is
   expected to create a new rendering of the <code>Document</code> for
   the print media.</p>
 
 
 
   </div>
 
 
 
   <h2 id="obsolete">Obsolete features</h2>
 
   <h3>Obsolete but conforming features</h3>
 
   <p>Features listed in this section will trigger warnings in
   conformance checkers.</p>
 
-  <p>Authors should not specify an <code
-  title="attr-meta-http-equiv">http-equiv</code> attribute in the
-  <span title="attr-meta-http-equiv-content-language">Content
-  Language</span> state on a <code>meta</code> element. The <code
-  title="attr-lang">lang</code> attribute should be used instead.</p>
-
   <p>Authors should not specify a <code
   title="attr-img-border">border</code> attribute on an
   <code>img</code> element. If the attribute is present, its value
   must be the string "<code title="">0</code>". CSS should be used
   instead.</p>
 
   <p>Authors should not specify a <code
   title="attr-script-language">language</code> attribute on a
   <code>script</code> element. If the attribute is present, its value
   must be an <span>ASCII case-insensitive</span> match for the string
   "<code title="">JavaScript</code>" and either the <code
   title="attr-script-type">type</code> attribute must be omitted or
   its value must be an <span>ASCII case-insensitive</span> match for
   the string "<code title="">text/javascript</code>". The attribute
   should be entirely omitted instead (with the value "<code
   title="">JavaScript</code>", it has no effect), or replaced with use
   of the <code title="attr-script-type">type</code> attribute.</p>
 
   <p>Authors should not specify the <code
   title="attr-a-name">name</code> attribute on <code>a</code>
@@ -96102,45 +96083,40 @@ time:empty { binding: <i title="">time</
   <h4>Warnings for obsolete but conforming features</h4>
 
   <p>To ease the transition from HTML4 Transitional documents to the
   language defined in <em>this</em> specification, and to discourage
   certain features that are only allowed in very few circumstances,
   conformance checkers are required to warn the user when the
   following features are used in a document. These are generally old
   obsolete features that have no effect, and are allowed only to
   distinguish between likely mistakes (regular conformance errors) and
   mere vestigial markup or unusual and discouraged practices (these
   warnings).</p>
 
   <p>The following features must be categorized as described
   above:</p>
 
   <ul><!-- downplayed list -->
 
    <li><p>The presence of an <span>obsolete permitted DOCTYPE</span>
    in an <span title="HTML documents">HTML document</span>.</p></li>
 
-   <li><p>The presence of a <code>meta</code> element with an <code
-   title="attr-meta-http-equiv">http-equiv</code> attribute in the
-   <span title="attr-meta-http-equiv-content-language">Content
-   Language</span> state.</p></li>
-
    <li><p>The presence of a <code
    title="attr-img-border">border</code> attribute on an
    <code>img</code> element if its value is the string "<code
    title="">0</code>".</p></li>
 
    <li><p>The presence of a <code
    title="attr-script-language">language</code> attribute on a
    <code>script</code> element if its value is an <span>ASCII
    case-insensitive</span> match for the string "<code
    title="">JavaScript</code>" and if there is no <code
    title="attr-script-type">type</code> attribute or there is and its
    value is an <span>ASCII case-insensitive</span> match for the
    string "<code title="">text/javascript</code>".</p></li>
 
    <li><p>The presence of a <code title="attr-a-name">name</code>
    attribute on an <code>a</code> element, if its value is not the
    empty string.</p></li>
 
    <li><p>The presence of a <code
    title="attr-table-summary">summary</code> attribute on a

===================================================================


IMPACT

POSITIVE EFFECTS
* Removes any remaining confusion about the appropriateness of the use of 
the Content-Language pragma.
* Saves authors time since it's one less thing to worry about.

NEGATIVE EFFECTS
* Will flag harmless uses of the pragma in legacy documents when they are 
updated. Data suggests this affects ~8% of pages [1], though ~5% of 
another sample were using the pragma incorrectly anyway [2].

CONFORMANCE CLASS CHANGES
Authors and conformance checkers are affected.

RISKS
This might cause wasted time for a small percentage of authors who are 
currently using the pragma in a harmless fashion and want to update their 
pages in a way that validates to HTML5.


REFERENCES
[1] http://philip.html5.org/data/meta-http-equiv.txt
[2] http://hsivonen.iki.fi/test/moz/analysis.txt


-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'
Received on Friday, 9 April 2010 00:01:23 UTC

This archive was generated by hypermail 2.3.1 : Monday, 29 September 2014 09:39:16 UTC