W3C home > Mailing lists > Public > w3c-wai-ig@w3.org > July to September 2001

Re: w3c - Scope attribute in Table tag

From: Kynn Bartlett <kynn-edapta@idyllmtn.com>
Date: Thu, 12 Jul 2001 10:02:51 -0700
Message-Id: <4.2.0.58.20010712082819.00c9fc00@garth.idyllmtn.com>
To: "Brooke Dine" <dine@ncbi.nlm.nih.gov>
Cc: "w3cwai" <w3c-wai-ig@w3.org>
At 07:26 AM 7/12/2001 , Brooke Dine wrote:
>Yes, I'm just full of questions this week.  Thanks to everyone for the info on requirements/procedures.
>  
>Next question:  I'm attempting to figure out the proper method of tagging for tables.  In the past I had used <th> and <td> with "header" and "id" as per W3C.  However, the 508 requirements from the Access Board say to just use the scope attribute.  What do you all think?  Which is better for data tables? and layout tables?  Which readers pick up the scope tag?  

Tables are always hard to figure out.  I can tell you what I think 
should be done, but of course, I am not the Access Board so I can't
give you an answer on "what 508 requires".  Here goes:

Layout tables and data tables use the same markup, but do different
things.  They need to be be treated differently as far as attributes. 
And "simple" data tables should be distinguished from "complex" data
tables.  Here is my summary list of suggestions for tables:

LAYOUT TABLES:

1.  Indicate layout tables with a human-readable @summary attribute
     reading something like "Page Layout."

2.  Only use <td> elements for layout.  Do not use <th>, or any other
     elements such as <thead>, <tbody>, <caption>, etc.

3.  Do not use @headers, @scope, or @axis on layout tables.

4.  Test your layout to make sure that it makes sense when read in
     linear order -- the order in which it appears in the source code,
     usually.  (Change all <td> and <table> tags to <div> to test.)

5.  Use CSS and/or HTML @align and @valign attributes to make your
     page layouts align properly.  This probably won't break anything.

6.  Don't use a @title element on your layout table, or on any
     cells of your layout table.  This will cause unwanted tooltips.

7.  OPTIONAL:  Consider creative use of @colspan and @rowspan, and/or
     nested tables, in order to make your layout work linearly as well
     as graphically.

DATA TABLES:

1.  Use the @summary attribute to list the data represented; don't
     just name it.  Don't say, "Listings of television shows on
     tonight," instead say "On channel 2, the news from 8 to 10. On
     channel 3, the movie 'Jaws' from 7:30 to 11:00. ..."

2.  Note!  It will get tedious to do the above, and probably won't
     all fit nicely in one attribute.  Therefore, if your summary is
     going to be more than about 200 characters (as it probably 
     will be), you should provide a link OUTSIDE of the table
     reading something like "Text summary of table" which goes to
     a page with a long summary.  Then make the @summary attribute
     read, "Listings of television shows on tonight: Summary link 
     follows table."

3.  Use <th> tags for a header -- and a header is anything where
     the content of the <th> applies to everything else in the same
     row or column.  For example:  I have a matrix that lists 
     availability of various products in various stores.  Across
     horizontally on the first row, I list my products, one per
     column.  Going down, I list my store locations, one per row,
     and the rest of the row is the intersection of the product and
     the store data.  The cells with the product identifiers, and
     the cells with the store identifiers, should both be <th>
     elements.

4.  Use CSS and/or HTML @align tags to style your <th> headers if 
     you don't like the default appearance.  This won't break anything.

5.  If you're creating a large table, consider using <thead>,
     <tfoot>, <tbody>, <colgroup>, and <col>.  The purpose of these
     elements and attributes is to allow you to group together
     rows or columns and give them a special designation.  This can
     be useful for styling, scrolling, or printing, but is usually
     going to be overkill on any table with less than 50 cells.

6.  Consider using abbreviations for your headers.  There are
     two issues here, and I'll try to untangle them for you.  If
     you want to display a short header which logically means
     something larger -- such as using "PID" instead of "Product
     Identification" -- then you will use the <abbr> tag within
     the <th> to offer up the longer expansion.  If you want
     to display a long header, such as "Store Located in Temecula,
     California", you should consider using an @abbr attribute
     on the <th> tag, with a value such as "Temecula."

7.  Use a <caption> attribute to label your table if the content
     requires it.  Don't use @title to label your data table.

IDENTIFYING SIMPLE DATA TABLES:

The "rules" are different -- or at least, lots of stuff is unnecessary --
if you are dealing with a "simple" table vs. a complex one.

1.  If you use @colspan or @rowspan, your table is not simple.

2.  If you have "nested headers", then your table is not simple. 
     Nested headers means that more than one row header or more than
     one column header applies to the same content.  Let's look
     at the product-store matrix -- if the first row, before the
     listing of stores, were a row with headers reading "Product
     Type", and under that, the specific product.  Two column
     headers ("Product Type" and the name of the product) would apply
     to each cell.

3.  If you've got headers which are not on the far edges of your
     table -- on the top, the bottom, the left, or the right -- then
     you don't have a simple table.  For example, if row one is a
     list of headers representing "data prior to 1994" and row
     fifteen is a list of headers representing "after 1994", and
     it splits your table in two, because you've got different
     headers going across.

4.  As the most simple check, each cell should be in a row with
     only one row header in it, and in a column with only one
     column header it, and both of those should be applicable headers 
     to the cell.  If this is not the case, then you don't have a
     simple table.  For example:  more than one row header, more
     than one column header, a column or row header which doesn't
     apply (see #3).

SIMPLE DATA TABLES:

1.  Don't use @scope, @headers, or @axis attributes on your simple
     table cells.

COMPLEX DATA TABLES:

1.  Decide how you are going to associate data cells with headers.
     There are three approaches:  @headers, @scope, and @axis.
     They are not incompatible with each other, so you can get
     pretty complex.

2.  @scope assumes that you can designate a header as applying to
     "everything in this row" or "everything in this column", or
     even "everything in this group of rows or columns," where
     the row, column, colgroup, or rowgroup is the one containing
     the header cell.  This is how simple tables work, but it may
     need to be spelled out for complex tables.  @scope is an
     attribute set on the header cell, not on the data cells.
     (You may need to use <tbody>, <colgroup>, and <col> to
     designate groups of rows or columns.)

3.  @headers takes the opposite approach -- it assumes that you
     may not be able to easily a header as applying to to whole 
     rows, columns, or groups thereof.  You designate the relationship
     on the data cells themselves, not on the header cells.  The
     header cells simply need an @id attribute to be set.  More
     than one header can be applied to each cell; you just give
     a list of header ids separated by spaces.

4.  @axis gets even stranger.  @axis lets you associate together
     cells, groups cells associated by @headers, and groups of cells 
     associated by @scope.  You set the @axis attribute on a cell, 
     and that cell is part of the axis defined by that value.  If
     the cell has a @scope attribute set, the cells within that
     scope are part of the axis.  If a cell with an @axis has an 
     @id, then any other cells which list the id in their @headers
     attributes are part of the @axis.  In theory, this lets a
     browser "query" a table and return information.  In practice,
     I don't know of any browsers which do that, and in general,
     if you are at this level of complexity then you perhaps should
     offer your content in alternate formats, or perhaps in multiple
     tables.


Hope this helps.

I've also put this summary up on http://access.idyllmtn.com/tables/

--Kynn

--
Kynn Bartlett <kynn@reef.com>
Technical Developer Liaison
Reef North America
Accessibility - W3C - Integrator Network
Tel +1 949-567-7006
________________________________________
BUSINESS IS DYNAMIC. TAKE CONTROL.
________________________________________
http://www.reef.com
Received on Thursday, 12 July 2001 13:07:20 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 19 July 2011 18:13:55 GMT