2015-04-29 3 views
2

Мне нужен очень простой язык ввода для нужд моих клиентов. Среди тех, кого я знаю (XML, JSON, YAML,), XML и JSON не могут быть использованы («не проклятье для человека»).Проще чем YAML, лучше, чем CSV

CSV слишком прост для моих задач (есть несколько иерархий, и некоторые атрибуты, может быть присоединены к «элементам»)
и YAML является слишком сложными. ("Документация TL;? DR")

Есть некоторые хорошо известный стандарт, который может заполнить пробел между YAML и CSV? Или мне нужно сделать это самостоятельно?

Вопрос возник из-за того, что у меня нет времени изобретать колеса.

UPD: (после некоторого обсуждения)

Мой "язык" должен быть похож на CSV, но не так просто.
Существует определение (схема, шаблон, шаблон) древовидной структуры (где-то, это не моя сделка).
Я должен определить язык, читаемый человеком, для его хранения данных.

Неформальные примеры различных "моделей":

Class -> kind -> species 
Menu -> submenu -> sub-submenu 
Panel -> subpanel -> control 

Примеры соответствующего содержания

animals [cat, dog, elephant {big, gray}], 
plants [deciduous [oak, maple, baobab], 
     other [fir, cactus] 
] 

File [New, Open, Save, Remove {disabled}], 
View [Text [ANSI {default}, UTF-8], 
    Binary, HTML], 
Help [On-line, Forum, About] 

Header {height:10} [Welcome, Controls [Help Button, Search Pane]], 
Main [Teaser, News, Articles [1, 2, ..., N]], 
Footer [Status Bar [?, ?], Powered By, Copyright notice {color: gold}] 

Так что мое предварительное определение требуемого языка:

Nodes are delimited by ',' (comma) or \n (line feed) 
Node may have optional set of attributes (in curly brackets) 
Node may have optional set (array) of subnodes (in square brackets) 

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

+0

глупый вопрос: почему вы хотите отвлечь колесо и не использовать то, что уже широко используется? Люди, которым придется иметь дело с вашей обычной «более простой, чем ямль-лучше, чем-csv» (поддерживающими), будут ненавидеть вас за то, что они вынуждены учиться. Язык разметки Anoter (каламбур не предназначен). – sfat

+0

Очень хороший вопрос) Я просто не хотел ничего изобретать. Я предложил им использовать XML. Проблема возникла, когда было обнаружено, что все теги превратились в === ''. Они ненавидят ненужные угловые скобки ... Так что мне нужно «как XML», но без тэгов (?). –

ответ

0

Для конфигурационных файлов есть RFC published.

Формат выглядит следующим образом:

[mysqld] 
user = mysql 
pid-file = /var/run/mysqld/mysqld.pid 
skip-external-locking 
old_passwords = 1 
skip-bdb 
skip-innodb 

Это работает так:

[section_name] 
my_variable = my_value 

Вы можете иметь несколько разделов, и каждый из них может иметь столько переменных, сколько вы хотите. Это не такой мощный, как JSON или XML, так как вы можете иметь более 1 вложенных элементов, но вы могли бы работать вокруг, как это:

[section1] 
my_var = 2 

[section2] 
parent_section = section1 
my_other_var = 3 

Конечно, вы должны написать код, чтобы иметь дело с этим прецедентом , но он сохраняет синтаксис довольно ясным, и в зависимости от ваших потребностей этого формата может быть достаточно.

Я не знаю, на каком языке вы собираетесь использовать, но есть implementation in Python (и, вероятно, в большинстве языков)

Это дает то, что является читаемым человеком, легко разобрать, и довольно мощный.

Редактировать: пример исходит из документации Python (см. Ссылку выше).

+0

Запутывание сложное) им нужно что-то с описанием на половину страницы ... Я вдруг подумал, что XML, вероятно, ОК, но «без этих ужасных угловых скобок». Может ли использовать вкладки для выполнения вложенного уровня? Вы знаете такой язык? –

+0

Я уточню свой ответ – Paco

+0

Хорошо, это может быть выход. Мне надо подумать. Спасибо за импульс) –

0

Это старый вопрос, но я отвечаю за будущих гуглеров.

Вы можете использовать s-выражения, как в схеме/lisp, что довольно просто для людей, чтобы читать/писать, если они хорошо идентифицированы, и должно быть легко найти свободный парсер для любого языка.

Корзины Python очень похожи на схему/lisp, а нижняя сторона более цитируется - многословная и нуждается в коме для разделения, а не в виде пробелов, но с точки зрения непосредственного анализа в python.

Вы можете IDENT это следующим образом:

(
    animals 
    (
     cat 
     dog 
     (
      elephant 
      (
       big 
       gray 
      ) 
     ) 
    ) 
) 

или как это:

(animals 
    (cat 
    dog 
    (elephant 
     (big 
     gray)))) 

Я не думаю, что это сам, но вместо этого получил идею отсюда: http://jsdelfino.blogspot.com.br/2009/11/simpler-than-json.html

Смежные вопросы