stringtranslate.com

Стандартный обобщенный язык разметки

Стандартный обобщенный язык разметки ( SGML ; ISO 8879:1986) — это стандарт для определения обобщенных языков разметки для документов. Приложение A.1 ISO 8879 гласит, что обобщенная разметка «основана на двух постулатах »: [1]

DocBook SGML и LinuxDoc являются примерами использования инструментов SGML.

Стандартные версии

SGML — это стандарт ISO : «ISO 8879:1986 Обработка информации. Текстовые и офисные системы. Стандартный обобщенный язык разметки (SGML)», которого существует три версии:

SGML является частью трех стандартов ISO для электронных документов , разработанных ISO/IEC JTC 1/SC 34 [1] [2] (Объединенный технический комитет ISO/IEC 1, Подкомитет 34 – Языки описания и обработки документов):

SGML поддерживается различными техническими отчетами, в частности

История

SGML произошел от IBM Generalized Markup Language ( GML), который Чарльз Гольдфарб , Эдвард Мошер и Рэймонд Лори разработали в 1960-х годах. Гольдфарб, редактор международного стандарта, придумал термин «GML», используя инициалы своей фамилии. [5] Гольдфарб также написал исчерпывающую работу по синтаксису SGML в «Справочнике SGML». [6] Синтаксис SGML ближе к формату COCOA . [ необходимы пояснения ] Как язык разметки документов, SGML изначально был разработан для обеспечения совместного использования машиночитаемых документов крупных проектов в правительстве, законодательстве и промышленности. Многие такие документы должны оставаться читабельными в течение нескольких десятилетий — долгое время в области информационных технологий . SGML также широко применялся в военной, аэрокосмической, технической справочной и промышленной издательской отраслях. Появление профиля XML сделало SGML пригодным для широкого применения в небольших масштабах и общего назначения.

Срок действия документа

SGML (ENR+WWW) определяет два вида действительности. Согласно пересмотренным терминам и определениям ISO 8879 (из общедоступного проекта [7] ):

Соответствующий документ SGML должен быть документом SGML с допустимым типом, документом SGML с допустимыми тегами или и тем, и другим. Примечание. Пользователь может захотеть применить к документу дополнительные ограничения, например, хранится ли экземпляр документа целиком или не содержит ссылок на сущности.

Документ SGML с допустимым типом определяется стандартом как

Документ SGML, в котором для каждого экземпляра документа имеется связанное объявление типа документа (DTD), DTD которого соответствует этот экземпляр.

Документ SGML с поддержкой тегов определяется стандартом как

Документ SGML, все экземпляры которого полностью помечены. Не обязательно должно быть объявление типа документа, связанное с каким-либо экземпляром. Примечание. Если существует объявление типа документа , экземпляр можно проанализировать со ссылкой на него или без нее.

Терминология

Валидность тегов была введена в SGML (ENR+WWW) для поддержки XML , который позволяет использовать документы без объявления DOCTYPE, но которые можно анализировать без грамматики, или документы с объявлением DOCTYPE, которое не вносит в документ никакого вклада XML Infoset . Стандарт называет это полностью тегированным . Интегрированное хранение отражает требование XML о том, что элементы заканчиваются той же сущностью, в которой они начались. Отсутствие ссылок отражает требование HTML о том, что ссылки на объекты содержат специальные символы и не содержат разметки. Комментарий к действительности SGML, особенно комментарий, сделанный до 1997 года или не знающий SGML (ENR+WWW), охватывает только валидность типа .

Акцент SGML на достоверности поддерживает требование к обобщенной разметке, согласно которому разметка должна быть строгой. (ИСО 8879 А.1)

Синтаксис

Документ SGML может состоять из трех частей:

  1. Декларация SGML,
  2. Пролог, содержащий объявление DOCTYPE с различными объявлениями разметки , которые вместе составляют определение типа документа (DTD), и
  3. сам экземпляр, содержащий один самый верхний элемент и его содержимое.

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

Хотя полный SGML допускает неявную разметку и некоторые другие виды тегов, спецификация XML (s4.3.1) гласит:

Каждый XML-документ имеет как логическую, так и физическую структуру. Физически документ состоит из единиц, называемых сущностями. Объект может ссылаться на другие объекты, чтобы вызвать их включение в документ. Документ начинается с «корня» или сущности документа. Логически документ состоит из объявлений, элементов, комментариев, ссылок на символы и инструкций обработки , которые обозначаются в документе явной разметкой.

Вводную информацию об основном современном синтаксисе SGML см. в разделе XML . Следующий материал посвящен функциям, отсутствующим в XML, и не является исчерпывающим обзором синтаксиса SGML.

Дополнительные возможности

SGML обобщает и поддерживает широкий спектр языков разметки, появившихся в середине 1980-х годов. Они варьировались от краткого синтаксиса, подобного Wiki , до языков в скобках, подобных RTF , и языков с соответствующими тегами, подобных HTML . SGML сделал это с помощью относительно простого ссылочного конкретного синтаксиса по умолчанию , дополненного большим количеством дополнительных функций, которые можно было включить в декларации SGML. Не каждый анализатор SGML может обрабатывать каждый документ SGML. Поскольку системную декларацию каждого процессора можно сравнить с декларацией SGML документа, всегда можно узнать, поддерживается ли документ конкретным процессором.

Многие функции SGML связаны с минимизацией разметки. Другие функции относятся к параллельной (параллельной) разметке (CONCUR), связыванию атрибутов обработки (LINK) и встраиванию документов SGML в документы SGML (SUBDOC).

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

Конкретный и абстрактный синтаксис

Обычный конкретный синтаксис SGML (по умолчанию) похож на этот пример, который является конкретным синтаксисом HTML по умолчанию :

<QUOTE TYPE= "example" > обычно что-то вроде <ITALICS> это </ITALICS> </QUOTE>     

SGML предоставляет абстрактный синтаксис , который может быть реализован во многих различных типах конкретного синтаксиса . Хотя норма разметки использует угловые скобки в качестве разделителей начального и конечного тегов в документе SGML (согласно стандартному ссылочному конкретному синтаксису ), можно использовать и другие символы — при условии, что подходящий конкретный синтаксис определен в SGML документа. декларация. [8] Например, интерпретатор SGML может быть запрограммирован для анализа GML, в котором теги разделяются левым двоеточием и правой точкой , а :eпрефикс обозначает конечный тег: :xmp.Hello, world:exmp.. Согласно ссылочному синтаксису, регистр букв (верхний или нижний регистр) в именах тегов не различается, поэтому три тега <quote>, <QUOTE>и <quOtE>эквивалентны. (Конкретный синтаксис может изменить это правило с помощью объявлений NAMECASE NAMING.)

Минимизация разметки

SGML имеет функции для уменьшения количества символов, необходимых для разметки документа, которые необходимо включить в декларации SGML. Процессорам SGML не обязательно поддерживать все доступные функции, что позволяет приложениям допускать многие типы непреднамеренных пропусков разметки; однако системы SGML обычно нетерпимы к недопустимым структурам. XML нетерпим к синтаксическим упущениям и не требует DTD для проверки правильности формата.

ОМИТТАГ

Как начальные, так и конечные теги могут быть опущены в экземпляре документа при условии:

  1. функция OMITTAG включена в декларации SGML,
  2. DTD указывает, что теги можно опускать,
  3. (для начальных тегов) элемент не имеет связанных с ним обязательных #REQUIREDатрибутов ( ) и
  4. тег может быть однозначно выведен из контекста.

Например, если в объявлении SGML указано OMITTAG YES (включение функции OMITTAG), а DTD включает следующие объявления:

<!ELEMENT  глава  -  -  ( заголовок ,  раздел +) > <!ELEMENT  заголовок  o  o  ( #PCDATA ) > <!ELEMENT  раздел  -  -  ( заголовок ,  подраздел +) >

тогда этот отрывок:

<глава> Введение  в  SGML <раздел> Декларация SGML  < подраздел> ...

в котором отсутствуют два <title>тега и два </title>тега, будет представлять собой допустимую разметку.

Пропускать теги необязательно — тот же отрывок можно пометить следующим образом:

<chapter><title> Введение  в  SGML </title> <section> <title> Декларация  SGML  </title> <subsection>...

и по-прежнему будет представлять собой действительную разметку.

Примечание. Функция OMITTAG не связана с маркировкой элементов, объявленное содержимое которых соответствует EMPTYопределению в DTD:

<!ELEMENT  изображение  -  o  EMPTY >

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

ШОРТРЕФ

Теги можно заменить строками-разделителями для более краткой разметки с помощью функции SHORTREF. Этот стиль разметки теперь связан с разметкой вики , например, где два знака равенства (==) в начале строки являются «начальным тегом заголовка», а два знака равенства (==) после него являются « конечный тег заголовка".

КОРОТКИЙ ТЭГ

Языки разметки SGML, конкретный синтаксис которых включает функцию SHORTTAG VALUE, не требуют, чтобы значения атрибутов, содержащие только буквенно-цифровые символы, были заключены в кавычки — двойные " "(LIT) или одинарные ' '(LITA) — чтобы можно было записать предыдущий пример разметки:

<QUOTE TYPE= пример > обычно что-то вроде <ITALICS> это < /> </QUOTE>     

Одной из особенностей языков разметки SGML является «самонадеянная пустая маркировка», при которой пустой конечный тег </>« <ITALICS>this</>наследует» свое значение от ближайшего предыдущего полного начального тега, который в этом примере <ITALICS>(другими словами, он закрывает наиболее недавно открытый элемент). Таким образом, выражение эквивалентно <ITALICS>this</ITALICS>.

СЕТЬ

Еще одной особенностью является конструкция NET (Null End Tag): <ITALICS/this/, которая структурно эквивалентна <ITALICS>this</ITALICS>.

Другие особенности

Кроме того, функция SHORTTAG NETENABL IMMEDNET позволяет сокращать теги, окружающие пустое текстовое значение, но запрещает сокращение полных тегов:

<ЦИТАТА></ЦИТАТА>

можно записать как

<ЦИТАТА// 

где первая косая черта ( / ) обозначает «закрытие начального тега» (NESTC), позволяющее использовать NET, а вторая косая черта обозначает NET. ПРИМЕЧАНИЕ. XML определяет NESTC с помощью / , а NET — с помощью > (угловой скобки) — следовательно, соответствующая конструкция в XML отображается как <QUOTE/> .

Третья функция — это «текст на одной строке», позволяющий завершать элемент разметки концом строки; особенно полезно для заголовков и тому подобного, требующих использования минимизации SHORTREF или DATATAG. Например, если DTD включает следующие объявления:

<!ELEMENTlines  (  строка * ) > <!ELEMENT  строка  O  -  ( #PCDATA ) > <!ENTITY  line-tagc  "</line>" > <!SHORTREF  однострочный  "&#RE;&#RS;"  line-tagc > <!USEMAP  однострочная  строка >

(а «&#RE;&#RS;» — это короткий разделитель ссылок в конкретном синтаксисе), тогда:

<строки>
первая  строкавторая  строка </lines>

эквивалентно:

<lines> <line> первая  строка </line> <line> вторая  строка </line> </lines>

Формальная характеристика

SGML имеет множество особенностей, которые не поддаются удобному описанию с помощью популярной теории формальных автоматов и современной технологии синтаксического анализа 1980-х и 1990-х годов. Стандарт предупреждает в Приложении H:

Нотация группы модели SGML была намеренно разработана так, чтобы напоминать нотацию регулярных выражений теории автоматов , поскольку теория автоматов обеспечивает теоретическую основу для некоторых аспектов понятия соответствия модели контента. Не следует делать никаких предположений об общей применимости автоматов к моделям контента.

В отчете о ранней реализации анализатора базового SGML, Amsterdam SGML Parser, [9] отмечается:

DTD-грамматика в SGML должна соответствовать понятию однозначности, которое очень похоже на условия LL(1).

и указывает различные различия.

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

XML описывается как обычно анализируемый, как двухуровневая грамматика для непроверенного XML и конвейер сопрограмм в стиле Конвея ( лексер , синтаксический анализатор , валидатор ) для валидного XML. [10] Сообщается, что продукция SGML в стандарте ISO имеет статус LL(3) или LL(4). [11] Сообщается, что подмножества XML-класса можно выразить с помощью W-грамматики . [12] Согласно одной статье, [13] и, вероятно, рассматривается на уровне информационного набора или дерева синтаксического анализа , а не на уровне символов или разделителей:

Класс документов, которые соответствуют данной грамматике документа SGML , образует язык LL(1). ... Однако грамматики документов SGML сами по себе не являются грамматиками LL(1).

Стандарт SGML не определяет SGML с формальными структурами данных, такими как деревья синтаксического анализа ; однако документ SGML состоит из корневого направленного ациклического графа (RDAG) физических единиц хранения, известных как « сущности », который анализируется в RDAG структурных единиц, известных как «элементы». Физический граф условно можно охарактеризовать как дерево сущностей , но сущности могут появляться несколько раз. Более того, граф структуры также в общих чертах характеризуется как дерево элементов , но разметка ID/IDREF допускает произвольные дуги.

Результаты парсинга также можно понимать как дерево данных в разных обозначениях; где документ является корневым узлом, а объекты в других обозначениях (текст, графика) — дочерними узлами. SGML предоставляет устройство для связывания и аннотирования внешних объектов, отличных от SGML.

Стандарт SGML описывает это с точки зрения карт и режимов распознавания (s9.6.1). Каждая сущность и каждый элемент могут иметь связанную нотацию или объявленный тип контента , который определяет типы ссылок и тегов, которые будут распознаваться в этой сущности и элементе. Кроме того, каждый элемент может иметь связанную карту разделителейкороткую справочную карту ), которая определяет, какие символы рассматриваются как разделители в контексте. Стандарт SGML характеризует синтаксический анализ как конечный автомат , переключающий режимы распознавания. При парсинге идет стек карт, которые настраивают сканер , а токенизатор относится к режимам распознавания.

Анализ включает в себя перемещение динамически извлекаемого графа объектов, поиск/подразумевание тегов и структуры элемента, а также проверку этих тегов на соответствие грамматике. Необычным аспектом SGML является то, что грамматика (DTD) используется как пассивно — для распознавания лексических структур, так и активно — для генерации недостающих структур и тегов, которые DTD объявили необязательными. Конечные и начальные теги можно опустить, поскольку они могут быть выведены. Грубо говоря, ряд тегов можно опустить только в том случае, если в грамматике существует единственный возможный путь, подразумевающий их. Именно такое активное использование грамматик затрудняло формальную характеристику конкретного синтаксического анализа SGML.

SGML использует термин «проверка» как для распознавания, так и для генерации. XML не использует грамматику (DTD) для изменения карт разделителей или для информирования о режимах синтаксического анализа и не допускает пропуска тегов ; следовательно, проверка элементов XML неактивна в том смысле, что активна проверка SGML. SGML без DTD (например, простой XML) — это грамматика или язык; SGML с DTD — это метаязык . SGML с объявлением SGML, возможно, является мета-метаязыком, поскольку это метаязык, механизм объявления которого является метаязыком.

SGML имеет абстрактный синтаксис, реализованный множеством возможных конкретных синтаксисов; однако это не то же самое использование, что и в абстрактном синтаксическом дереве , и в конкретном синтаксическом дереве . При использовании SGML конкретный синтаксис представляет собой набор конкретных разделителей, а абстрактный синтаксис — это набор имен разделителей. XML Infoset больше соответствует понятию абстрактного синтаксиса языка программирования, введенному Джоном Маккарти .

Производные

XML

W3C XML (Расширяемый язык разметки) — это профиль (подмножество) SGML , предназначенный для упрощения реализации анализатора по сравнению с полным анализатором SGML, в первую очередь для использования во Всемирной паутине. Помимо отключения многих параметров SGML, присутствующих в справочном синтаксисе (например, исключения тегов и вложенных вложенных документов), XML добавляет ряд дополнительных ограничений на типы синтаксиса SGML. Например, несмотря на включение сокращенных форм тегов SGML, XML не допускает незакрытые начальные или конечные теги. Он также опирался на многие дополнения, внесенные в Приложение WebSGML. XML в настоящее время используется более широко, чем полный SGML. XML имеет облегченную интернационализацию на основе Unicode . Приложения XML включают XHTML , XQuery , XSLT , XForms , XPointer , JSP , SVG , RSS , Atom , XML-RPC , RDF/XML и SOAP .

HTML

Хотя HTML (язык гипертекстовой разметки) разрабатывался частично независимо и параллельно с SGML, его создатель Тим Бернерс-Ли задумывал его как приложение SGML. [ нужна цитация ] Таким образом, дизайн HTML был вдохновлен тегами SGML, но, поскольку не было установлено четких правил расширения и анализа, большинство реальных документов HTML не являются действительными документами SGML. Позже HTML был переформулирован (версия 2.0), чтобы стать скорее приложением SGML; однако язык разметки HTML имеет множество устаревших функций и функций обработки исключений, которые отличаются от требований SGML. HTML 4 — это приложение SGML, полностью соответствующее стандарту ISO 8879 — SGML. [14]

В уставе возрожденной в 2006 году Рабочей группы Консорциума Всемирной паутины по HTML говорится: «Группа не будет предполагать, что анализатор SGML используется для «классического HTML » ». [15] Хотя синтаксис HTML очень похож на синтаксис SGML со ссылочным конкретным синтаксисом по умолчанию , HTML5 отказывается от любых попыток определить HTML как приложение SGML, явно определяя свои собственные правила синтаксического анализа, [16] которые более точно соответствуют существующим реализациям и документам. Однако он определяет альтернативную сериализацию XHTML , которая соответствует XML и, следовательно, также SGML. [17]

ОЭД

Фрагмент Оксфордского словаря английского языка (1985 г.), показывающий разметку SGML.

Второе издание Оксфордского словаря английского языка (OED) полностью размечено с помощью языка разметки на основе SGML с использованием текстового редактора LEXX . [18]

Третье издание размечено как XML.

Другие

Другие языки разметки документов частично связаны с SGML и XML, но, поскольку их нельзя анализировать, проверять или обрабатывать иным образом с использованием стандартных инструментов SGML и XML, они не считаются языками SGML или XML; Примером может служить язык разметки Z Format для набора текста и документации.

Некоторые современные языки программирования поддерживают теги как примитивные типы токенов или теперь поддерживают Unicode и сопоставление шаблонов регулярных выражений . Примером может служить язык программирования Scala .

Приложения

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

Реализации с открытым исходным кодом

Важные реализации SGML с открытым исходным кодом включают:

SP и Jade, связанные процессоры DSSSL, поддерживаются проектом OpenJade и являются общими частями дистрибутивов Linux. Общий архив программного обеспечения и материалов SGML находится в SUNET. Исходный класс анализатора HTML в реализации Java от Sun System представляет собой анализатор SGML с ограниченными возможностями, использующий терминологию и концепции SGML.

Смотрите также

Рекомендации

  1. ^ ab ISO (5 марта 2008 г.). «JTC 1/SC 34 – Языки описания и обработки документов». ИСО . Проверено 25 декабря 2009 г.
  2. ^ ISO JTC1/SC34. «JTC 1/SC 34 – Языки описания и обработки документов» . Проверено 25 декабря 2009 г.{{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  3. ^ ISO / IEC 10744 - Хайтайм
  4. ^ «ISO/IEC TR 9573» (PDF) . ИСО . 1991 год . Проверено 5 декабря 2017 г.
  5. ^ Гольдфарб, Чарльз Ф. (1996). «Корни SGML – личные воспоминания». Архивировано из оригинала 20 декабря 2012 года . Проверено 7 июля 2007 г.
  6. ^ Гольдфарб, Чарльз Ф. (1990). Справочник по SGML. Кларендон Пресс. ISBN 9780198537373.
  7. ^ «Термины и определения проекта ISO 8879» .
  8. Волер, Уэйн (21 июля 1998 г.). «Декларации SGML» . Проверено 17 августа 2009 г.
  9. ^ Эгмонд (декабрь 1989 г.). «Реализация амстердамского парсера SGML» (PDF) .
  10. Кэрролл, Джереми Дж. (26 ноября 2001 г.). «Совместный анализ RDF и XML» (PDF) . Hewlett Packard . Проверено 9 октября 2009 г.
  11. ^ "SGML: Grammar Productions" .
  12. ^ «Re: Другие проблемы с пробелами были Re: Правила пробелов (v2)» .
  13. ^ Брюггеманн-Кляйн. «Инструменты и методы создания компиляторов для анализаторов SGML: трудности и решения».
  14. ^ «Соответствие HTML 4–4: требования и рекомендации» . Проверено 30 декабря 2009 г.
  15. ^ Лилли, Крис ; Бернерс-Ли, Тим (6 февраля 2009 г.). «Устав рабочей группы HTML» . Проверено 19 апреля 2007 г.
  16. ^ «HTML5 — Анализ HTML-документов» . Консорциум Всемирной паутины . 28 октября 2014 года . Проверено 29 июня 2015 г.
  17. Дубост, Карл (15 января 2008 г.). «HTML 5, один словарь, две сериализации». Блог вопросов и ответов . W3C . Проверено 25 февраля 2009 г.
  18. ^ Коулишоу, МФ (1987). «LEXX — программируемый структурированный редактор». Журнал исследований и разработок IBM . 31 (1). IBM : 73. doi : 10.1147/rd.311.0073.

Внешние ссылки