- From: Leif Halvard Silli <lhs@malform.no>
- Date: Tue, 23 Sep 2008 14:35:02 +0200
- To: Laura Carlson <laura.lee.carlson@gmail.com>
- CC: joshue.oconnor@cfit.ie, James Craig <jcraig@apple.com>, Al Gilman <alfred.s.gilman@ieee.org>, Chris Wilson <Chris.Wilson@microsoft.com>, W3C WAI-XTECH <wai-xtech@w3.org>, public-html@w3.org, Gez Lemon <gez.lemon@gmail.com>
Laura Carlson 2008-09-23 10.52: > A comment in the HTML 4 specification DTD fragment for td and th[1] > was clear that if a cell was both a header and contained data, then > authors should use td: > > <!-- TH is for headers, TD for data, but for cells acting as both use TD --> > > This is also clarified in the section on associating header > information with data cells [3]: > > "Note that it's not always possible to make a clean division of cells > into headers or data. You should use the TD element for such cells > together with the id or scope attributes as appropriate." > > I've always believed it was a mistake that the headers attribute is > allowed on th element in HTML 4, as requiring a header must mean the > cell contains data. This comment about that "mistake" of HTML 4 puzzled me. But I see how you are reasoning: Because the cell has another cell as its header, you are judging that the cell has to be a data cell. But I have to express deep concern over this understanding. As you know, I agree with you about the need for being able to reference TD cells in the headers attribute. However, the view that any TH cell which also has the @headers attribute, ought to have been a TD cell, would really maximise that need, if I can put it that way. (In such system, there could in fact not be more than one TH per row and one TH per column.) HTML 4 must here be read together with its @headers-incorporating algorithm for locating heading information for individual cells. If the algorithm finds a TD cell after a TH cell, then the algoritm stops. So, if you have a TH cell on the 5th row, there would be no method for incorporating the TH cell on the 1st row in the list of header cells, unless - for the 5th row cell - you were allowed to write <th headers=ID-of-Firstrow-Cell>heading</th>. The @headers-incorparating algorithm of HTML 4 also means that if the TH cell appears on the 2nd, then the TH on the 1st row would be a header of TH on the 2nd row header. According to your logic, then, this would have to be yet another mistake of HTML 4: that TH on the 2nd row really ought to have been a TD as well. It is in the HTML 4 @headers-incorporating algorithm that such combined header/data cells can be labeled with the category attribute: @axis. Then they can stay as TD cells - yet still be treated as TH cells (and thus be automatically included) in the @headers-incorporating algorithm. Meaning that you often would not need to use @headers to reference that <td axis=1stcategory> cell, except in "edge" case. (And those edge cases would increase even more as long as @axis is not included in the logic of it all.) Clearly this was no mistake of HTML 4. If fact, if one says that @headers on the TH cell was a "mistake", then one is also saying that the entire @headers-incorparating algorithm of HTML 4 was a mistake as well. Such a view would, in practise, also be a strong vote for @scope as the preferred method. The problem with HTML 5, as it now stands, is this: We are discussing a @headers which is hanging in the air. @headers without the @headers-incorporating algorithm really is something else than what @headers in HTML 4 is. The question of whether @headers should be allowed to reference TD-s really is wholly other question as long as @axis is not part of the picture! In my view, defending @headers without understanding and defending - possibly developing - the @headers-incorporating algorithm of HTML 4, is like cutting the branch one is sitting on. It is the straight way to @he** - uh - @scope. In a way, as long as HTML 5 does not include @axis, it is simply logical to say that one should use TH cells for those cells. Why? Well look at this simplfied table: <tr><th id=a> head 1 </th><th >head 2</th> <tr><td id=b> axis 1 </td><td axis=1>axis 2</td> <tr><td headers="a b">data 1</th><td >data 3</td> <tr><td headers="a b">data 2</th><td >data 4</td> In the first column, I do not use @axis. Then I must repeat the @headers info in each TD cell in order to be able to references it and because @headers trumphs @scope. This nullify the assumed advantage of @scope. In the second column, I added @axis instead and get a much more simple and less error prone result, which is covered by the @headers-incorporating algorithm. In order to get the same kind of simplicity *without* @axis, it would be logical to use TH - whether or not one goes for @scope or @headers! In summary: without @axis and without the @headers-incorporating algorithm of HTML 4, I really am in doubt about what to do with the need to reference TD cells with @headers. -- leif halvard silli
Received on Tuesday, 23 September 2008 12:35:54 UTC