Чому для HTML не було обрано суворий аналіз?


38

Я часто замислювався, чому при створенні HTML не було обрано суворого аналізу. Більшу частину історії Інтернету браузери приймали будь-яку розмітку та намагалися її проаналізувати. Процес погіршує продуктивність, дозволяє людям писати безглуздість і ускладнює припинення застарілих функцій.

Чи є конкретна причина, чому HTML не є чітко проаналізованим?


7
Можливо, ви знайдете цікаву статтю Джоельса, Марсіанські гарнітури . Також особливу увагу заслуговує RFC 793: Принцип стійкості , в якому прямо вказано, що впровадження TCP повинні намагатись розібрати сміття. Цей принцип з тих пір застосовується до браузерів.
Брайан

25
@Brian: Міцність означає, що ви не повинні перепадати, коли отримуєте лайно. Це не означає, що ви повинні мати сенс лайно.
Мар'ян Венема

2
XHTML використовує суворий аналіз.
user16764

3
Це тільки я, або жодна з цих відповідей не дуже задовольняє?
gsingh2011

2
@ gsingh2011 Жодна з відповідей не задовольняє, але моя відповідь - це правда. Деякі з нас були давно активними в мережі :-) Але так, дивно, скільки сміття у нас залишилося з таких простих причин.
Росс Паттерсон

Відповіді:


39

Причина проста: під час перших графічних браузерів, NCSA Mosiac та пізніше Netscape Navigator майже весь HTML був написаний від руки. Автори браузерів (Netscape побудовані колишніми мозаїчними людьми) швидко зрозуміли, що відмова від надання неправильного HTML буде застосована проти них користувачами, і voila!


7
+1 так, саме так все і почалося, в vi або блокноті. Оскільки більшість сторінок копіюється з неправильного прикладу коду, він ніколи не покращувався. Плюс WWW процвітав, тому кожен, хто міг набрати, став веб-розробником, і все було швидко.
jqa

1
Мабуть, ця відповідь у поєднанні з коментарем @ Jukka дають найкраще можливе пояснення
Shubham

35

Оскільки робити найкращі здогадки - це правильно, з точки зору виробника браузера. Розгляньте ситуацію: в ідеалі HTML, який ви отримуєте, є абсолютно правильним та специфічним. Це чудово. Але найцікавіше те , що відбувається , коли HTML є НЕ правильно; оскільки ми маємо справу з джерелом джерела, на який ми не маємо впливу, насправді, ми повинні бути готові до цього. Тепер, коли це відбувається, що ми могли зробити? У нас є два варіанти: а) невдача та б) докласти максимум зусиль для відновлення помилки. Якщо ми не вдається, користувачеві не залишається нічого, крім марного повідомлення про помилку, і вони нічого з цим не можуть зробити, оскільки вони не контролюють сервер. Якщо ми докладемо максимум зусиль, користувач має принаймні те, що ми могли б зробити на сторінці, і часто здогадки здебільшого вірні.

Єдина реальна проблема з цим полягає в тому, що вам потрібні повідомлення про помилки, які зазвичай знаходяться в ситуації розробки - ви хочете переконатися, що створений вами HTML правильний, а оскільки "працює в браузері X", не є рівнозначним "правильним", ми не можемо просто запустити його через браузер і перевірити, чи працює він: ми не можемо визначити різницю між правильним HTML і неправильним HTML, який браузер встановив для вас. Це все ж вирішувана проблема; є плагіни браузера, які повідомляють про порушення стандартів, є валідатор W3C та багато інших подібних інструментів.


7
Ну, я не думаю, що хтось би обслуговував HTML, який видає помилки. Чому ви вважаєте, що припустимий код компілятора відрізняється від браузера, який передбачає HTML.
Шубхам

1
Я погоджуюся з Шубхемом тут - "оскільки ми маємо справу з джерелом джерела, на який ми не маємо впливу" є помилковим, вплив є непрямим, але деякі веб-сайти все ще підтримують IE6 через цей вплив.
Steve314

2
@Shubham: Компілятор відрізняється тим, що його мета полягає не в тому, щоб перетворити машиночитаний вихідний код у засвоювану людиною форму, а перетворити читаний людиною вихідний код на щось зручніше для комп'ютера (машинний код чи якийсь проміжний формат). За допомогою компілятора ви виправляєте вхідні дані, і ви раді, що код не вніс його у виробництво. За допомогою браузера ви проклинаєте виробника веб-переглядача або автора веб-сайту, але в будь-якому випадку ви не зможете переглянути сторінку.
тдаммери

2
@Shubham: Зазвичай користувач компілятора матиме контроль над вихідним кодом, який компілюється. Це, як правило, не стосується веб-сторінок.
supercat

17

Автори HTML та інструменти для створення авторських даних створюють шалену розмітку. Браузери роблять все можливе для цього з конкурентоспроможних причин: браузери, які не зможуть відобразити більшість веб-сторінок будь-яким розумним способом, будуть відхилені користувачами, які не піклуються про те, в чиїй віні.

Він досить відрізняється від того, що виконують мови програмування. Компілятори та інтерпретатори працюють над кодом, який може вважати написаний програмістом, тоді як кожен та його брат можуть писати HTML з мінімальною підготовкою або без нього. Розмітка HTML - це сенс коду, але це дані, а не інструкції з мови програмування, а (хороша) традиція в програмному забезпеченні - бути толерантними до даних.

XHTML в принципі накладає суворі правила (XML) розбору, так що документ XHTML, що подається з типом вмісту XML, буде відображатися лише в тому випадку, якщо він добре сформований у сенсі XML - інакше користувачеві повідомляється лише перша помилка. Це ніколи не стало популярним у веб-розробці - майже весь «XHTML» навколо подається як текст / html та обробляється як традиційний суп із тегами дуже ліберально, лише з деякими новими ексцентриситами.


15
HTML authors and authoring tools produce crappy markup.- це роблять, тому що браузери це приймають. Якби браузери з самого початку не прийняли це - тоді ці інструменти та автори не змогли б уникнути, створюючи
банальну

3
@GrandmasterB - Я думаю, що ви пропустили суть - Навіть там, де був лише один браузер на ринку - він не зробив суворий аналіз.
user93353

3
Смішна примітка: ви говорите, що якщо браузер не зможе розібрати недійсний сайт, він втратить частку ринку. Але просто подивіться, тобто: як би це погано, він не втрачає частку ринку. Це просто змушує бідних розробників писати брудні хаки за допомогою старих API ... І не запускайте мене за допомогою схеми версій ...
Макс

3
На початку браузери писали поспішно, щоб розібратися з мовою розмітки, яка не була доопрацьована і не мала офіційних специфікацій - не було жорстких правил розбору. (HTML 2.0, 1995 р., Був номінально на основі SGML, але це було занадто пізно, щоб реально реалізувати.)
Юкка К. Корпела,

2
IE фактично втратила досить багато своєї частки на ринку. Але це, мабуть, мало що стосується суворого розбору. IE, завдяки своїм дивацтвам, керував Інтернетом досить довго, щоб змусити інших браузерів багато в чому наслідувати його дивацтва, тому що стільки сторінок інакше розвалиться.
Юкка К. Корпела

9

Коротше кажучи, це те, що HTML базувався на іншій мові розмітки без гіперпосилання під назвою SGML, яка часто використовується для документації та посібників тощо.

Зі статті про історію HTML:

Тім згадав, що деякі ранні документи HTML засновані на старій мові SGML, яку CERN вже використовував: - Ми включили до HTML деякі теги з набору тегів SGML, які використовувались та колись підтримувались у CERN [...] HTML-аналізатор буде ігнорувати теги, які він не розуміє, і буде ігнорувати атрибути, які він не розуміє з тегів CERN-SGML .

[...] більшість ранніх тегів HTML були фактично взяті з мови CERN SGMLGuid, яка сама була варіантом AAP (ранньої мови SGML). Наприклад, назва, hn, p, ol і так далі, очевидно, взяті з цієї мови. Єдиною радикальною зміною було додавання всіх важливих посилань () якоря (), без яких WWW не злітала б.

Враховуючи частину, яку я виділив жирним шрифтом, в основному вони реалізували підмножину тегів, наявних у системі SGML, з якою вони були знайомі, додавши новий тег <a> тега і вирішили ігнорувати будь-який із багатьох тегів, які вони зробили '. t не хвилюється або бажає підтримати з причини wahtever (наприклад, теги для списків бібліографії, xmp для "example", "box" тег, щоб намалювати поле навколо блоку тексту тощо). Тож найпростіший спосіб зробити це - пробачити розмітку, яка не відома аналізатором, і ігнорувати невідому розмітку якнайкраще, незалежно від того, причиною є неправильна розмітка користувача або найшвидший спосіб перетворення існуючих документів у цей новий формат HTML - додавати деякі посилання на існуючі документи SGML та ігнорувати те, що теги не підтримуються та не реалізуються.


Синтаксис HTML насправді був заснований на конкретному синтаксисі опорного SGML для форми його розмітки. Але сам SGML не мав елементів для розмітки документів, які HTML може запозичити. Набір елементів HTML насправді нагадує мову мови розмітки документів GML IBM , транслітеровану в SGML RCS.
Росс Паттерсон

5

Частково це історичний залишок війни в браузері

IE і netscape змагалися за те, щоб зайняти ринок і продовжували випускати нові функції, які ставали все більш "приголомшливими", і змушували приймати сторінки, призначені для іншого браузера.

Це означає, що браузер мовчки приймає і ігнорує невідомі теги, після того, як комітети почали втягуватися ... ну у вас є комітет з проектування матеріалів і, як результат, безліч різних версій (з деякими неоднозначно сформульованими специфікаціями), де браузер хоче підтримувати більшість їх, і створення окремого аналізатора для кожної версії було б величезним наслідком. Тож (відносно) простіше використовувати один парсер з різними режимами.

З іншого боку, netscape та IE хотіли, щоб html був доступний для простої людини (як це було примхами тих днів), що означає намагатися робити те, що користувач хотів зробити, а не те, що він сказав зробити, і перемикатися на кожен звисаючий тег.

Погіршення проблеми полягає в тому, що є також кілька сайтів "підручника", які викладають неправильну річ і думають, що вони праві, тому що те, що вони навчають, працює.

Зрештою, це означає, що якщо ви зараз створили браузер зі строгим html-розбором 99% сайтів, вони просто не спрацюють.


6
Ще до появи IE на ринок, Netscape ніколи не робив суворий аналіз. Я пам’ятаю Netscape з початку 1997 року.
user93353

Навіть якби існували чіткі стандарти, браузеру було б важко розрізнити теги, які були законно визначені після виходу браузера, порівняно з тегами, які ніколи не були і ніколи не були б законними. Якщо "необов'язкові" теги, які розширювали документ, але не були потрібні для його семантичної коректності, включали номер версії стандарту, який їх реалізував, то браузер, який реалізував версію 23 стандарту, може мовчки ігнорувати <o24wowzo>тег, але balk на <o23wowzo>, але такий дизайн зашкодив би "читабельному" людині аспекту HTML.
supercat

2

Добре, що ми намагалися встановити хороший строгий варіант у тисячах, але це не вийшло, тому що люди, слідуючи за «найкращими методами» сліпо, звинувачували браузери, коли їх неправильна розмітка розбиралася в суворому режимі. І постачальникам браузерів не подобалося, що їх звинувачують.

Вони заявляли, що це тому, що вони хотіли, щоб Інтернет був доступнішим непрофесіоналам, але ніхто не перешкоджав використанню HTML 4 у його найбільш м'якій формі.

З цього приводу, ви все ще можете служити HTML5 як XML, якщо хочете строгого макета. ІМО, це може бути хорошим способом скористатись перевагами компонування або роботи інтерфейсу в більш жорсткому режимі, перш ніж передавати його іншим людям, які можуть або не хочуть цього як суворого, без реальних ризиків (забороняючи їм виривати доктрип, оскільки вони насправді віддають перевагу режиму примх - у 2017 році (час цієї редагування) їх слід знімати. Отже, це все ще є в основному, але проводять деякі дослідження. Здається, я пам'ятаю, що у XHTML у нас не було певних застережень, які не мали по-справжньому впливають на верстку роботи. Просто не поширюйте слово, що це "єдиний спосіб зробити це правильно", або твітни, які купують цю розмову, зроблять ідею, знову звинувачуйте браузери, і вони приймуть зуби з єдиної суворої альтернативи, яку ми залишили. (2017 редакція:

http://mathiasbynens.be/notes/xhtml5

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.