比YAML简单,优于CSV

时间:2015-04-29 14:28:52

标签: xml json csv yaml

我需要一个非常简单的输入语言给我的客户'需要。在我认识的人中XMLJSONYAMLCSV),XMLJSON无法使用(&{ #34;不该死的人类可读")。

CSV对于我的任务来说太简单了(有一些层次结构,某些属性可能附加到"项目")
YAML太复杂了。 ("文档? TL; DR ")

是否有一些众所周知的标准可以填补YAMLCSV之间的空白?或者我自己需要这样做?

问题出现了,因为我没有时间重新发明轮子。

UPD :(经过讨论后)

我的语言"应该类似于CSV,但不是那么简单 树结构有一个定义(模式,模板,模式)(somwhere,它不是我的交易)。
我必须为它的数据存储定义人类可读的语言。

各种"模式的非正式例子":

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)

如果世界上有类似的东西在使用,那么我应该看到它以避免陷阱 否则我应该为我的新巧妙语言申请专利))

2 个答案:

答案 0 :(得分: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

您可以拥有多个部分,每个部分都可以包含任意数量的变量。它没有JSONXML那么强大,因为你可以有超过1个嵌套元素,但是你可以像这样工作:

[section1]
my_var = 2

[section2]
parent_section = section1
my_other_var = 3

当然,您必须编写一些代码来处理这个用例,但它保持语法非常清晰,并且根据您的需要,这种格式可能就足够了。

我不知道您将使用哪种语言,但有implementation in Python(可能在大多数语言中)

它提供了人类可读,易于解析且非常强大的功能。

编辑:该示例来自Python文档(请参阅上面的链接)。

答案 1 :(得分:0)

这是一个老问题,但我回答的是未来的Google员工。

你可以使用像scheme / lisp这样的s表达式,如果用得很好的话,人们可以很容易地读/写,并且很容易为任何语言找到一个免费的解析器。

Python元组与scheme / lisp非常相似,其缺点是更加引用 - 冗长并且需要使用coma进行分离而不是空格,但具有在python中可立即解析的优点。

你可以这样认同:

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

或者像这样:

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

我自己并没有想到这一点,而是从这里得到了这个想法: http://jsdelfino.blogspot.com.br/2009/11/simpler-than-json.html