Описательная разметка
Система с описательной разметкой использует коды разметки, которые просто предоставляют названия для категоризации частей документа. Коды разметки, такие как <para> или \end{list}, просто идентифицируют порцию документа и утверждают, что "она является параграфом", или что "это -- конец последним начатого списка" и т.п. С другой стороны, система с процедурной разметкой определяет, какая обработка должна выполняться в конкретной точке документа: "в этом месте вызвать процедуру PARA с параметрами 1, b и x", или "передвинуть левую границу на 2мм левее, правую границу -- на 2мм правее, пропустить одну строку и встать на новую левую границу" и т.п. В SGML инструкции, необходимые для обработки документа с какой-либо конкретной целью (например, для форматирования), четко отделяются от описательной разметки, которая встречается внутри документа. Обычно они собраны вне документа в отдельных процедурах или программах.
С описательной, а не процедурной, разметкой один и тот же документ может быть обработан разнообразными программами, каждая из которых может применять различные инструкции обработки к тем его частям, которые она считает важными. Например, программа анализа содержимого может полностью игнорировать сноски, тогда как программа форматирования может извлекать и собирать их для печать в конце каждой части. Различные виды инструкций обработки могут ассоциироваться с одной и той же частью файла. Например, одна программа может извлекать из документа фамилии людей и географические названия для создания индекса или базы данных, тогда как другая, обрабатывающая тот же самый текст, может печатать фамилии и названия отличающимся шрифтом.