Проблемы синтаксического анализа HTML-документов
Бесплатный доступ
В данной статье рассмотрены некоторые проблемы, с которыми может столкнуться разработчик при реализации синтаксического анализатора для HTML-документов.
Синтаксический анализ, синтаксический анализатор, браузер
Короткий адрес: https://sciup.org/140286904
IDR: 140286904
Текст научной статьи Проблемы синтаксического анализа HTML-документов
В области разработки программного обеспечения перед специалистами часто возникает задача разбора HTML-документов, будь то извлечение некоторого фрагмента текста или обработка целого документа. Существует большое количество готовых решений от различных производителей программного обеспечения, как коммерческих, так и свободно распространяемых, написанных на разных языках программирования для различных платформ [1]. Однако, зачастую программисты вынуждены отказываться от использования сторонних библиотек из-за различных причин. Например, разрабатываемое приложение может использовать лишь небольшую часть функциональности, тогда как ресурсы для использования библиотеки будут выделяться в полном объеме. Кроме того, нередка ситуация, когда возможностей сторонней библиотеки, наоборот, не хватает для выполнения поставленных перед разработчиком задач. В этом случае программист вынужден реализовать необходимые компоненты самостоятельно.
Основные проблемы синтаксического разбора HTML разметки связаны с так называемым «нестрогим» синтаксисом. В связи с ростом популярности как web сегмента разработки, так всего Интернета в целом, браузерам приходилось подстраиваться скорее под пользователей и разработчиков, чем под стандарт языка. Таким образом, несмотря на существование формального описания языка HTML, где есть четкие правила написания тех или иных фрагментов разметки, современные браузеры постараются исправить ошибки разработчика, нежели выведут сообщение об ошибке (по смыслу схожую с ошибкой компиляции в языках программирования) вместо запрашиваемой страницы.
Ниже рассмотрены некоторые распространенные ошибки, которые должен уметь обрабатывать синтаксический анализатор.
Одной из самых распространённых ошибок является ситуация, когда границы двух тегов перепутаны местами. На рисунке 1 представлен фрагмент кода HTML-документа c ошибкой:
Рисунок 1 - Ошибка: перепутанные теги
Кроме того, нередко встречается ситуация, когда потерян закрывающий тег (рис. 2):
flqeiiKa | flqeiiKa | fl4eiiKa | flqeiiKa |
Рисунок 2 - Ошибка: отсутствует закрывающий тег
По стандарту HTML5 не допускается вложение блочного тега внутрь строчного, однако разработчики часто пренебрегают этим правилом (рис. 3):
Рисунок 3 - Ошибка: блочный тег внутри строчного
Синтаксический анализатор должен уметь обрабатывать атрибуты. Кроме обычных кавычек «”» в документах встречаются и одинарные «’». Кроме того, кавычки могут отсутствовать вовсе. На рисунке 4 изображен тег, иллюстрирующий эти ситуации:
Рисунок 4 - Ошибка: отсутствуют кавычки у аргумента
HTML-документ не может считаться корректным, если не содержит теги HTML, HEAD и BODY.
Все вышеперечисленные ошибки являются грубыми нарушениями стандарта HTML5. Однако любой современный браузер не только не выдаст никакого сообщения об ошибке, но и постарается исправить их [2].
Список литературы Проблемы синтаксического анализа HTML-документов
- Habr.com. Бенчмарк HTML парсеров. - Режим доступа: https://habr.com/ru/post/163979/ (Дата обращения: 30.05.2019)
- Garsiel, T. How Browsers Work: Behind the scenes of modern web browsers / T. Garsiel, P. Irish. - Режим доступа: https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/ (Дата обращения: 31.05.2019)