LINUX.ORG.RU

Формат ZML


0

1

Зацените мой формат ZML (Zurin's Markup Language) как альтернативу XML.

Обозначения:

{a} - последовательность a, aa, aaa и т.д. (включая пустую)
[a] - необязательное наличие a
a|b|...|z - или a, или b, ..., или z
"text" - текст "text", вводимый без изменений (без кавычек)

Синтаксис:

LETTER ::= любая буква
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}

Несколько примеров.

Описание конфигурации:

sound + # звук включен
music - # музыка выключена
# графические настройки
screen {
  # ширина и высота экрана
  width 640
  height 480
  bpp 32 # бит/пиксель
  doublebuffer + # включена двойная буферизация
}

Описание формы:

# форма Form1
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 {
  # корень "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"}
}

Текстовые данные:

chapter {
  #< А это пример
      многострочного
      #< (кстати, он может быть вложенным) >#
      комментария. >#
  name "Глава 1"
  p <
    Первый абзац
    текста.
  >
  p <
    Второй абзац
    текста.
  >
}

Ваши предложения/критика?

Думаю, добавить еще массивы:

array [element1 element2 elementN]

PROFIT же от формата ZML очевиден:
1) компактность, меньше лишних символов => файлы занимают меньший размер
2) наглядность и читабельность для человека
3) неограниченная расширяемость
4) простота разбора

> PROFIT же от формата ZML очевиден:

Прежде чем рассуждать о профите стоило бы, однако, сначала осилить XML и JSON и понять разницу между ними. А то ты не понимаешь первого и, очевидно, никогда не слышал о втором.

archimag ★★★
()

так и хочется сказать: yaml, json

arhibot
()

> Зацените мой формат ZML (Zurin's Markup Language) как альтернативу XML.

конфиг довекота весь такой вот пушистый уже давно

1) компактность, меньше лишних символов => файлы занимают меньший размер

размер сильно неизменится

2) наглядность и читабельность для человека

у вас получается слияние свойств элемента и его детей

3) неограниченная расширяемость

кто мешает расширять xml

4) простота разбора

ещёодин паравоз разряда libxml ненужен

guilder
()

Черт, с геймдева набежали сюда..

Amp ★★★
()
Ответ на: комментарий от archimag

А в чем разница? Оба формата используются для хранения структурированных данных. Как и ZML.

Рассмотрим тот же пример с конфигурацией.

На XML ее можно записать так:

<sound>+</sound>
<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
  }
}

Как видно, в обоих случаях получается длиннее и труднее для разбора по сравнению с ZML.

Den_Zurin
() автор топика
Ответ на: комментарий от guilder

у вас получается слияние свойств элемента и его детей

Не вижу проблемы.

object {
  property1 value1
  property2 value2
  ...
  propertyN valueN
  child {
    name "child1"
    ...
  }
  child {
    name "child2"
    ...
  }
  ...
  child {
    name "childN"
    ...
  }
}
Den_Zurin
() автор топика
Ответ на: комментарий от Den_Zurin

ну вот ты говоришь-говоришь. А на деле --- ты изобрел недо-yaml. Осталось ссылки и мержи изобрести

arhibot
()
Ответ на: комментарий от Somniator
<sound enabled="true"/><music enabled="false"/><screen width="640" height="480" bpp="32" doublebuffer="true"/>

110 символов, 48 лексем

sound + music - screen {width 640 height 480 bpp 32 doublebuffer +}

67 символов, 27 лексем

В формате ZML короче и проще.

Den_Zurin
() автор топика
Ответ на: комментарий от Den_Zurin

> Оба формата используются для хранения структурированных данных

XML это формат публикации, со своими свойствами. Там есть атрибуты, пространства имён, всякие xi:xinclude, а также XPath, XSLT и прочие радости. Т.е. это такая развитая технология со множеством спецификаций. А не просто формат для хранения структурированных данных.

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

Т.е. с точки зрения технологии ваш формат никак не может тягаться с XML, а в качестве простого формата данных не может тягаться с JSON с точки зрения возможностей прикладного использования.

Вот и вопрос: зачем вы придумали сей велосипед?

archimag ★★★
()
Ответ на: комментарий от guilder

И что здесь нечитабельно? Трудно отличить значение от имени параметра? Поставь побольше пробелов. Например:

  propertyN   valueN
  child {
  ....

А XML что, читабельнее? Попробуй прочесть файлы в /etc/gconf

Den_Zurin
() автор топика
Ответ на: комментарий от archimag

> Там есть атрибуты, пространства имён, всякие xi:xinclude, а также XPath, XSLT и прочие радости. Т.е. это такая развитая технология со множеством спецификаций.

Это все важно в сетевом программировании. В этой области я не претендую на замену XML. Тем не менее, XML часто используется просто для хранения данных. В этой области ZML является лучшим решением.

JSON же это чистый формат данных, который, однако, лучше читать, чем ваш, проще писать

Чем лучше и проще? Пока я вижу, что в JSON много синтаксического сахара.

а в качестве простого формата данных не может тягаться с JSON с точки зрения возможностей прикладного использования.

Возьмем такой пример - разметка текста. Можно ли для этого использовать JSON? ZML и XML - можно.

Den_Zurin
() автор топика
Ответ на: комментарий от Den_Zurin

> Это все важно в сетевом программировании.

Нет, это важно для публикации. И вообще, это важно как технология.

Тем не менее, XML часто используется просто для хранения данных.


Бороться с глупостью с помощью изобретения нового формата не очень разумно.

что в JSON много синтаксического сахара.


Отлично, все любят сахар.

Возьмем такой пример - разметка текста. Можно ли для этого

использовать JSON? ZML и XML - можно.



Для разметки текста лучше использовать reStructuredText или другие подобные форматы.

archimag ★★★
()
Ответ на: комментарий от Den_Zurin

>Тем не менее, XML часто используется просто для хранения данных. В этой области ZML является лучшим решением.

Как без xslt и прочих xpath доставать данные с твоего формата? А есть удобное подобие DOM?

Пока я вижу, что в JSON много синтаксического сахара.

Главное в JSON то, что с ним действительно легко работать. Через js не нужно вообще париться, а в других языках есть простые либы. И весь сахар там как раз чтобы описать все распространённые структуры данных, которые известны.

anonymous
()

>Возьмем такой пример - разметка текста. Можно ли для этого использовать JSON? ZML и XML - можно.
Ты предлагаешь использовать формат, в котором пробел, табуляция и перевод строки являются в большинстве случаев значимыми символами, для разметки текста? Для какого рода разметки это пригодно?

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

>Ты предлагаешь использовать формат, в котором пробел, табуляция и перевод строки являются в большинстве случаев значимыми символами, для разметки текста? Для какого рода разметки это пригодно?

Для специальной Z-разметки, которую в скором времени придумает автор. Её главной особенностью будет нескучность.

anonymous
()
Ответ на: комментарий от Den_Zurin
JSON = {object:{
  property1:value1,
  property2:value2,
   ...
  propertyN:valueN,
  
  child:[{
       name:"child1"
       ....
    },
    {
       name:"child2"
       ....
    },
    {
       name:"child3"
       ....
    }
  ]
}}
//  ------- JAVASCRIPT
object = JSON.decode(JSON);
document.writeln(object.object.property);
document.writeln(object.object.child[2].name);
//---------- PHP 
$object = json_decode($JSON)
echo $object->object->property1;
echo $object->object->child[1].name;

и Чем он луче того же JSON'a

enep ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.