Вывод результатов проверки
После того, как команда nsgml отредактирована, и нажата клавиша Enter, PSGML разбивает экран пополам, чтобы создать новое окно для буфера под названием *sgml validation*. Вид команды, выполняющей проверку, отобразится в этом окне.
Если в окне минибуфера появится слово "done", то это означает, что программа проверки не нашла ошибок в тексте документа.
Если же ошибки все-таки обнаружены, то программа проверки перечислит их в окне буфера *sgml validation*. PSGML отсортирует сообщения и позволит быстро найти ошибки, обнаруженные в тексте. Рассмотрим пример. Добавим две ошибки к совершенно правильному тексту и посмотрим как будут выглядеть сообщения об ошибках.
Ниже приводится текст документа, который полность соответствует DocBook DTD, за исключением двух пунктов. Во-первых, в элемент emphasis помещен беспризорный открывающий тэг <sect1>, а во-вторых, в элемент <para> вставлен недопустимый атрибут hair со значением red:
<!DOCTYPE chapter PUBLIC "-//Davenport//DTD DocBook V2.4.1//EN"> <chapter> <title>Gone Whalin </title> <sect1> <title>The Carpet-Bag</title> <para>I stuffed a <emphasis>shirt<sect1></emphasis> or two into my old carpet-bag, <emphasis>tucked</emphasis> it under my arm, and <emphasis>started</emphasis> for Cape Horn and the Pacific.</para> <para hair=red>Quitting the good city of old Manhatto, I duly arrive in New Bedford.</para> <para>It was on a Saturday night in December.</para> |
Нажмите C-c C-v, чтобы отправить данный образец на проверку. Сообщения об ошибках будут выглядеть следующим образом:
nsgmls:whalin.sgm:6:43:E: document type does not allow element "SECT1" here nsgmls:whalin.sgm:6:54:E: "SECT1" not finished but containing element ended nsgmls:whalin.sgm:6:54:E: end tag for "SECT1" omitted, but OMITTAG NO was specified nsgmls:whalin.sgm:6:37: start tag was here nsgmls:whalin.sgm:9:15:E: there is no attribute "HAIR" nsgmls:whalin.sgm:11:57:E: end tag for "SECT1" omitted, but OMITTAG NO was specified nsgmls:whalin.sgm:4:1: start tag was here nsgmls:whalin.sgm:11:57:E: end tag for "CHAPTER" omitted, but OMITTAG NO was specified nsgmls:whalin.sgm:2:0: start tag was here |
Данные сообщения об ошибках дают два полезных урока, связанных с программированием вообще:
- Эффект ряби, когда одна ошибка тянет за собой целый шлейф сообщений об ошибках, может вызвать у неискушенных пользователей панику. Сохраняйте хладнокровие. Ведь в данный образец внесено только две ошибки. Возможно в следующий раз, когда в окне сообщений появится сообщение о восьми ошибках, на самом деле они будут вызваны только двумя ошибками.
- Emacs имеет специальную команду и быструю клавишу, которая осуществляет переход в ту строку текста, которая привела к сообщению об ошибке.
next-error (комбинация C-x ') - команда Emacs, осуществляющая переход в строку, где была обнаружена ошибка. Эта команда не является специфической командой PSGML. Она используется программистами для обнаружения строк в их исходном тексте программ, в которых компилятор нашел ошибки. По команде next-error курсор переходит в окно документа и перемещается в строку, содержащую ошибку. При этом в окне буфера сообщений об ошибках, *sgml validation*, соответствующее сообщение становится первым в списке (см. рис. Поиск ошибок в тексте с помощью команды .).
Поиск ошибок в тексте с помощью команды next-error.
Посторонний тэг sect1 стал причиной пяти сообщений об ошибках, а атрибут hair - только одной. Сообщение без буквенного кода кода после второго номера не является самостоятельным сообщением об ошибке, а несет в себе дополнительную информацию для предыдущей ошибки. Последовательно нажимая C-x ' можно отследить все "множественные" ошибки.
Если ошибок больше нет, и при этом нажать C-x ', то в окне минибуфера появится сообщение:
No_more_errors |