Язык разметки

Язы́к разме́тки (текста) в компьютерной терминологии — набор символов или последовательностей символов, вставляемых в текст для передачи информации о его отображении или строении. Принадлежит классу компьютерных языков. Текстовый документ, написанный с использованием языка разметки, содержит не только сам текст (как последовательность слов и знаков препинания), но и дополнительную информацию о различных его участках — например, указание на заголовки, выделения, списки и т. д. В более сложных случаях язык разметки позволяет вставлять в документ интерактивные элементы и содержание других документов.

Следует отметить, что язык разметки неполон по Тьюрингу и обычно не считается языком программирования.

Логическая и визуальная разметки 
Различают логическую и визуальную разметки. В первом случае речь идёт только о том, какую роль играет данный участок документа в его общей структуре (например, «данная строка является заголовком»). Во втором — определяется, как именно будет отображаться этот элемент (например, «данную строку следует отображать жирным шрифтом»). Идея языков разметки состоит в том, что визуальное отображение документа должно автоматически получаться из логической разметки и не зависеть от его непосредственного содержания. Это упрощает автоматическую обработку документа и его отображение в различных условиях (например, один и тот же файл может по-разному отображаться на экране компьютера, мобильного телефона и на печати, поскольку свойства этих устройств вывода существенно различаются). Однако это правило часто нарушается: например, создавая документ в редакторе наподобие MS Word, пользователь может выделять заголовки жирным шрифтом, но нигде не указывать, что эта строка является заголовком.

Примеры языков разметки 
Языки разметки используются везде, где требуется получение  на основании одного лишь текста: в типографии (SGML, TeX, PostScript, RTF), пользовательских интерфейсах компьютеров (Microsoft Word, OpenOffice), Всемирной Сети (HTML, XHTML, XML, WML, VML, PGML, SVG, XBRL).

Для написания исходных текстов Википедии, её участники используют особый язык разметки (см. Википедия:Как править статьи), а для отображения сложных математических формул — язык TeX.

Облегчённые языки разметки 
Языки, предназначенные для простого и быстрого добавления форматирования в текстовые данные, называются облегчёнными (:en:Lightweight markup language). Особенности таких языков:
 Минимум функций.
 Небольшой набор поддерживаемых тегов.
 Легки в освоении.
 Исходный текст на таком языке читается с такой же лёгкостью, как и готовый документ.

Применяются они там, где человеку приходится подготавливать текст в обычном текстовом редакторе (блоги, форумы, вики), либо там, где важно, чтобы пользователь с обычным текстовым редактором также мог прочитать текст. Вот несколько широко распространённых облегчённых языков разметки:

 BBCode
 Markdown
 reStructuredText
 Textile
 Вики-разметка (см. Википедия:Как править статьи)
 Различные системы автодокументирования (например, Javadoc).

История 
Термин «разметка» (как результат одноимённого процесса, англ. markup) произошёл от английского словосочетания «marking up» («разметка (как процесс)», букв. «помечивание, размечивание»), взятого из традиционной издательской практики проставления специальных условных пометок на полях и в тексте рукописи или корректуры перед передачей её в печать. Таким образом «разметчики» (markup men) указывали гарнитуру, стиль и размер шрифта для каждой части текста. В наше время разметкой текста занимаются редакторы, корректоры, графические дизайнеры — и, конечно же, сами авторы.

GenCode 
Идея использовать языки разметки в компьютерной обработке текстов, вероятнее всего, была впервые обнародована Вильямом Танниклиффом () на конференции в 1967 году. Сам он именовал своё предложение «универсальным кодированием» (). В 1970-е годы Танниклифф руководил разработкой стандарта GenCode для издательской индустрии и позже занял пост руководителя одного из комитетов Международной организации по стандартизации (ISO, ), создавшего SGML, первый описательный язык разметки. Брайан Рэйд () в своей диссертации, которую он защитил в 1980 году в университете Карнеги (), в развитие предложенной концепции осуществил практическую реализацию описательной разметки.

Тем не менее, в настоящее время «отцом» языков разметки обычно называют исследователя IBM Чарльза Голдфарба (). Основная концепция родилась у него в 1969 году, при работе над примитивной системой управления документами, предназначенной для адвокатских контор. В том же году он принял участие в создании языка IBM GML, который был впервые представлен в 1973 году.

В 1975 году Голдфарб переехал из Кембриджа, Массачусетс в Кремниевую долину, где стал разработчиком исследовательского центра IBM Almaden Research Center. Там он в 1978 году убедил руководство IBM использовать GML в коммерческих целях в составе разработанного компанией «средства формирования документов» (), после чего GML несколько лет широко использовался в бизнесе.

В 1978 году начались первые разработки, которые в конечном итоге привели к созданию стандарта SGML, основанного на GML и GenCode. Сам Голдфарб позднее возглавил комитет по SGML, который был принят организацией ISO в качестве стандартного в октябре 1986 года.

Некоторые ранние реализации компьютерных языков разметки можно обнаружить в типографских утилитах UNIX, таких как troff и nroff. Они позволяют вставлять команды форматирования в текст документа для его форматирования согласно требованиям редактора.

Доступность издательского софта с функцией WYSIWYG ( — «что увидишь, то и получишь») вытеснила большинство этих языков среди обычных пользователей, хотя серьёзная издательская работа по-прежнему использует разметку для специфических не визуальных структур текста, а WYSIWYG-редакторы сейчас чаще всего сохраняют документы в форматах, основанных на языках разметки.

Другой важный издательский стандарт — это , созданный и впоследствии улучшенный Дональдом Кнутом в 70-е-80-е года двадцатого столетия.  собрал воедино высокие возможности форматирования текста и описания шрифтов, в особенности для математических книг профессионального качества. В настоящее время  является стандартом де-факто во многих научных дисциплинах. Помимо  существует LaTeX, который представляет собой широко используемую описательную систему разметки на основе .

Scribe, GML и SGML 

Первым языком с чётким и ясным различием между структурой и видом документа был , который создан и описан докторской диссертацией Брайана Рейда (Brian Reid) в 1980 году. Scribe был революционным в количестве способов обработки, не в последнюю очередь из-за введённой идеи стилей, отделённых от собственно текста и грамматики и управляющих использованием описательных элементов. Scribe оказал влияние на разработку языка GML (позже SGML), а также он является прямым предком языков HTML и LaTeX.

В начале 80-х идея, что разметка должна быть сфокусирована на структурных аспектах документа и должна оставить внешнее представление документа интерпретатору, привела к созданию SGML. Язык был разработан комитетом, возглавляемым Голдфарбом. Он объединил идеи из многих источников, включая Тьюнникоффликский проект, GenCode. Шэрон Адлер (Sharon Adler), Андерс Бергланд (Anders Berglund) и Джеймс А. Марк (James A.Marke) так же были ключевыми членами комитета SGML.

SGML точно определял синтаксис для включения разметки в текст, а также отдельно описывал, какие теги разрешены и где (DTD — Document Type Definition). Это давало возможность авторам создавать и использовать любую разметку, какую они захотят, выбирая теги для использования и давая им имена на нормальном языке. Таким образом, SGML следует считать метаязыком; множественные специальные языки разметок произошли от него. Поздние 80-е были наиболее значимыми в появлении новых языков разметок, основанных на SGML, например  и DocBook.

В 1986 году SGML был опубликован как международный стандарт организацией ISO под номером 8879.
SGML нашёл широкое признание и широко использовался в очень больших проектах. Как бы то ни было, в целом было обнаружено, что он громоздок и труден для изучения, побочным эффектом языка было то, что он пытался сделать слишком много и быть чересчур гибким. Для примера, SGML создавал не всегда нужные закрывающие теги (или открывающие, или даже оба), потому что считал, что эта разметка будет добавлена вручную, штатом поддержки проекта, которые бы оценили экономию нажатий клавиш.

HTML 

К 1991 году использование SGML было ограничено бизнес-программами и базами данных, а WYSIWYG-инструменты (которые сохраняли документы в проприетарных бинарных форматах) использовались для остальных программ обработки документов. Ситуация изменилась, когда сэр Тим Бернерс-Ли, узнав о SGML от своего коллеги Андерса Бергланда () и других сотрудников в ЦЕРНе, использовал синтаксис SGML для создания HTML. Этот язык имел сходство с другими основанными на синтаксисе SGML языками разметки, однако начать его использование было гораздо проще даже тем разработчикам, которые никогда этого не делали. Стивен ДеРоуз (Steven DeRose) убеждал, что HTML, использующий описательную разметку (и от языка SGML в частности) — это основной фактор в развитии Web, потому что в нём была заложена гибкость и расширяемость (а также другие факторы, включая понятие о URL и свободное использование браузерами).

Однако статус HTML как языка разметки оспаривается некоторыми компьютерными учёными. Их основным аргументом является то, что HTML ограничивает размещение тегов, требуя, чтобы оба тега были вложены в другие теги или в главные теги документа. Вследствие чего, эти учёные считают HTML контейнерным языком, следующим иерархической модели.

XML 

XML (расширяемый язык разметки) — это мета-язык разметки, широко используемый в настоящее время. XML разработан консорциумом World Wide Web в комитете, возглавляемом Джоном Босаком (Jon Bosak). Основное предназначение XML — быть более простым, чем SGML и сфокусироваться на специфичной проблеме — документах в интернете.
XML — мета-язык как SGML, пользователям разрешается создавать любые теги, какие необходимы (отсюда «расширяемый»).
Становлению XML помогло то, что каждый XML-документ мог быть написан таким же способом, как и SGML-документ, а программы и пользователи, использующие SGML, могли перейти на XML достаточно легко.

Тем не менее, XML лишился многих ориентированных на людей особенностей языка SGML, упрощавших его использование (пока не расширилось количество разметки и не восстановилась читаемость и редактируемость на прежнем уровне). Другие улучшения исправляли некоторые проблемы SGML на международном уровне и делали возможным разбор документа иерархически, даже если не был доступен DTD.

XML был спроектирован, в основном, для не полностью структурированной среды, например для документов и публикаций. Тем не менее, это привело к золотой середине между гибкостью и простотой, и он был быстро принят многими пользователями.
В настоящее время XML широко используется для передачи данных между программами. Как и HTML, он может быть охарактеризован как «контейнерный» язык.

XHTML 

Начиная с января 2000 года, все рекомендации для W3C были основаны на XML в большей степени, чем на SGML, была предложена аббревиатура XHTML (Extensible HyperText Markup Language — Расширяемый Гипертекстовый Язык Разметки). Спецификации языка требовали, чтобы XHTML-документы были оформлены как XML-документы, это позволяет использовать XHTML для более чётких и точных документов, используя теги от HTML.

Одно из самых достойных внимания различий между HTML и XHTML — это правило, гласящее, что все теги должны быть закрытыми: пустые теги, например <br />, должны быть оба закрыты стандартным закрывающим тегом или специальной записью: <br /> (пробел перед «/» в закрывающем теге опционален, но часто используется, поскольку его используют некоторые пре-XML браузеры, также SGML-парсеры). Другие атрибуты в тегах должны быть в кавычках. Наконец, все теги и имена атрибутов должны быть написаны в нижнем регистре, чтобы восприниматься правильно; HTML невосприимчив к регистру.

Другие разработки, основанные на XML 
Сейчас используются многие разработки, основанные на XML, например, RDF (Resource Descriprtion Framework — среда описания ресурса), XFORMS, DocBook, SOAP и OWL (Web Ontology Language).

Особенности 
Общая особенность всех языков разметки в том, что они перемешивают текст документа с инструкциями разметки в потоке данных или файле. Это не необходимость: можно изолировать разметку от текста, используя указатели, метки, идентификаторы или другие методы координации. Такая «отделённая разметка» характерна для внутреннего представления программ, работающих с размеченными документами. Тем не менее, внедрённая или «междустрочная» разметка более принята где бы то ни было. Вот, для примера, небольшая часть текста, размеченного при помощи HTML:

 <h1> Anatidae </h1>
 <p>
 The family <i>Anatidae</i> includes ducks, geese, and swans,
 but <em>not</em> the closely-related screamers.
 </p>

Код разметочных инструкций (именуемых тегами) обведён угловыми скобками <как здесь>: между разметочными инструкциями — текст документа. Коды ,  и  — примеры структурной разметки, они описывают позицию, назначение или смысл текста, включённого в них.

Более точно,  означает «это заголовок первого уровня»,  — «это абзац», а  — «на это слово или фразу сделан особый акцент». Интерпретирующая программа может применять эти правила или стили для показа различных частей текста, используя различные гарнитуры, размеры шрифта, отступы, цвет или другие стили, если это необходимо. Так тег  может быть, например, представлен большим жирным типографским шрифтом, или (в документе с моноширинным текстом: как на печатной машинке), может быть подчёркнутым, или может вообще не менять внешний вид; содержимое тега , обычно отображается курсивом.

Для контраста, тег  в HTML — пример визуальной разметки: он используется для определения специфичных особенностей текста («в этом блоке использовать наклонную гарнитуру») без объяснения причин.

TEI () опубликовала всесторонние руководящие документы, указывающие кодировать текст в интересах человечества и научных обществ. Эти руководства использовались для кодирования исторических документов, специфичных работах учёных, периодике и так далее.

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

Использование языка XHTML также показывает, что его можно комбинировать с различными языками разметки одного профиля, например XHTML+SMIL или XHTML+MathML+SVG.