SGML
SGML (от англ. Standard Generalized Markup Language — стандартный обобщённый язык разметки) — это международный стандарт (ISO 8879) для определения языков разметки документов. Представляет собой метаязык, который позволяет создавать формальные грамматики и синтаксис для описания структуры, логических элементов и атрибутов электронных документов. SGML ориентирован на обеспечение независимости от конкретного программного и аппаратного обеспечения, а также на долговременное хранение и обмен информацией между различными системами.
История
Разработка SGML началась в 1960-х годах в США. Прототипом послужил язык GML (Generalized Markup Language), созданный в 1969 году группой специалистов компании IBM под руководством Чарльза Гольдфарба, Эдварда Мошера и Рэймонда Лори. GML предназначался для управления юридическими, техническими и деловыми документами в среде мейнфреймов IBM и сочетал концепции иерархической структуры с явной разметкой элементов.
В середине 1970-х годов работы по обобщению подхода привели к созданию первой версии SGML. Ключевым этапом стала адаптация языка для нужд Министерства обороны США и Американского национального института стандартов (ANSI). В 1986 году Международная организация по стандартизации (ISO) приняла SGML в качестве международного стандарта ISO 8879:1986 «Information processing — Text and office systems — Standard Generalized Markup Language (SGML)». Позднее стандарт неоднократно пересматривался и дополнялся.
В 1990-е годы на основе SGML были созданы HTML (для веб-страниц) и XML (упрощённый подмножество SGML), которые получили гораздо более широкое распространение. С развитием XML и его производных (SVG, MathML, DocBook) прямое использование SGML в коммерческих и открытых проектах стало сокращаться, однако концепции SGML остаются основой многих корпоративных и государственных систем управления документацией, в том числе в авиастроении, оборонной промышленности и издательском деле.
Архитектура и принципы
SGML является метаязыком: он не задаёт конкретную разметку для определённого типа документов, а предоставляет правила для создания таких определений. Центральным понятием является DTD (Document Type Definition — определение типа документа). DTD описывает:
- допустимые элементы (теги) и их имена;
- иерархическую структуру (какие элементы могут содержать какие);
- атрибуты элементов и их возможные значения;
- сущности (entities) — сокращённые обозначения или подстановки фрагментов текста (например, спецсимволы, фрагменты внешних файлов).
Синтаксис
SGML использует угловые скобки для обозначения открывающих (<element>) и закрывающих (</element>) тегов. В отличие от XML, SGML допускает более гибкие правила построения разметки:
- открывающий тег может быть опущен, если конец элемента определяется контекстом (например, концом родительского элемента);
- закрывающий тег может быть опущен для элементов, которые не содержат содержимого (пустые элементы);
- значения атрибутов могут не заключаться в кавычки, если они не содержат пробелов или специальных символов;
- допускаются сокращённые формы вложенности (например,
<!ELEMENT list - - (item+)>означает обязательные открывающий и закрывающий теги для элемента).
Такая гибкость усложняет синтаксический анализ, но позволяет создавать более компактные и читаемые документы.
Элементы и атрибуты
Каждый элемент определяется в DTD. Элемент может иметь ноль или более атрибутов, задающих характеристики (например, язык, тип данных, стиль оформления). Для каждого атрибута указывается тип значения (CDATA — символьные данные, ID — уникальный идентификатор, IDREF — ссылка на другой идентификатор, NMTOKEN — имя и др.) и может задаваться значение по умолчанию.
Сущности и ссылки
SGML поддерживает два вида сущностей:
- внутренние — задаются в DTD как строковые константы (например,
<!ENTITY copyright "© 2000–2024">); - внешние — ссылаются на содержимое других файлов (например,
<!ENTITY chapter1 SYSTEM "ch1.sgm">).
Ссылки на сущности выглядят как &имя; и заменяются на соответствующее содержимое в процессе обработки документа.
Объявления (SGML Declaration)
Для каждого документа или набора документов требуется указание режима синтаксического анализа: sgml declaration, которое определяет используемую кодировку, разделители (например, скобки, знаки препинания), ограничения на длину имён и глубину вложенности. Без такого объявления корректная обработка SGML-файла невозможна.
Отношение к XML и HTML
XML (Extensible Markup Language) был создан в 1996–1998 годах как упрощённое подмножество SGML, лишённое многих сложных и необязательных возможностей последнего. Основные отличия:
- XML требует строго закрытых элементов и закрывающих тегов;
- значения атрибутов всегда заключаются в кавычки;
- опциональность тегов не допускается;
- документ должен иметь единственный корневой элемент;
- синтаксический анализ однозначен и не зависит от контекста.
HTML (HyperText Markup Language) изначально разрабатывался на основе SGML, и его ранние версии (до HTML 4.01 включительно) являлись приложениями SGML — то есть имели формальное DTD. Начиная с HTML5, разрыв прямой связи с SGML стал полным, хотя синтаксис остался похожим.
Применение
SGML используется в системах управления документацией, где требуется долговременная сохранность данных и возможность обработки без модификации разметки:
- Издательское дело — вёрстка технических и научных книг, энциклопедий (например, система DynaText, FrameMaker+SGML);
- Авиастроение и оборонная промышленность — создание и сопровождение технической документации (в том числе по стандартам ATA iSpec 2200, S1000D);
- Правительственные и юридические документы — хранение законов, постановлений, нормативных актов (например, системы US Code на основе SGML);
- Архивное хранение — конвертация электронных документов в формат SGML для предотвращения потери данных при смене программного обеспечения.
Критика
SGML критикуется за:
- высокую сложность синтаксического анализа и трудоёмкость создания парсеров;
- избыточность для большинства современных веб-проектов;
- слабую поддержку в современных веб-браузерах и редакторах кода;
- отсутствие унифицированной модели обработки ошибок (в отличие от XML, где ошибки приводят к остановке парсинга).
Тем не менее, SGML сохраняет историческое значение как предшественник XML и основа для многих корпоративных стандартов документооборота.
См. также
- XML
- HTML
- DTD
- GML (IBM)
- ISO 8879
Источники
- ISO 8879:1986 — Information processing — Text and office systems — Standard Generalized Markup Language (SGML)
- Goldfarb, Charles F. The SGML Handbook. Oxford University Press, 1990. ISBN 0-19-853737-9
- Bray, Tim, et al. «Extensible Markup Language (XML) 1.0 (Fifth Edition)», W3C Recommendation, 2008
- Connolly, Dan. «HTML 4.01 Specification». W3C Recommendation, 1999
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →