Re: headers attribute

2007-06-01 19:17:46 +0200 Anne van Kesteren <annevk@opera.com>:
> On Fri, 01 Jun 2007 02:22:03 +0200, Sander Tekelenburg <st@isoc.nl> wrote:
>> At 04:03 +0200 UTC, on 2007-05-31, Leif Halvard Silli wrote:

>>> (is it possible to use both scope and headers at the same time, btw?).
>> 
>> <http://webrepair.org/02strategy/03known%20systems.php> does.
> 
> Where is the processing model for that defined? HTML4 seems to suggest  that 
> scope= can be used instead of headers=, not in conjunction. 

Anne, you are right. But we are all wrong.

But first, Sander, he for instance has <td headers="thName" scope="row">. Perhaps that is how it interpreted «at the same time»? What I (and I think you as well) had in mind was: what if a particular datacell is in the scope of a headercell, but that datacell also contains its own HEADERS attribute? I am convinced that the UA then is required to choose: Either HEADERS or SCOPE. The logical thing would be that the info written directly in the HEADERS attribute overrules the info which SCOPE _also_ feeds to the same cell.

So, Anne, you are correct. But, take note: both SCOPE and HEADERS are _implied_ attributes. [1] And so: they are really always present. 

So, how can one remove just one of these attributes - HEADERS - without really removing the functionality of both? They work in tandem. The value of an implied HEADERS attribute will be the value that SCOPE provides for that particular cell. 

And when it is indicated (Bill Mason and others) that HEADERS may be used by those UAs which do not support SCOPE, then I think they describe a situation similar to the situation with those GUAs which do not make available/see the BODY element if <BODY> is not written directly in the code. In order to stay compatible with such dumb UAs, the author must simply type <BODY> direclty. Likewise, one must type the HEADERS attribute directly for those UAs which think it is not there, just because it has not been typed.

So, if an  UA does not support SCOPE I'd say it does not support HEADERS properly either. (HTML4 is clear about that authors should be able to choose attribute freely, «according to which is more convenient» [2]. This implies that agents have to support both attributes.)

 At any rate, if you write documents for users with UAs which do not understand SCOPE, then you can just forget about SCOPE entirely - the SCOPE value would not be used. But therefore, I also wonder about those UAs that **do** support SCOPE: wouldn't they also be hurt if we removed the (implied) HEADERS attribute? Suddenly they would not be able to associate the value provided by SCOPE with the implied HEADERS attribute. And if they, the AT UAs use the headers attribute for voice styling, that will also not work anymore.

HTML4 actually **says** 'the two attributes fulfill the same function'. [2] And HTML4 says SCOPE 'may be used in place of the headers'. But only about HEADERS does it suggest that it may be used 'conjunction with style sheets conjunction with style sheets'. [3] The note about the stylesheets (is one of the things which) implies that e.g. TD:headers{} should work **regardless** of whether the HEADERS attribute have been typed into a particular cell or not. Or to back it up from the spec it self:

About HEADERS [2]: 'For a given data cell, the headers attribute lists which cells provide pertinent header information. [...]' About SCOPE: 'For a given header cell, the scope attribute tells **the user agent** the data cells for which this header provides information. [...]' 

Note HTML4's wording about SCOPE, **'for the user agent'**. Conversly, the info you type directly into the HEADERS attribute, does not have to be interpreted. It goes directly to he user, so to speak, without any interpretation/calculation by the UA first. So, if we have this mini table, with one data cell without HEADERS and two header-cells for it,

 ---= empty cell =-- | <TH id=y scope=col>
 ----------------------------------------
 <THE id=x scope=row>| <TD> the data cell

then - **still** - the value of the implied HEADERS attribute would be ID x and y. Ie this example is the same as typing <td headers="x y">. 

This to me indicates that we are all wrong:
 * Perhaps it is necessary that one uses HEADERS in order to stay compatible with the existing AT UAs. But those UAs then, do not work according to the HTML4 specifications. They limit the HTML4 spesification severely. They eat up SCOPE! This is against the spesifications. An UA which claim to support HEADERS also understands SCOPE. 
 * But just as much does it not show particualr understanding for the intentions and design of HTML4 to sugggest removing HEADERS, as if HEADERS was separate from SCOPE.

[1] <http://www.w3.org/TR/html401/struct/tables.html#h-11.2.6>
[2] <http://www.w3.org/TR/html401/struct/tables.html#h-11.4.1>
[3] <http://www.w3.org/TR/html401/struct/tables.html#adef-headers>
-- 
leif halvard silli

Received on Saturday, 2 June 2007 01:59:42 UTC