![]() |
||
|
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). <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 августа, устройство вывода должно знать, какие табличные ячейки относятся к еде ("Meals") (все из них), и какие относятся к дате ("Dates") (в частности, 25 августа), и найти пересечение этих двух наборов. Для размещения такого типа запросов табличная модель HTML 4 позволяет авторам помещать заголовки и данные ячеек по категориям. Например, для таблицы расходов на поездку автор может сгруппировать ячейки заголовков "San Jose" и "Seattle" в категорию "Location", заголовки "Meals", "Hotels" и "Transport" в категорию "Expenses", а четыре дня в категорию "Date". Предыдущие три вопроса будут следовательно иметь следующие значения:
Авторы распределяют по категориям ячейку с заголовком или данными, устанавливая атрибут 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, устройства вывода могут конструировать информацию заголовков в соответствии со следующим алгоритмом. Цель алгоритма – найти упорядоченный список заголовков. (В следующем описании алгоритма, направление в таблице допускается слева направо.)
|