Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Диахрония HTML

Автор vfaronov, декабря 19, 2011, 21:19

0 Пользователи и 1 гость просматривают эту тему.

vfaronov

Программные интерфейсы (= протоколы, форматы, языки, API...) подвержены естественному (ненамеренному) изменению со временем, «дрейфу». Я давно хочу провести параллели между диахронией интерфейсов и диахронией естественных языков (далее NL). Как минимум это занятно. Как максимум — а вдруг удастся, отталкиваясь от методов и результатов лингвистики, намутить что-то предсказательное для интерфейсов?

Сваливаю некоторые мысли сюда, вдруг кто-то захочет развить. Это моя первая попытка выделить в языке HTML уровни, соответствующие уровням NL, и на каждом привести примеры диахронии. Чистая спекуляция и handwaving.

Почему именно HTML. Навскидку, из знакомых мне интерфейсов, HTML быстрее всех «дрейфует». Я вижу тому несколько причин, но о них потом.


«Фонетика» и «фонология». «Звуковой» уровень HTML — это его синтаксис. Пусть вас не смущает, что у NL тоже есть синтаксис, это ложный друг. То что происходит на уровне лексера (поток токенов) — это «фонетика», а на уровне парсера — «фонология». Автор HTML-кода видит токены-«фонемы» /</, /div/, />/, но его не волнуют символы, из которых состоит токен /div/. Опечатки можно не рассматривать, поскольку, в отличие от других ошибок, юзер-агенты ничего с ними сделать не могут.

Пример «звукового закона» HTML (в левой части пробелы лишние, ну вы поняли):

   /& amp;/ > /&/
   /& quot;/ > /"/
   /& lt;/ > /</
   /& gt;/ > />/
Иными словами, есть тенденция не экранировать амперсанд и т. д. в виде character references, как положено, а оставлять в тексте как есть. Вы скажете: где же тут диахрония, так было испокон веку. И вы вероятно правы. Но, если раньше это было однозначно ошибочно, то сейчас в HTML5 даются чёткие правила, как это распарсить, то есть это вроде как уже норма.

Ещё один «звуковой закон»:

   /"/ > ∅ вокруг некоторых значений атрибутов (грубо говоря — достаточно простых, например целых чисел)
То есть, вместо border="0" пишут border=0. Опять же, так делали всегда, и в HTML4 это валидно. Но в середине-конце 00-х оборачивать всё в кавычки было best practice, в XHTML это обязательно, а сейчас, как мне кажется, в HTML5 стало модно кавычки убирать. (Жаль, нет данных. Надо идти в поле ;D)

Тенденция опускать закрывающие теги, даже там, где по норме этого делать нельзя (например в XHTML), — это, типа, упрощение геминации получается. Опять же, в HTML5 этого уже не стесняются.


«Грамматика». Пока точно не знаю, что является «грамматикой» («морфологией» и «синтаксисом») HTML. Наверное нелокальные структурные связи внутри документа и между документами. Например, если в одном месте есть <a href="#foo">, а в другом месте <div id="foo">, то это что-то типа согласования.

Тут можно рассмотреть «утрату продуктивности» HTML как приложения SGML. Версии HTML со второй по четвёртую определялись через SGML DTD. Но юзер-агентов, которые бы парсили HTML по этому DTD, были единицы, все остальные работали с HTML как с вещью в себе. В результате в HTML5 (в его не-XML варианте) от ссылок на SGML отказались, весь парсинг описан прямо в спеке. Остались угловые скобки, слэши, да жупел <!DOCTYPE html> — fossilized конструкция, не несущая функциональной нагрузки.

Мне это больше всего напоминает ИЕ аблаут. Он был ключевой морфонологической чертой ПИЕ, потом он умер, но в языках-потомках осталось множество следов, которые сегодня осмысливаются как просто нерегулярности.


«Лексика» и «семантика». «Лексика» HTML — это его элементы и атрибуты. У них есть «семантика» — то, чего хотят добиться авторы HTML-кода с помощью данных элементов/атрибутов. Не нужно путать эту «семантику» с той, что прописана в спеке, которую имеют в виду, когда говорят «semantic HTML». Эта нормативная семантика — частный случай нашей «семантики».

«Семантические» сдвиги в «лексике» HTML в основном по оси «смысл—представление» (ср. др.-греч. καλός 'красивый' > новогреч. καλός 'хороший'). Пример — элемент BLOCKQUOTE, исходное значение которого — «блоковая цитата», но в народном HTML (vulgar HTML) он приобрёл значение «блок текста с отступом по левому краю». Натуральная метонимия. С элементами B и I произошло обратное: начинались как чисто презенатционные, но в HTML5 из них выжали какое-то (хоть и расплывчатое) логическое значение.

Отдельная эпопея — элемент TABLE. Сперва это таблица, потом им пользуются для вёрстки всего подряд, потом в 00-х возникает чуть не целое движение против презентационных таблиц (табу?).

Словообразование в HTML бедное: только априорным придумыванием. Заимствований из других языков сходу не назову, хотя в принципе они возможны (случаи встраивания в HTML других пространств имён, вроде SVG или MathML, разумеется, за заимствования не считаем, — это code-switching).

Рождение микроформатов — возникновение идиоматики + некого жаргона.


«Письменность» HTML — это DOM. Код HTML-документа — линейный поток токенов — это «устное высказывание»: вылетит — не поймаешь. DOM же поддерживает random access, как и NL-письменность (особенно если это письменность на компьютере). DOM аккуратненько обрубает нам как раз «звуковой» уровень, оставляя всё остальное.

Про диахронию тут сказать пока нечего, кроме того, что «письменность» возникла (не сразу — как и у NL) и прошла через несколько стадий: DOM1→DOM3 (клинопись→алфавит?).


«Социолингвистика». Это очень благодатная тема. Тут есть и литературный язык, и безграмотная речь низших сословий, и граммар-наци, и проекты реформ... Надо изучать.


TODO. Рассматривать не только HTML, но и другие компоненты открытой веб-платформы — CSS, JavaScript, HTTP. Исследовать историю этих интерфейсов, составить базу фактов.

Alone Coder

О да, когда я составил сайт в точности по методу, которому нам учили в 2000 году, W3C в 2010 году нашёл в нём с десяток ошибок. Исправил.

Bhudh

Цитата: vfaronov от Отдельная эпопея — элемент TABLE. Сперва это таблица, потом им пользуются для вёрстки всего подряд, потом в 00-х возникает чуть не целое движение против презентационных таблиц (табу?).
Даже не только презентационных, иные выступают за отмену тэгов table tr td и подобных вообще.
Вот, например: «Таблицы CSS лучше таблиц HTML?».
Это можно уже назвать «проникновением конкурирующего диалекта/арго», если за «диалектный континуум» принять связку HTML+CSS+JavaScript.

Цитата: vfaronov от Словообразование в HTML бедное: только априорным придумыванием.
Не всё так печально.
В HTML5 можно объявлять пользовательские атрибуты (specs), что, собственно, является запоздалым влиянием предка — XML, в котором объявляется всё что угодно. Впрочем, через DOM можно создать тэг с произвольным именем и работать с ним как с обычными (по крайней мере в Опере). Оно, канешна, уже не столь валидно, но может быть полезно.
А о юзер-атрибутах здесь:
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо


Bhudh

Ну дядя. В общем, достаточно близкий родственник...
XMLXHTML
SGML
HTMLHTML5

Будем ɕːитать, что под XML разумелся его ближайший предок. :eat:
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

vfaronov

Жил да был сильно флективный язык XML. И была у него такая морфологическая категория, называлась неймспейсы. Все существительные элементы и прилагательные атрибуты могли (опционально) маркироваться неймспейсами. Показателем неймспейса служил префикс, который приставлялся к имени через двоеточие. И префикс этот согласовывался с объявлением где-то выше по предложению документу.


<contact xmlns:family="http://example.org/vocab/family/">
    <name>John Doe</name>
    <age>58</age>
    <family:son family:ord="1">
        <name>John Doe Jr.</name>
        ...
    </family:son>
</contact>


Поскольку XML на тот момент был важным лингва-франка стандартом, под его влиянием такая же конструкция возникла в нескольких других литературных языках. В конечном счёте она доползла до XHTML+RDFa — диалекта HTML, на котором говорили в маленькой но гордой никому не нужной стране Семвебии.


<body xmlns:foaf="http://xmlns.com/foaf/0.1/">
    <p about="#me" typeof="foaf:Person">
        Hi, my name is <span property="foaf:name">Vasya</span>...
    </p>
</body>


Так бы и сгинула сия категория в пучине лет, если бы однажды в Семвебию не пришли завоеватели. Причём не абы какие, а Цукерберг суровые воины, которые знали толк в ратном деле, но были обделены высокой культурой. Они радостно переняли язык покорённых семвебианцев, затем пошли покорять дальше и тем самым разнесли его на большую территорию. Естественно, язык поменялся, и стал он называться OpenGraph.

Что случилось в OpenGraph? Во-первых, уже в литературном OpenGraph категория неймспейса утратила продуктивность. Она оставалась всего у нескольких лексических единиц, таких как og:site_name 'название сайта' и og:description 'описание'. Префикс у них у всех был одинаковый og:-. Разнообразие синтаксических позиций, в которых дозволялись неймспейсы в XHTML+RDFa, было сведено к одной-единственной — на элементе meta 'всякий вздор; чепуха' в голове документа. Но это всё ещё было грамматично в XHTML+RDFa.

Ну а дальше, как вы уже догадались, случилась деградация дефлексия. Поскольку надобность в согласовании по неймспейсу отпала, в разговорном OpenGraph стали просто дропать объявление префикса og:-. Он был реанализирован как неотъемлемая часть имени с прикольными точечками. И вот, сегодня я увидел вот такое:


<meta property="email:action" content="Grab $100 off this deal!" />
<meta property="email:action:web_url" content="http://fab.com/deal/2342342" />


С точки зрения RDFa, вот это email:action:web_url это что-то вроде -щехом во Влескниге.

И всё это не за сотни лет, а за единицы. Не понимаю, зачем лингвисты раскапывают всякую романскую диахронию, когда у них под носом такое веселье творится.

Тайльнемер


Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр