Ошибки, которые рассматривались до сих пор, найти и отсортировать достаточно легко. Процесс проверки затрудняется, когда программа вводит разработчика в заблуждение либо выдает странный и непонятный отчет. В этом разделе представлены пример программы и отчет об ошибках, который на первый взгляд лишен смысла.
Пример. Исходный документ, показанный в листинге 8.2, похож на разработку календаря, описанную в главе 5. Здесь содержатся три специфические ошибки, которые должна обнаружить программа проверки.
Листинг 8.2. Программа calendar.html
<html> <head>
<title>September 2000</title>
<meta name="author" content="Ann Navarro
</head>
<body>
<table border="l">
<captionxb>September 2 000</bx/caption>
Рис. 8.10. Продолжение списка ошибок, обнаруженных программой проверки
<tr align="center" valign="top" bgcolor="#99FFFF">
<th width="100">Sunday</th>
<th width="100">Monday</th>
<th width="100">Tuesday</th>
<th width="100">Wednesday</th>
<th width="100">Thursday</th>
<th width="100">Friday</th>
<th width="100">Saturday</th>
</tr>
<tr align="left" valign="top">
<td colspan="5" bgcolor="#CCCCCC" height="50"> </td> <td width="100" height="100">l</td> <td width="100" height="100">2</td> </tr>
<tr align="left" valign="top"> <td width="100" height="100">3</td> <td width="100" height="100">4</td> <td width="100" height="100">5</td>
<td width="100" height="100">6</td>
<td width="100" height="100">7</td>
<td width="100" height="100">8</td>
<td width="100" height="100">9</td>
</tr>
<tr align="left" valign="top">
<td width="100" height="100">10</td>
<td width="100" height="100">ll</td>
<td width="100" height="100">12</td>
<td width="100" height="100">13</td>
<td width="100" height="100">14</td>
<td width="100" height="100">15</td>
<td width="100" height="100">16</td>
</tr>
<tr align="left" valign="top">
<td width="100" height="100">17</td>
<td width="100" height="100">18</td>
<td width="100" height="100">19</td>
<td width="100" height="100">20</td>
<td width="100" height="100">21</td>
<td width="100" height="100">22</td>
<td width="100" height="100">23</td>
<tr align="left" valign="top">
<td width="100" height="100">24</td>
<td width="100" height="100">25</td>
<td width="100" height="100">26</td>
<td width="100" height="100">27</td>
<td width="100" height="100">28</td>
<td width="100" height="100">29</td>
<td width="100" height="100">30</td>
</tr> </table> </body> </html>
Изображение, полученное при просмотре файла с этим примером в Web-браузере Netscape Navigator 4.72 (рис. 8.11), должно подсказать разработчику, что исходный код содержит ошибки.
Результат выполнения программы проверки представлен на рис. 8.12. Проблема, которая сразу бросается в глаза, состоит в том, что тип документа обозначен как HTML 4.0 Transitional, а не XHTML. Причина названа в первом элементе списка ошибок: отсутствие определения типа создаваемого документа. Чтобы указать тип, необходимо добавить запись:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtmll-transitional.dtd">
Прежде чем вернуться к программе проверки, обратите внимание на две ошибки, указанные в списке. Сообщение об одной из них выглядит несколько странно: «literal is missing closing delimiter (отсутствует символьная константа в разделителе). При этом курсор редактирования указывает на имя автора документа в тэге met а. Далее говорится, что элемент caption находится там, где ему быть запрещено. На этом основании делается вывод о пропуске открывающего тэга table.
Обратимся к исходному коду, заключенному между двумя названными элементами:
<head>
<title>September 2000</title>
<meta name="author" content="Ann Navarro
</head>
<body>
<p>
<table border="l">
<captionxb>September 2 000</bx/caption>
Открывающий дескриптор table находится на своем месте. Следовательно, ошибается программа проверки. Если вы обратитесь к записи о предыдущей ошибке - literal is missing closing delimiter», то, вероятно, поймете, почему это произошло.
В атрибуте content тэга met а отсутствует закрывающая кавычка, которая и является упомянутой литеральной константой. Кроме того, существует еще одна проблема: отсутствует закрывающая скобка для самого тэга met а. Проверкой был обнаружен атрибут content в тэге met а, а также кавычки, указывающие на начало записи значения атрибута. Поиск закрывающей кавычки для значения атрибута продолжался до тех пор, пока такой символ не был обнаружен внутри тэга table - им стал атрибут border. Это программа расценила как окончание записи для атрибута content тэга met а, а следующим по порядку тэгом стал элемент caption. В результате появилось сообщение о том, что тэг table пропущен.
Таким образом, программа проверки проигнорировала данные, помещенные между настоящим завершением записи между тэгом meta и элементом content, поскольку продолжала обработку значения атрибута. Если вы закроете тэг meta, ошибка исчезнет.
Запустите еще раз проверку исходного файла и вновь обратитесь к отчету об ошибках (рис. 8.13).
На этот раз вы увидите, что единственная ошибка состоит в пропуске тэга < /1г>. Добавьте его и вновь обратитесь к проверке. По ее окончании вы получите долгожданное сообщение: «no errors!».
Резюме
В этой главе вы познакомились с процедурами проверки грамматики XHTML-документов, которые выполняет служба поиска ошибок, и научились пользоваться популярным и надежным сервисом, поддерживаемым W3C. Далее рассматриваются вопросы реализации языка XHTML на современных Web-сайтах, рассказывается о проблемах обновления существующих сайтов, совместимости с ранними версиями браузеров, а также о подборе инструментария, поддерживающего язык XHTML.
Опубликовал vovan666
April 08 2013 14:56:13 ·
0 Комментариев ·
3329 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.