比YAML简单,比CSV更好

问题描述 投票:0回答:3

我需要一种非常简单的输入语言来满足客户的需求。在我知道的那些(

XML
JSON
YAML
CSV
)中,
XML
JSON
不能使用(“不是人类可读的”)。

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)

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

xml json csv yaml
3个回答
1
投票

有一个针对配置文件的RFC 已发布

格式如下:

[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

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

我不知道你要使用什么语言,但有一个 Python 中的实现(可能在大多数语言中)

它提供了人类可读、易于解析且非常强大的东西。

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


0
投票

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

您可以像在scheme/lisp中那样使用s-表达式,如果识别良好的话,对于人类来说读/写是相当简单的,并且应该很容易找到适用于任何语言的免费解析器。

Python 元组与 schema/lisp 非常相似,缺点是引用更加冗长,需要逗号而不是空格来分隔,但优点是可以在 python 中立即解析。

你可以这样识别:

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

或者像这样:

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

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


0
投票

Html、Htmx 和超脚本旨在便于人类阅读并通过网络发送。

© www.soinside.com 2019 - 2024. All rights reserved.