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

Введение

Настоящая статья явилась плодом размышлений на тему построения динамических графических отчетов (графиков, диаграмм различного вида, схем) в рамках информационных систем различного назначения. Действительно, любая информационная система имеет набор выходных отчетов, которые собирают данные в более-менее сложном алфавитно-цифровом текстовом виде, как правило, в виде таблиц или списков. Однако подчас собираемые данные допускают их графическую интерпретацию в виде графиков, схем или диаграмм. Подобная графическая интерпретация позволяет легче и существенно быстрее анализировать полученные данные конечным пользователем. Эстетическую составляющая графических отчетов также нельзя недооценивать, поскольку появляется возможность создавать настоящие шедевры на основе сухих цифр.

Выходные отчеты создаются на некотором языке. В лудшем случае - это предметно-ориентированный специализированный язык конкретной информационной системы, в худшем - язык общего назначения или просто файл с уже подготовленным каким-то образом отчетом. Какой язык использовать для описания графических отчетов? И использовать ли его вообще? В мире известно достаточно большое количество языков описания графики - Postscript, PDF, VRML и т.д. Однако хотелось бы иметь максимально простой текстовый язык типа HTML, но ориентированный на описание графики. Стандарт XML позволяет создавать такие языки и они были созданы. Языки описания графов GXL, XGMML, GraphML и 2D-графики SVG (Scalable Vector Graphics) основаны на стандарте XML. Но знакомство с этими языками оставляет некоторое чувство неудовлетворенности. Это, прежде всего, их явная словесная избытчность и некоторая тяжеловесность, проистекающая конечно-же от самого стандарта XML.

Концепция теговой разметки с удивительной простотой синтаксиса нашла свое воплощение в языке GML (Graph Mark Language), изначально ориентированного на описание графов. Автор заимствовал идеи и структуру языка GML для решения задачи описания графических отчетов, убрав все предопределенные стандартом GML теги graph, node, edge и добавив теги, ориентированные на 2D-графику (и не только!). Полученный язык разметки, представляющий декларативную семантику, был расширен процедурной семантикой скриптового языка Lua. В результате появился язык LuaGML (Lua + Graphics Mark Language).

Таким образом, графический отчет по структуре представляет собой GML-текст. Поскольку графический отчет является обычным текстом, то для его формирования достаточно использовать существующие инструментальные средства выходных отчетов с той лишь разницей, что необходимо генерировать GML-элементы в соответствующей последовательности согласно логики отчета. Для визуализации графического отчета на языке LuaGML, как кстати и для любого другого графического формата, необходим собственный интерпретатор этого языка. Но об этом позже.