【问题标题】:Simpler than YAML, better than CSV比 YAML 更简单,比 CSV 更好
【发布时间】:2015-07-08 21:55:42
【问题描述】:

我需要一种非常简单的输入语言来满足客户的需求。在我认识的人中(XMLJSONYAMLCSV)、XMLJSON 不能使用(“该死的人类可读性不强”)。

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

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

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

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)

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

【问题讨论】:

  • 愚蠢的问题:你为什么要重新设计轮子而不使用已经广泛使用的东西?必须处理您自定义的“比 yaml-better-than-csv”的东西(维护者)的人会讨厌您让他们不得不学习另一种标记语言(不是双关语。)。
  • 非常好的问题)我只是不想发明任何东西。我让他们使用 XML。当发现所有标签都变成 === <node> 时,问题就出现了。他们讨厌不必要的尖括号......所以我需要“like XML”但没有标签(?)。

标签: xml json csv yaml


【解决方案1】:

配置文件有一个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 强大,因为您可以拥有多个嵌套元素,但您可以像这样解决它:

[section1]
my_var = 2

[section2]
parent_section = section1
my_other_var = 3

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

我不知道您要使用哪种语言,但有一个 implementation in Python(可能是大多数语言)

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

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

【讨论】:

  • 混淆复杂)他们需要半页描述的东西......我突然想到 XML 可能没问题,但是“没有这些可怕的尖括号”。可能是使用标签来做嵌套级别的吗?你知道这样一种语言吗?
  • 我会澄清我的答案
  • 好吧,这可能是一条出路。我必须想一想。感谢推动)
  • 您使用什么语言?你可以试一试,看看是否符合你的要求。
  • 编程语言现在不重要了。我们仍处于原型阶段。 (顺便说一句:我在解析“windows.ini”的地方找到了我非常旧的C 代码))输入语言的正式规范更为重要,因为以后很难更正。如果我找到合适的形式,那么我们可以讨论解析细节。我更喜欢javascript,但任何服务器端语言也可以。我与客户交谈,我会尽快澄清我的问题
【解决方案2】:

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

您可以使用类似 scheme/lisp 中的 s 表达式,如果识别得当,人类读/写相当简单,而且应该很容易找到适用于任何语言的免费解析器。

Python 元组与 scheme/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

【讨论】:

    猜你喜欢
    • 2011-11-21
    • 2018-01-02
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多