powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / В продолжение темы обсуждения YAML и прочее.
8 сообщений из 8, страница 1 из 1
В продолжение темы обсуждения YAML и прочее.
    #35363359
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, уважаемые разработчики!


Я вспомнил нашу с беседу с ErV по поводу языка определения данных (ЯОД) и решил
поднять новый топик, поскольку задача хранения конфигов с вложенностями возникла и у меня.

Основные требования - автономность, независимость от SQL-СУБД, и читабельность-принтабельность конфига.

Решил почитать гугл и вспомнить то что знаю, на предмет ЯОД и выбрать подходящий.

Значит, вот что я нашёл:

XML

YAML

OGDL

JSON

SDL

Lisp

Кратко, по каждому, что я нашёл.


XML

Долго останавливатся не буду. Отмечу лишь, что форма сериализации XML сложновата для восприятия человеком.
Особенно, если документ использует namespaces и большую вложенность тегов без indentation.

Образец исходника:

Код: plaintext
\n<?xml version=\'1.0\'?>\n<people location="Tokyo">\n    <person default="Akiko" friendly="true" >\n        <hobbies>\n            <hobby default="hiking" times_per_week="2" />\n            <hobby default="swimming" times_per_week="1" />\n        </hobbies>\n    </person>\n</people>\n

Есть также желание избавится от required-хедера, который мешает некоторым оптимизациям (эту тему следует рассмотерть отдельно).

Закрывающий тег и угловые символы-маркеры и обязательные кавычки также создаёт некоторый балласт для human-редактирования.

Из плюсов - несколько layers парсинга типа BYTES-Last-Big-Endian characters, National Characters, XML-Well-formatting, Macro-processing, XML-Validation, XML-Transformation.


YAML - Yet Another Markup Language

http://en.wikipedia.org/wiki/YAML

Про него написано - "human-readable data serialization format"

Образец:

Код: plaintext
\nreceipt:    Oz-Ware Purchase Invoice\ndate:         2007 - 08 - 06 \ncustomer:\n    given:   Dorothy\n    family:  Gale\n   \nitems:\n    - part_no:   A4786\n      descrip:   Water Bucket (Filled)\n      price:      1 . 47 \n      quantity:   4 \n\n    - part_no:   E1628\n      descrip:   High Heeled "Ruby" Slippers \n      price:      100 . 27 \n      quantity:   1 \n\nbill-to:  &id001\n    street: | \n             123  Tornado Alley\n            Suite  16 \n    city:   East Westville\n    state:  KS\n\nship-to:  *id001   \n\nspecialDelivery:  >\n    Follow the Yellow Brick\n    Road to the Emerald City.\n    Pay no attention to the \n    man behind the curtain.\n...\n

Из плюсов, отмечу явную декларированность типов данных

Код: plaintext
\na:  123                      # an integer\nb: "123"                   # a string, disambiguated by quotes\nc:  123 . 0                    # a float\nd: !!float  123              # also a float via explicit data type prefixed by (!!)\ne: !!str  123                # a string, disambiguated by explicit type\nf: !!str Yes               # a string via explicit type\ng: Yes                     # a boolean True\nh: Yes we have No bananas  # a string, "Yes" and "No" disambiguated by context.\n

и возможность записать список в двух формах

Код: plaintext
\n--- # Favorite movies\n- Casablanca\n- North by Northwest\n- Notorious\n

Код: plaintext
\n--- # Shopping list \n[milk, pumpkin pie, eggs, juice]\n

Минусы - использование spacers.



JSON

http://en.wikipedia.org/wiki/JSON

http://en.wikipedia.org/wiki/JSONJavaScript Object Notation, is a lightweight computer data interchange format. It is a text-based, human-readable format for representing simple data structures and associative arrays (called objects).


Образец исходника:

Код: plaintext
\n{\n     "firstName": "John",\n     "lastName": "Smith",\n     "address": {\n         "streetAddress": "21 2nd Street",\n         "city": "New York",\n         "state": "NY",\n         "postalCode":  10021 \n     },\n     "phoneNumbers": [\n         "212 555-1234",\n         "646 555-4567"\n     ]\n }\n

В энциклопедии также написано, что JSON имеет отношение к технологии Ajax.


OGDL

http://ogdl.sourceforge.net/

http://ogdl.sourceforge.net/
OGDL is a structured textual format that represents information in the form of graphs, where the nodes are strings and the arcs or edges are spaces or indentation.


Не берусь переводить т.к. не шибко силён в английском, но это что-то вроде "представления орграфа".

Образец исходника (некий общий случай иерархич. документа):

Код: plaintext
\nboot    /dev/hda\nlba32\nprompt\ntimeout  500 \ndelay    500 \nvga     normal\nroot    current\n\nimages\n  linux-devfs\n    kernel  /pkg/kernel/bzImage\n\n  linux-reiser\n    kernel  /pkg/kernel/bz- 2 . 2 . 19 -devfs-reiser\n\n  install\n    kernel  /pkg/kernel/bz- 2 . 2 . 19 -devfs-ram\n    initrd  /pkg-src/sorcerer-linux/initrd\n    append  root=/dev/ram0\n

Более интересный вариант. Третья вершина смотрит на первую (орграф).
Код: plaintext
\nnode1 -{ 1 }\n  node2\n  node3 +{ 1 }\n

Из минусов - настораживает злоупотребление spacers. Грамматика языка на них конкретно завязана как и в YAML.


SDL

http://www.ikayzo.org/confluence/display/SDL/Home

http://www.ikayzo.org/confluence/display/SDL/HomeThe Simple Declarative Language provides an easy way to describe lists, maps, and trees of typed data in a compact, easy to read representation.

Из комента следует, что - "...лёгкая форма представления деревьев, списков и карт."

Код: plaintext
\npeople location="Tokyo" {\n    person "Akiko" friendly=true {\n        hobbies {\n            hobby "hiking" times_per_week= 2 \n            hobby "swimming" times_per_week= 1 \n        }    \n    }\n\n    person "Jim" {\n        hobbies {\n            hobby "karate" times_per_week= 5       \n        }    \n    }\n}\n

Есть еще интересная форма задания элемента-по-умолчанию:

Код: plaintext
\npeople location="Tokyo" {\n    "Akiko" friendly=true {\n        hobbies {\n            "hiking" times_per_week= 2  skill_level= 5 \n            "swimming" times_per_week= 1 \n        }    \n    }\n\n    "Jim" {\n        hobbies {\n            "karate" times_per_week= 5       \n        }    \n    }\n}\n



Lisp

Чтобы далеко не ходить за примером, привожу который уже писали в вышеупомянутом топике.

Код: plaintext
\n(defun update (selector-fn &key title artist rating (ripped nil\nripped-p))\n  (setf *db*\n        (mapcar \n         #\'(lambda (row)\n             (when (funcall selector-fn row)\n               (if title    (setf (getf row :title) title))\n               (if artist   (setf (getf row :artist) artist))\n               (if rating   (setf (getf row :rating) rating))\n               (if ripped-p (setf (getf row :ripped) ripped)))\n             row) *db*)))\n\n(defun delete-rows (selector-fn)\n  (setf *db* (remove-if selector-fn *db*)))\n

Что могу сказать.

Конвергенция кода и данных - это просто великолепно для тех, кто кодит искусственный интеллект. Однако для human-readable немножко страдает.


В качестве вывода (для себя):

Субъективно, нравится SDL, хотя, аргументов в пользу его использования
я пока не нашёл в достаточном количестве. Поддержку API языков программирования
для SDL я пока не рассматривал.

Прочие форматы описания конфигов, такие, как Windows property-bag, Java-properties, Linux-like
properties e.t.c я не рассматривал, т.к. считаю, что они не годятся на роль ЯОД или на роль
языка "описания знаний".

Бинарники типа db, dbm я не рассматривал по понятным причинам.

Вот, в общем-то пока всё.. если у кого-то есть свои мысли - пишите.

P.S. Возможно я чего-то упустил или забыл какой-то ЯОД. Это вполне может быть. Так-что извините.
...
Рейтинг: 0 / 0
В продолжение темы обсуждения YAML и прочее.
    #35363744
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton по поводу языка определения данных (ЯОД)
Вообще-то д.б. два языка - описания структуры данных и описание самих данных. И они ессно д.б. связаны. YAML можно взять за основу.
...
Рейтинг: 0 / 0
В продолжение темы обсуждения YAML и прочее.
    #35364225
Фотография Frenzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если конфиги надо писать/редактировать руками, то YAML, в ином случае - XML
настораживающие вас spacers - это плюс, а не минус, потому что это удобно
...
Рейтинг: 0 / 0
В продолжение темы обсуждения YAML и прочее.
    #35364535
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было несколько неприятных случаев по работе, связанных с невозможностью распечатать на принтере исходники одного ЯП. Тоесть, распечатать из было конечно можно, только после печати в режиме autowrap words, исходники потеряли свой смысл. С тех пор я подозрительно отношусь с грамматике завязанной на количестве spacers между ключевыми словами ЯП.

Впрочем это ИМХО.
...
Рейтинг: 0 / 0
В продолжение темы обсуждения YAML и прочее.
    #35366871
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБыло несколько неприятных случаев по работе, связанных с невозможностью распечатать на принтере исходники одного ЯП. Тоесть, распечатать из было конечно можно, только после печати в режиме autowrap words, исходники потеряли свой смысл.То же самое будет с SDL: у него теги кончаются символом новой строки, поэтому если строку перевести, получится новый тег и ошибки синтаксиса не будет – в этом проявляется недостаток малой избыточности языка (для языка совсем без избыточности любая последовательность байт будет валидным документом). Проблемы с редактированием хмля не вижу, всё равно ни в одном из приведённых языков нет защиты от дурака, подобная защита реализуема единственным образом: специализированным редактором. Из приведённых языков хмл по читабельности превосходят разве что OGDL да SDL. Непонятно, чем не угодили неймспейсы; они как бы наоборот способствуют пониманию документа.
...
Рейтинг: 0 / 0
В продолжение темы обсуждения YAML и прочее.
    #35526576
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 maXmo

Расковырял SDL for Java. Namespaces тоже поддерживаются. Щас делаю поддержку SDL Serialization для своих библиотек.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
person:random_guy // nice guy
person:grandparent3 name="Harold" age= 93  {
	person:child name="Sabrina" age= 93  smoker=false { #comment here...
		person:son name="Joe" -- a bit odd...
		person:daughter public:name="Akiko" private:smokes=true \
			public:birthday= 1976 / 04 / 18 
		dog name="Spot"
		/* cat name="Scratches" */
	}
	/*
	person:drunk_uncle funny_drunk=false {
		person:angry_daughter name="Jill"
	}
	*/
	person:child name="Jose" {
		person:son
		person:daughter
	}
}
...
Рейтинг: 0 / 0
В продолжение темы обсуждения YAML и прочее.
    #35527380
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно стало, такую штуку он как поймёт?
Код: plaintext
person:son person:daughter
пустой атрибут daughter или неименованное значение "person:daughter"?
...
Рейтинг: 0 / 0
В продолжение темы обсуждения YAML и прочее.
    #35527648
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хотел бы обратить уважаемое собрание на обмен данными в формате JSON.
Вольшинство форматов обмена данными появились как бы из воображения -
а JSON прямо из жизни. На самом деле это немного упрощенный синтаксис конструкторов объектов в JavaScript. Среди его преимуществ
1. Строгость и определенность (ведь это ЯП)
2. Простота и изящество (особенно в сравнении с XML)
3. Полное соответсвие объектной модели данных - веддь это конструкторы объектов.

и что особенно приятно - возможность в некоторых языках, например в JavaScript, а теперь и в PHP5 при помощи вызова функции преобразовавь строку JSON в объект или ассоциативный массив
(eval, json_decode)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / В продолжение темы обсуждения YAML и прочее.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]