Skip to main content

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 消息解析添加)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyzpl-0.1.9.tar.gz (5.6 kB 查看哈希

已上传 source

内置发行版

pyzpl-0.1.9-py3-none-any.whl (8.7 kB 查看哈希

已上传 py3

pyzpl-0.1.9-py2-none-any.whl (8.7 kB 查看哈希

已上传 py2