ZPL:ZeroMQ 属性语言
项目描述
ZeroMQ 属性语言 (ZPL) 定义了一种用于指定属性集的简约框架语言,表示为名称-值属性对的层次结构。
在此处查看原始规范:https ://rfc.zeromq.org/spec:4/ZPL/
目标
ZPL 旨在表示一个属性集,其中每个属性都有一个名称和一个值。属性是分层的,即属性可以包含其他属性。它旨在:
易于阅读和编辑,使用语义的视觉线索。
在语法方面要简约。
用任何编程语言解析都很简单。
可用作名称/值更新的连续流。
能够表示分层数据结构。
在数据类型方面保持中立。
将人为错误的风险降低到尽可能接近于零。
ZPL 的用例包括:
手动编辑的配置文件,可读性是关键。
流式数据交换。
流式记录。
规格
ZPL 是一种 ASCII 文本格式,它使用空格 - 行尾和缩进 - 用于框架和层次结构。ZPL 数据由一系列编码为名称/值对的属性组成,每行一个,其中名称可以是结构化的,其中值是无类型的字符串。
实现应将以下任何序列视为行尾:换行符 (%x0A)、回车符 (%x0D) 或回车符后跟换行符 (%x0A %x0D)。
下面是一个典型的 ZPL 文件示例:
1. ZPL configuration file example
1. This format is designed to be trivial to write and parse
#
context
iothreads = 1
verbose = 1 # Ask for a trace
main
type = zmq_queue
frontend
option
hwm = 1000
swap = 25000000
subscribe = "#2"
bind = tcp://eth0:5555
backend
bind = tcp://eth0:5556
笔记:
空格仅在属性名称和内部值之前才有意义。
以“#”开头的文本作为注释被丢弃。
每个非空行定义一个由名称和可选值组成的属性。
值是应用程序可以按照它希望的任何方式解释的无类型字符串。
整个值可以用单引号或双引号括起来,它们不构成值的一部分。
除右引号外的任何可打印字符在带引号的字符串中均有效。
以引号开头且不以匹配引号结尾的值被视为未引用。
没有转义引号字符串中的引号或其他字符的机制。
ZPL 中唯一的特殊字符是:空格、“#”、“=”以及单引号和双引号。
层次结构由缩进表示,其中子级比其父级缩进 4 个空格。
ZPL 文件中的第一个非空白字符始终是“#”或字母数字字符。
除非在有效引号内,否则将丢弃值之后的空格。
名称应符合以下语法:
name = *name-char
name-char = ALPHA | DIGIT | "$" | "-" | "_" | "@" | "." | "&" | "+" | "/"
理由和设计
ZPL 存在是因为替代方案不足:
XML 不能作为流读取或写入。
JSON 不能作为流读取或写入,并且由于项目列表之间的分隔符而难以编辑。
YAML 解析起来相对复杂。
UNIX 风格的配置语法不支持名称层次结构。
重要空白的使用可能会引起争议。它意味着比大括号等语法元素更容易手动创建和验证。它消除了对分隔符的需要。当来自不同来源的 ZPL 文件片段混合在一起时,固定的 4 字符缩进是为了避免混淆和错误。
缺乏类型意识和其他语义验证是故意的。ZPL 并不是一种形式语法,而是一种易于解析的名称/值对框架。它模拟 0MQ 框架数据,但不尝试检查或验证该数据。
积压
实现流的序列化
添加 travis CI
实现基于 Cython 的解析/序列化
变更日志
todo(基于 git commit 消息解析添加)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。