Формат ZML
Я придумал простой и удобный формат ZML (Zurin's Markup Language) в качестве альтернативы XML, JSON и другим универсальным форматам.
Преимущества формата ZML:
1) компактность, меньше лишних символов => файлы занимают меньший размер
2) наглядность и читабельность для человека
3) неограниченная расширяемость
4) простота разбора
Обозначения:
[a] - необязательное наличие a
a|b|...|z - или a, или b, ..., или z
"text" - текст "text", вводимый без изменений (без кавычек)
Синтаксис:
CHAR ::= любой выводимый символ, начиная с пробела
SEP ::= пробел, табуляция или перевод строки
ENDTEXTLINE ::= {" "|"\t"} ">" {" "|"\t"}
TEXTLINE ::= любая последовательность CHAR, кроме ENDTEXTLINE
ENDCOMMENTLINE ::= {" "|"\t"} {CHAR} ">#" {" "|"\t"}
COMMENTLINE ::= любая последовательность CHAR, кроме ENDCOMMENTLINE
DIGIT ::= 0|1|2|3|4|5|6|7|8|9
HEXDIGIT ::= DIGIT|A|B|C|D|E|F|a|b|c|d|e|f
LETTERORDIGIT ::= LETTER|DIGIT
IDENTIFIER ::= LETTER {LETTERORDIGIT}
VDECNUM ::= ["-"] DIGIT {DIGIT}
VHEXNUM ::= "0x" HEXDIGIT {HEXDIGIT}
VFLOATNUM ::= ["-"] DIGIT {DIGIT} "." DIGIT {DIGIT}
VCHAR ::= "\'" ["\\"] CHAR "\'"
VSTRING ::= "\"" CHAR {CHAR} "\""
VBOOL ::= "+" | "-"
VENUM ::= IDENTIFIER
VTEXT ::= "<" "\n" [TEXTLINE {"\n" TEXTLINE}] "\n" ENDTEXTLINE
NODE ::= "{" {SEP} LINE {SEP {SEP} LINE} {SEP} "}"
VALUE ::= VDECNUM|VHEXNUM|VFLOATNUM|VCHAR|VSTRING|VBOOL|VENUM|VTEXT|NODE
ONELINECOMMENT ::= "# " {CHAR} "\n"
MUTLILINECOMMENT ::= "#<" [COMMENTLINE {"\n" COMMENTLINE}] ENDCOMMENTLINE
COMMENT ::= ONELINECOMMENT|MULTILINECOMMENT
LINE ::= [IDENTIFIER SEP {SEP} VALUE] [{SEP} COMMENT]
Файл ::= LINE {{SEP} LINE}
И несколько примеров.
Описание конфигурации:
music - # музыка выключена
# графические настройки
screen {
# ширина и высота экрана
width 640
height 480
bpp 32 # бит/пиксель
doublebuffer + # включена двойная буферизация
}
Описание формы:
form {
# имя
name "Form1"
# заголовок
title "Main Form"
# шрифт
font {
size 12 # 12 пунктов
italic - # нет курсива
bold - # не полужирный
}
color red # цвет
# размеры
width 400
height 300
# обработчики событий
events {
onclick "Form1_click"
onclosing "Form1_closing"
onpaint "Form1_paint"
}
}
Описание дерева:
# корень "Root"
# имеет ветви "Wise A", "Wise B" и "Wise C"
name "Root"
wise {
# ветвь "Wise A"
# имеет подветви "Wise A-1" и "Wise A-2"
name "Wise A"
wise {name "Wise A-1"}
wise {name "Wise A-2"}
}
wise {
# ветвь "Wise B"
# имеет подветви "Wise B-1" и "Wise B-2"
name "Wise B"
wise {
# ветвь "Wise B-1"
# имеет подветви "Wise B-1-X" и "Wise B-1-Y"
name "Wise B-1"
wise {name "Wise B-1-X"}
wise {name "Wise B-1-Y"}
}
wise {name "Wise B-2"}
}
wise {name "Wise C"}
}
Текстовые данные:
#< А это пример
многострочного
#< (кстати, он может быть вложенным) >#
комментария. >#
name "Глава 1"
p <
Первый абзац
текста.
>
p <
Второй абзац
текста.
>
}
Думаю добавить еще массивы:
Смотри пункт "Преимущества ZML".
Вот пример той же конфигурации на XML:
<music>-</music>
<screen>
<width>640</width>
<height>480</height>
<bpp> 32</bpp>
<doublebuffer>+</doublebuffer>
</screen>
Или на JSON:
"sound" : true,
"music" : false,
"screen": {
"width" : 640,
"height" : 480,
"bpp": 32,
"doublebuffer": true
}
}
Или на YAML:
music: false
screen:
- width: 640
- height: 480
- bpp: 32
- doublebuffer: true
В каком формате файл имеет меньший размер?
В каком формате разбор файла больше, и он будет загружен быстрее?
В каком формате файл легко читается и редактируется человеком?
Очевидно - в формате ZML.
Да. Формат также обсуждается на форуме GameDev.ru:
http://www.gamedev.ru/flame/forum/?id=140660
Текстовые данные:
#< А это пример
многострочного
#< (кстати, он может быть вложенным) >#
комментария. >#
name "Глава 1"
p <
Первый абзац
текста.
>
p <
Второй абзац
текста.
>
}
Вот эти текстовые данные как-то вываливаются из общего стиля. html-щина какая-то... Ну и многострочные комментарии с вложениями смотрятся некрасиво. Многие редакторы поддерживают комментирование (разкомментирование) набора строк, так что эта фича не очень актуальна, а читаемость снижает.
Да. Без этого формат будет унылее, чем, например, JSON.
Вот пишу я на C#, я просто использую XML, т. к. это изначально встроено в .NET. Если понадобится большая компактность, я заюзаю, например, YAML - библиотеки для него имеются, скачивай и используй.
Для ныне популярных форматов - XML, YAML, HAML, JSON - готовые библиотеки есть для самых разных языков - C#, C++, Java, etc. То есть я могу записать данные на Шарпе, прочитать их на Жаве. Для вашего формата мне сначала придётся самому написать парсеры, а уже потом пользоваться. Не хочу! Лениво...
Вот будут в наличие a) готовые, b) надёжные, c) быстрые библиотеки для вашего формата для многих языков - тогда я обращу на него свой благосклонный взор. А до тех пор - ацтой!
По-моему, автор заслуживает поощрения отзывом за то, что старается что-то сделать. С другой стороны, автор заслуживает и порицания, поскольку изобретает велосипед. И опять же, по-моему изобретать форматы без крайней на то нужды - дело корпораций, а не одиночек: у последних форматы часто оказываются мёртворождёнными. Автор не понимает известного закона продаж: если вещь никому не нужна, её никто не купит.
Тут должен быть какой-то список, несортируемое множество, типа:
p
i "Тут должен" # текст курсивом
b "быть какой-то список," # полужирный
t "несортируемое множество" # обычный текст
br 4 # 4 перехода на другую строку
)
Как-то так. Обычный словарь не подойдёт, ибо он имеет право менять порядок слов.
Не особо изящно, зато не так уходит от общего стиля.
это как раз таки легко объяснить. Достаточно посмотреть на название "формата".
Ранее школота могла проявить свой "глубокий" внутренний мир вырезав на дереве "Здесь был вася", а сейчас меняет копирайты в убунте и создает свои "форматы". Технологии не стоят на месте.
[offtop]
Просто у меня самого был случай в школе, когда я сделал хороший (для тех времен и моего уровня): анализ веб-технологий, что хорошо, что плохо, статистики всякие.
А опередил меня на регионе (и вышел на Россию) человек, который изобрел "новый браузер". Новый браузер являлся прикручиванием стандартного движка IE через стандартные средства IDE (кидание на форму) - и все прям охали и охали от него и хвалили "новый хороший браузер". Тут походу то же самое, ну если автор школьник)
[offtop]
[offtop]
Просто у меня самого был случай в школе, когда я сделал хороший (для тех времен и моего уровня) анализ веб-технологий, что хорошо, что плохо, статистики всякие.
А опередил на регионе (и вышел на Россию) человек, который изобрел "новый браузер". Новый браузер являлся прикручивание стандартного движка IE через стандартные средства IDE (кидание на форму) - и все прям охали и охали от него и хвалили "новый хороший браузер". Тут похожу то же самое, ну если автор школьник)
[offtop]
мля, у нас в каждой школе по Попову есть штоли? богата же страна идиотами (больше проверяющими, нежели изобретающими)