Тег суп - Tag soup
HTML |
---|
Сравнения |
В веб-разработка, "тег суп"является уничижительным для синтаксически или структурно неправильного HTML написано для веб-страница. Поскольку веб-браузеры исторически снисходительно относились к синтаксису HTML или структурным ошибкам, на веб-разработчиков не оказывалось особого давления, чтобы они следовали опубликованным стандартам, и поэтому существует необходимость во всех реализациях браузеров обеспечивать механизмы, позволяющие справиться с появлением «супа тегов», принятие и исправление недействительным синтаксис и структура, где это возможно.
Парсер HTML (часть веб-браузер ), который способен интерпретировать HTML-подобную разметку, даже если он содержит недопустимый синтаксис или структуру, может называться тег суп парсер. В настоящее время все основные веб-браузеры имеют парсер тегов для интерпретации искаженного HTML.
"Суп из тегов" включает в себя множество распространенных авторских ошибок, например искаженные HTML-теги, неправильно вложен HTML-элементы, и неэкранированный сущности персонажей (особенно амперсанды (&) и знаки «меньше» (<)).
Я использовал этот термин в своих инструкциях в течение многих лет, чтобы охарактеризовать беспорядок угловых скобок, действующих как теги в HTML на страницах, которые принимаются браузерами. Неправильная минимизация, перекрывающиеся конструкции ... все, что выглядит как разметка SGML, но создатель не знал и не соблюдал правила SGML для словаря HTML. По сути, объемный набор текста и разметки. [...] Я никогда нигде не видел определение этого термина.
— Г. Кен Холман, Re: [xml-dev] Что такое Tag Soup?, Список рассылки разработчиков XML, 11 октября 2002 г.
В Служба проверки разметки - это ресурс для авторов веб-страниц, позволяющий избежать создания супа из тегов.
Обзор
«Суп из тегов» - это термин, используемый для очернения различных методов веб-разработки. Некоторые из них (в порядке убывания степени тяжести) включают:
- Неправильная разметка где теги неправильно вложены или неправильно закрыты. Например, следующее:
<п>Это искаженный фрагмент <Эм>HTML.</п></Эм>
- Неверная структура где элементы неправильно вложены в соответствии с DTD для документа. Примеры этого включают вложение элемента «ul» непосредственно в другой элемент «ul» для любого из HTML 4.01 или XHTML DTD. Дэн Коннолли цитирует использование заглавие элемент вне голова раздел[1].
- Использование закрытых или неопределенных элементов и атрибуты вместо тех, которые определены в рекомендациях W3C. Например, использование Мигающий элемент или Элемент Marquee которые изначально были нестандартными элементами, поддерживаемыми только Netscape и Internet Explorer браузеры соответственно.
Причины и последствия
Неправильная разметка
Неправильная разметка, пожалуй, самая серьезная проблема в веб-разработке. Однако благодаря лучшему образованию и информации и, возможно, с некоторой помощью XHTML, проблема искаженной разметки становится менее распространенной. Браузеры, столкнувшись с искаженной разметкой, должны угадать предполагаемый смысл автора. Они должны вывести закрывающие теги там, где они ожидают, а затем вывести открывающие теги, чтобы они соответствовали другим закрывающим тегам. Интерпретация может заметно отличаться от одного браузера к другому.[2]
Хотя многие графические веб-редакторы создают хорошо сформированную разметку, автор, пишущий код вручную с помощью текстового редактора и затем тестирующий только в одном браузере, может легко пропустить такие ошибки. Таким образом, представление может сильно отличаться от одного браузера к другому, поскольку каждый пытается «исправить» намерения автора по-разному, а затем применяет стиль к этим «исправлениям».
Неверная структура документа
Недопустимая структура документа здесь означает только использование атрибутов и элементов, которым они не принадлежат. Например, размещение атрибута cite в элементе cite недопустимо, поскольку DTD HTML и XHTML не придают никакого значения этому атрибуту в этом элементе. Точно так же включение элемента «p» в содержимое элемента «em» также недопустимо. С движением к отделению искаженной разметки от недопустимой разметки проблемы с недопустимой разметкой все чаще рассматриваются как менее серьезные. Некоторые начали отстаивать более свободные модели содержимого, которые обеспечивают большую гибкость при создании документов HTML (будь то в HTML или XHTML). Однако использование недопустимой разметки может размыть задуманное автором значение, хотя и не так сильно, как искаженная разметка.
Многие графические веб-редакторы по-прежнему создают недопустимую разметку. Более того, многие профессиональные веб-дизайнеры и авторы мало внимания уделяют вопросам действительности. Неверная разметка часто встречается на многих сайтах во всемирной паутине.
Использование патентованных / снятых с производства элементов
В раннем возрасте Интернета (большая часть 1990-х годов) дизайн официальной спецификации HTML становился все более напряженным по сравнению с желанием дизайнеров гибкости в создании визуально ярких дизайнов. В ответ на это давление производители браузеров в одностороннем порядке добавили в HTML новые проприетарные функции, которые в то время выходили за рамки стандартов. Это означало, что в HTML были проприетарные элементы, которые работали в одних браузерах, но не работали в других.
В некоторой степени решение этой проблемы было замедлено введением W3C новых стандартов, таких как CSS, представленных в 1998 году, которые помогли обеспечить большую гибкость в представлении и макете веб-страниц без необходимости в большом количестве дополнительных элементов HTML. и атрибуты.
Более того, в HTML 4 и XHTML 1 многие элементы были заменены одной семантической конструкцией (например, объект элементы, заменяющие фирменные апплет и вставлять элементы) или не рекомендуются из-за презентабельности (например, элементы "s", "strike" и "u").
Тем не менее, разработчики браузеров продолжали вводить новые элементы в HTML, когда чувствовали необходимость. Некоторые браузеры включают атрибуты tabindex в любой элемент. Разработчики Apple WebKit представил холст элемент, версия которого впоследствии была принята Mozilla.
В 2004 году Apple, Mozilla и Опера основал WHATWG, с целью создания новой версии спецификации HTML, которой будет соответствовать все поведение браузера. Это включало изменение спецификации, если необходимо, чтобы соответствовать существующему консенсусу между различными браузерами.[3]
В холст[4] и вставлять[5] элементы впоследствии были стандартизированы WHATWG. Определенные элементы (включая б, я и маленький), которые ранее считались презентационными и устаревшими, были включены, но определялись независимым от носителя, а не визуальным образом.[6]
Версии спецификации WHATWG были опубликованы W3C так как HTML5.[3]
Развивающиеся спецификации для решения проблемы супа с тегами
В то время как некоторые проблемы с супом тегов связаны с недостатками браузеров, а иногда и с недостатком информации для веб-авторов, некоторое распространение супа тегов произошло из-за отсутствия ссылок в самих веб-стандартах. W3C возглавил несколько усилий по устранению недостатков веб-стандартов. По мере того как все больше браузеров поддерживают новые версии стандартов, давление на веб-разработчиков, заставляющих их использовать нестандартный код для решения проблем, уменьшается.
Каскадные таблицы стилей (CSS)
Каскадные таблицы стилей (CSS) предоставляют механизм для определения представления элементов в документе без изменения структуры разметки документа. До того, как CSS стал обычным явлением, веб-разработчики могли прибегать к некоторой структурно недопустимой разметке для достижения определенных презентационных целей - например, включение элементов уровня блока во встроенные элементы для получения определенного эффекта или использование иногда большого количества <font>
и другие специфичные для отображения HTML-теги. CSS использует правила стиля для выполнения этих задач, оставляя разметку более чистой и простой.
XML и XHTML
XHTML это переформулировка языка HTML на основе XML. XHTML был разработан для решения многих проблем, связанных с супом тегов.
XML позволяет синтаксическим анализаторам разделять процесс интерпретации синтаксиса документа и его структуры. В HTML и SGML, синтаксическому анализатору необходимо знать определенные правила об элементах во время синтаксического анализа, например, какие элементы могут содержаться в других элементах и какие элементы неявно закрывают предыдущий элемент. Это связано с тем, что в HTML и SGML закрывающие теги и даже открывающие теги были необязательными для некоторых элементов. Требуя, чтобы все элементы имели явные открывающие и закрывающие теги, синтаксические анализаторы XML могут анализировать документ и создавать дерево документа без какого-либо знания типа документа. Это позволяет синтаксическим анализаторам быть универсальными и очень легкими и отделенными от процесса проверки или интерпретации документа.
Спецификация XML четко определяет, что соответствующий пользовательский агент (например, веб-браузер) не должен принимать документ и не продолжать его анализ, если обнаружена какая-либо синтаксическая ошибка. Таким образом, браузер, интерпретирующий веб-страницу как XHTML, откажется отображать страницу, если обнаружит ошибку формирования. Это может помочь гарантировать, что, когда авторы тестируют код XHTML в соответствующем браузере, они сразу же будут проинформированы о проблемах с искажениями: возможно, это самая серьезная проблема, с которой сталкиваются веб-браузеры. Когда код искажен, намерения автора неоднозначны. Без директив XML HTML-браузеры должны использовать сложные алгоритмы для вывода предполагаемого автором значения в широком диапазоне случаев, когда встречается недопустимый синтаксис.
XML и XHTML представляют концепцию пространств имен. С помощью пространств имен авторы или сообщества авторов могут определять новые элементы и атрибуты с новой семантикой и смешивать их в своих документах XHTML. Пространства имен гарантируют, что имена элементов из различных пространств имен не будут объединены. Например, элемент «таблица» может быть определен в новом пространстве имен с новой семантикой, отличной от элемента «таблица» HTML, и браузер сможет различать эти два элемента. Предоставляя пространства имен, XHTML в сочетании с CSS позволяет сообществам разработчиков легко расширять семантический словарь документов. Это позволяет использовать собственные элементы при условии, что эти элементы могут быть представлены целевой аудитории с помощью полных определений таблиц стилей (включая звуковые / речевые и тактильные стили).
Документы XHTML можно обслуживать в Интернете с помощью тип интернет-СМИ приложение / xhtml + xml
или текст / html
[7] Текущий Microsoft Internet Explorer версии (6, 7 и 8) не отображают документы XHTML, служащие приложение / xhtml + xml
. Бета-версии IE9 кажутся совместимыми. См. Также обсуждение этого вопроса в статье XHTML.
HTML5
HTML5 на данный момент стремится быть наиболее полным решением проблемы супа тегов, оставаясь при этом максимально совместимым с предыдущими и последующими версиями. В отличие от XHTML, который отходит от обратной совместимости и использует подход, согласно которому парсеры должны стать менее терпимыми к плохо сформированной разметке, HTML5 признает, что плохо сформированный код HTML уже существует в больших количествах и, вероятно, будет продолжать использоваться, и считает, что спецификацию следует расширить, чтобы обеспечить максимальную совместимость с таким кодом.
Таким образом, спецификация HTML 5 изменила свое определение синтаксиса HTML, чтобы приспособить общий синтаксис, используемый сегодня, и явно описать, как именно "плохо сформированный код" должен обрабатывать синтаксический анализатор. Обработка плохо сформированного кода теперь имеет место в самой спецификации, что, надеюсь, снижает потребность в будущих анализаторах HTML для реализации дополнительных, выходящих за рамки спецификации мер для работы с кодом, который он не распознает.
Инструменты для исправления тегов супа
- HTML Tidy - это программный инструмент, доступный для многих платформ, который может исправлять недопустимый синтаксис и наиболее недопустимую структуру документа, преобразовывая HTML-подобный код в HTML или XHTML.
- Агджорно это надстройка Visual Studio, которая фокусируется на обеспечении соответствия веб-сайтов стандартам
- ТегСуп - это библиотека Java, которая анализирует HTML, очищает его и доставляет поток SAX события, представляющие правильно сформированный XML (не обязательно действительный XHTML). Этот инструмент используется для обработки файлов JNLP в реализации с открытым исходным кодом JNLP протокол доступен в IcedTea-Web, подпроект Чай со льдом, проект сборки и интеграции OpenJDK.
- Красивый суп это Python ДОМ -подобный парсер для непонятного HTML / XML[8].
- tagoup: библиотека для Язык Haskell.
Смотрите также
Заметки
- Г. Кен Холман. Re: [xml-dev] Что такое Tag Soup?, Список рассылки разработчиков XML, 11 октября 2002 г. Архивное сообщение доступно онлайн.
- "тэг суп". Definitions.net. STANDS4 LLC, 2013. Web. 19 ноября 2013 г. суп.
использованная литература
- ^ Винер, Дэйв (12 октября 2002 г.). "Что такое Tag Soup?". Новости сценариев. Дэйв Винер. Архивировано из оригинал 26 февраля 2004 г.. Получено 23 ноября 2017.
В качестве примера он привел элемент
. На самом деле это имеет смысл только в документа, но, очевидно, один или несколько браузеров позволят вам установить заголовок страницы в теле страницы! Это не значит, что земля рушится или небо падает, все может происходить нормально, но делать это там неправильно, и мир стал бы (немного) лучше, если бы браузеры не позволяли этого. - ^ Хиксон, Ян (21 ноября 2002 г.). "Tag Soup: как UA работают с
- ^ а б WHATWG. «1.6 История». Стандарт HTML.
- ^ WHATWG. «4.12.5 Элемент холста». Стандарт HTML.
- ^ WHATWG. «4.8.6 Элемент embed». Стандарт HTML.
- ^ WHATWG. "ВОПРОСЫ-ОТВЕТЫ". WHATWG.org.
- ^ «XHTML 1.0 - расширяемый язык разметки гипертекста (второе издание) - переформулировка HTML 4 в XML 1.0, приложение C. Рекомендации по совместимости с HTML». Рекомендация W3C. 1 августа 2002 г. [26 января 2000 г.]. Получено 2008-09-13.
Документы XHTML, которые следуют руководящим принципам, изложенным в Приложении C, «Рекомендации по совместимости с HTML», могут быть помечены типом Интернет-носителя «text / html» [RFC2854], поскольку они совместимы с большинством браузеров HTML. Эти документы, а также любой другой документ, соответствующий этой спецификации, также могут быть помечены типом Интернет-носителя «application / xhtml + xml», как определено в [RFC3236]. Для получения дополнительной информации об использовании типов мультимедиа с XHTML см. Информационное примечание [XHTMLMIME].
- ^ Тальяферри, Лиза (20 июля 2017 г.). «Как очистить веб-страницы с помощью Beautiful Soup и Python 3». Учебники по цифровому океану. Цифровой океан. Архивировано из оригинал 2 сентября 2017 г.. Получено 23 ноября 2017.
В настоящее время доступен как Beautiful Soup 4 и совместим как с Python 2.7, так и с Python 3, Beautiful Soup создает дерево синтаксического анализа из проанализированных документов HTML и XML (включая документы с незамкнутыми тегами или супом тегов и другой искаженной разметкой).