ИНФОРМАЦИЯ,    ДИЗАЙН,    ПЕРЕВОДЫ,    РЕКЛАМА   .   .   .
w a p - с а й т
Информационный портал
Сегодня:  
admin@aranea.ru
+79068922256

  aranea.ru || Спецификация HTML 4.01 | 11. Таблицы

11. Таблицы

11.4. Представление таблицы не визуальными устройствами вывода

11.4.1. Связь информации заголовков с ячейками данных
11.4.2. Категоризация ячеек
11.4.3. Алгоритм для обнаружения информации заголовков

11.4.1 Связь информации заголовков с ячейками данных

Не визуальные устройства вывода, такие как речевые синтезаторы и устройства брайля, могут использовать атрибуты элементов TD и TH для вывода содержания ячеек таблицы с большей интуицией:

  • Для ячейки данных, атрибут headers дает список, в котором ячейки предоставляют подходящую информацию заголовков. Для этой цели, каждая ячейка заголовка должна иметь атрибут id со своим именем. Обратите внимание, что не всегда возможно четко разделить ячейки для заголовков и данных. Вам следует использовать элемент TD для таких ячеек вместе с атрибутами id или scope, что будет необходимо.
  • Для данной ячейки заголовка, атрибут scope сообщает устройству вывода ячейки данных, для которых этот заголовок предоставляет информацию. Авторы могут выбрать использование этого атрибута вместе headers, что более удобно; оба атрибута выполняют одинаковую функцию. Атрибут headers обычно нужен тогда, когда заголовки размещаются в нерегулярных позициях с учетом данных, к которым они применяются.
  • Атрибут abbr определяет сокращенный заголовок для ячеек заголовков, так что устройство вывода может выводить информацию заголовка быстрее.

В следующем примере мы присваиваем информацию заголовка для ячеек, устанавливая атрибут headers. Каждая ячейка в своей колонке ссылается к одной и той же ячейке заголовка (через атрибут id).

<TABLE border="1" 
       summary="This table charts the number of cups
                of coffee consumed by each senator, the type 
                of coffee (decaf or regular), and whether 
                taken with sugar.">
<CAPTION>Cups of coffee consumed by each senator</CAPTION>
<TR>
   <TH id="t1">Name</TH>
   <TH id="t2">Cups</TH>
   <TH id="t3" abbr="Type">Type of Coffee</TH>
   <TH id="t4">Sugar? </TH>
<TR>
   <TD headers="t1">T. Sexton</TD>
   <TD headers="t2">10</TD>
   <TD headers="t3">Espresso</TD>
   <TD headers="t4">No</TD>
<TR>
   <TD headers="t1">J. Dinnen</TD>
   <TD headers="t2">5</TD>
   <TD headers="t3">Decaf</TD>
   <TD headers="t4">Yes</TD>
</TABLE>

Синтезатор речи может выводить эту таблицу следующим образом:

Caption: Cups of coffee consumed by each senator
Summary: This table charts the number of cups
         of coffee consumed by each senator, the type 
         of coffee (decaf or regular), and whether 
         taken with sugar.
Name: T. Sexton,   Cups: 10,   Type: Espresso,   Sugar: No
Name: J. Dinnen,   Cups: 5,    Type: Decaf,      Sugar: Yes

Обратите внимание на то, как заголовок "Type of Coffee" сокращается до "Type" с помощью атрибута abbr.

Ниже приводится такой же пример, заменяющий атрибут headers на атрибут scope. Обратите внимание, что значение "col" атрибута scope означает "все ячейки в текущей колонке":

<TABLE border="1" 
       summary="This table charts the number of cups
                of coffee consumed by each senator, the type 
                of coffee (decaf or regular), and whether 
                taken with sugar.">
<CAPTION>Cups of coffee consumed by each senator</CAPTION>
<TR>
   <TH scope="col">Name</TH>
   <TH scope="col">Cups</TH>
   <TH scope="col" abbr="Type">Type of Coffee</TH>
   <TH scope="col">Sugar? </TH>
<TR>
   <TD>T. Sexton</TD>
   <TD>10</TD>
   <TD>Espresso</TD>
   <TD>No</TD>
<TR>
   <TD>J. Dinnen</TD>
   <TD>5</TD>
   <TD>Decaf</TD>
   <TD>Yes</TD>
</TABLE>

Другой пример, более сложный, иллюстрирует другие значения атрибута scope:

<TABLE border="1" cellpadding="5" cellspacing="2"
  summary="History courses offered in the community of
           Bath arranged by course name, tutor, summary, 
           code, and fee">
  <TR>
    <TH colspan="5" scope="colgroup">Community Courses -- Bath Autumn 1997</TH>
  </TR>
  <TR>
    <TH scope="col" abbr="Name">Course Name</TH>
    <TH scope="col" abbr="Tutor">Course Tutor</TH>
    <TH scope="col">Summary</TH>
    <TH scope="col">Code</TH>
    <TH scope="col">Fee</TH>
  </TR>
  <TR>
    <TD scope="row">After the Civil War</TD>
    <TD>Dr. John Wroughton</TD>
    <TD>
       The course will examine the turbulent years in England
       after 1646. <EM>6 weekly meetings starting Monday 13th
      October. </EM>
    </TD>
    <TD>H27</TD>
    <TD>£32</TD>
  </TR>
  <TR>
    <TD scope="row">An Introduction to Anglo-Saxon England</TD>
    <TD>Mark Cottle</TD>
    <TD>
       One day course introducing the early medieval
       period reconstruction the Anglo-Saxons and
       their society. <EM>Saturday 18th October. </EM>
    </TD>
    <TD>H28</TD>
    <TD>£18</TD>
  </TR>
  <TR>
    <TD scope="row">The Glory that was Greece</TD>
    <TD>Valerie Lorenz</TD>
    <TD>
     Birthplace of democracy, philosophy, heartland of theater, home of
     argument. The Romans may have done it but the Greeks did it
     first. <EM>Saturday day school 25th October 1997</EM>
    </TD>
    <TD>H30</TD>
    <TD>£18</TD>
  </TR>
</TABLE>

Графическое устройство вывода может вывести следующее:

Обратите внимание на использование атрибута scope со значением "row". Хотя первая ячейка в каждом ряду содержит данные, а не информацию заголовков, атрибут scope делает поведение ячейки данных подобно ячейки заголовка ряда. Это позволяет речевым синтезаторам предоставить название соответствующего курса или объявить его немедленно перед содержанием каждой ячейки.

11.4.2 Категоризация ячеек

Пользователи, просматривающие таблицу с помощью устройства вывода, основанного на воспроизведении речи, может захотеть услышать объяснение содержания ячейки дополнительно к самому содержанию. Один способ, когда пользователь мог бы получить объяснение, - это проговаривание информации связанного заголовка перед воспроизведением содержания ячейки (смотрите раздел по информации связанного заголовка с ячейками данных).

Пользователи могут также захотеть получить информацию больше, чем об одной ячейке, в том случае, когда информация заголовка, предоставленная на уровне ячейки (с помощью headers, scope и abbr), не может дать адекватный контекст. Рассмотрите следующую таблицу, которая распределяет расходы за питание, гостиницы и транспорт в двух городах (San Jose и Seattle) на несколько дней:

Пользователь может захотеть извлечь информацию из таблицы в форме запросов:

  • "Сколько я потратил на еду в итоге?"
  • "Сколько я потратил на еду 25 августа?"
  • "Сколько я потратил в Сан-Хосе в итоге?"

Каждый запрос привлекает расчет устройством вывода, которое включает ноль и больше ячеек. Для определения, например, стоимости питания за 25 августа, устройство вывода должно знать, какие табличные ячейки относятся к еде ("Meals") (все из них), и какие относятся к дате ("Dates") (в частности, 25 августа), и найти пересечение этих двух наборов.

Для размещения такого типа запросов табличная модель HTML 4 позволяет авторам помещать заголовки и данные ячеек по категориям. Например, для таблицы расходов на поездку автор может сгруппировать ячейки заголовков "San Jose" и "Seattle" в категорию "Location", заголовки "Meals", "Hotels" и "Transport" в категорию "Expenses", а четыре дня в категорию "Date". Предыдущие три вопроса будут следовательно иметь следующие значения:

  • "Сколько я потратил на питание в итоге?" означает "Сколько всего ячеек данных в категории "Expenses=Meals"?
  • "Сколько я потратил на питание 25 августа?" означает "Сколько всего ячеек данных в категориях "Expenses=Meals" и "Date=Aug-25-1997"?
  • "Сколько я потратил в Сан-Хосе в итоге?" означает "Сколько всего ячеек данных в категориях "Expenses=Meals, Hotels, Transport" и "Location=San Jose"?

Авторы распределяют по категориям ячейку с заголовком или данными, устанавливая атрибут axis для ячейки. Например, в таблице расходов на поездку ячейка, содержащая информацию "San Jose", может разместиться в категорию "Location" следующим образом:

  <TH id="a6" axis="location">San Jose</TH>

Любая ячейка, содержащая информацию, связанную с "San Jose", должна ссылаться на эту ячейку заголовка через атрибут headers или scope. Таким образом, расходы на питание 25 августа 1997 года должны быть помечены ссылкой на атрибут id (чье значение - "a6") ячейки заголовка "San Jose":

  
  <TD headers="a6">37.74</TD>

Каждый атрибут headers предоставляет список ссылок на id. Авторы могут распределять по категориям данную клетку любым количеством способов (или вместе с любым количеством "заголовков" ("headers")).

Ниже мы размечаем таблицу расходов на поездку с информацией о категориях:

<TABLE border="1"
          summary="This table summarizes travel expenses
                   incurred during August trips to
                   San Jose and Seattle">
<CAPTION>
  Travel Expense Report
</CAPTION>
<TR>
  <TH></TH>
  <TH id="a2" axis="expenses">Meals</TH>
  <TH id="a3" axis="expenses">Hotels</TH>
  <TH id="a4" axis="expenses">Transport</TH>
  <TD>subtotals</TD>
</TR>
<TR>
  <TH id="a6" axis="location">San Jose</TH>
  <TH></TH>
  <TH></TH>
  <TH></TH>
  <TD></TD>
</TR>
<TR>
  <TD id="a7" axis="date">25-Aug-97</TD>
  <TD headers="a6 a7 a2">37.74</TD>
  <TD headers="a6 a7 a3">112.00</TD>
  <TD headers="a6 a7 a4">45.00</TD>
  <TD></TD>
</TR>
<TR>
  <TD id="a8" axis="date">26-Aug-97</TD>
  <TD headers="a6 a8 a2">27.28</TD>
  <TD headers="a6 a8 a3">112.00</TD>
  <TD headers="a6 a8 a4">45.00</TD>
  <TD></TD>
</TR>
<TR>
  <TD>subtotals</TD>
  <TD>65.02</TD>
  <TD>224.00</TD>
  <TD>90.00</TD>
  <TD>379.02</TD>
</TR>
<TR>
  <TH id="a10" axis="location">Seattle</TH>
  <TH></TH>
  <TH></TH>
  <TH></TH>
  <TD></TD>
</TR>
<TR>
  <TD id="a11" axis="date">27-Aug-97</TD>
  <TD headers="a10 a11 a2">96.25</TD>
  <TD headers="a10 a11 a3">109.00</TD>
  <TD headers="a10 a11 a4">36.00</TD>
  <TD></TD>
</TR>
<TR>
  <TD id="a12" axis="date">28-Aug-97</TD>
  <TD headers="a10 a12 a2">35.00</TD>
  <TD headers="a10 a12 a3">109.00</TD>
  <TD headers="a10 a12 a4">36.00</TD>
  <TD></TD>
</TR>
<TR>
  <TD>subtotals</TD>
  <TD>131.25</TD>
  <TD>218.00</TD>
  <TD>72.00</TD>
  <TD>421.25</TD>
</TR>
<TR>
  <TH>Totals</TH>
  <TD>196.27</TD>
  <TD>442.00</TD>
  <TD>162.00</TD>
  <TD>800.27</TD>
</TR>
</TABLE>

Обратите внимание, что разметка таблицы таким образом позволяет устройствам вывода избежать запутывания пользователя с не желаемой информацией. Например, если речевой синтезатор проговаривал бы все цифры в колонке "Meals" этой таблицы в ответ на запрос "Сколько я потратил на питание в итоге?", то пользователь не смог бы различить расходы в день из промежуточного или полного итога. С помощью осторожного распределения по категориям данных ячейки, авторы позволяют устройствам вывода делать важные семантические различия, когда выводят таблицу.

Конечно, нет ограничения, как авторы могут распределить информацию по категориям в таблице. В таблице расходов в поездке, например, мы могли бы добавить дополнительные категории "промежуточные итоги" ("subtotals") и "итоги" ("totals").

Эта спецификация не требует, чтобы устройства вывода манипулировали информацией, предоставленной атрибутом axis, и не предоставляет какие-либо рекомендации о том, как устройства вывода могут представлять информацию axis пользователю, или как пользователи могут запросить устройство вывода об этой информации.

Однако, устройства вывода, в частности синтезаторы речи, могут захотеть вынести за скобки информацию, обычную для нескольких ячеек, которые являются результатом запроса. Например, если пользователь запросил "Сколько я потратил на питание в Сан-Хосе?", то устройство вывода сначала установит ячейки, пригодные для вопроса (25 августа 1997: 37.74, 26 августа 1997:27.28), и затем выведет эту информацию. Устройство вывода, проговаривающее эту информацию, может прочитать следующее:

   Location: San Jose. Date: 25-Aug-1997. Expenses, Meals: 37.74
   Location: San Jose. Date: 26-Aug-1997. Expenses, Meals: 27.28

или более компактно:

   San Jose, 25-Aug-1997, Meals: 37.74
   San Jose, 26-Aug-1997, Meals: 27.28

Даже более экономное представление будет преобразовывать обычную информацию и переорганизует ее:

   San Jose, Meals, 25-Aug-1997: 37.74
                    26-Aug-1997: 27.28

Устройства вывода, которые поддерживают этот тип вывода, должны снабжать устройства вывода средствами для подгонки представления (например, через стилевую таблицу).

11.4.3 Алгоритм для обнаружения информации заголовков

При отсутствии информации заголовков либо от атрибута scope, либо от headers, устройства вывода могут конструировать информацию заголовков в соответствии со следующим алгоритмом. Цель алгоритма – найти упорядоченный список заголовков. (В следующем описании алгоритма, направление в таблице допускается слева направо.)

  • Во-первых, осуществляется поиск влево от положения ячейки для нахождения заголовочных ячеек ряда. Затем осуществляется поиск вверх для обнаружения ячеек заголовков колонки. Поиск в данном направлении останавливается тогда, когда достигается край таблицы, или когда обнаружена ячейка данных после заголовочной ячейки.
  • Заголовки рядов вставляются в список в порядке, в котором они появляются в таблице. Для таблиц с направлением слева направо заголовки вставляются слева направо.
  • Заголовки колонок вставляются после заголовков рядов в порядке, в котором они появляются в таблице сверху вниз.
  • Если ячейка заголовка имеет установленный атрибут headers, то заголовки, на которые ссылается этот атрибут, вставляются в список, и поиск останавливается для текущего направления.
  • Ячейки TD, которые устанавливают атрибут axis, тоже обрабатываются как ячейки заголовков.

← Назад | Вперед →
Copyright © 2006 -  aranea.ru