自从应用程序开始移动数据记录以来,我们就需要使用格式说明对这些记录进行批示。许多这些记录表示法格式为开发人员所熟悉。例如,根据IETF,JSON”为结构化数据的可移植表示定义了一组格式规则。 实际上,JSON 能够将值对、数组或一系列值描述为人类可读的文档。

同样,多产的 XML 标记语言使得将数据编码为人和机器可读的格式成为可能。如果没有 JSON 和 XML 提供的格式指令,计算机将缺少表达和分析文档所需的上下文。但是,当数据不能表示为文档时会发生什么情况?

例如,流数据不能充分表示为文档。文档是历史工件,是定义时间点的数据快照。相反,流数据是一个持续和不断更新的值序列;将流数据表示为文档就像尝试用水桶从消防软管中捕获所有水(而不会损失水压!开发人员需要一种对流数据进行批过,并为每个事件包括相关状态上下文的方法,而不是尝试将流数据表示为文档。换句话说,需要一种将对象符号与属性相结合的语言。这是重孔符号语言的动机。

什么是记录表示法(再记录)?

名称 Recon 是记录表示法的缩写。Recon 是具有属性的对象符号,有点像 JSON 和 XML 有孩子一样。重定属性有助于均匀消除多态结构的歧义。选择器、表达式和函数的一流语言扩展使 Recon 成为特定于域的语言的表达格式。Recon是开源泳波操作系统框架的一部分,可以在这里找到。

Recon 将 JSON 的简单性与 XML 的表现相结合。如下例所示,Recon 看起来有点像两者的混合体。然而,Recon看似简单:Recon的语法几乎比JSON的语法大。与 XML 或 JSON 相比,这种基本均匀性使 Recon 更具表现力,更一致。

下面是一个 Recon 示例:

@html {
  @head {
    @title "Greetings"
  }
  @body {
    @h1 "Introduction"
    @p [I have @a(href:"https://en.wikipedia.org/wiki/Markup_language")[markup syntax]
        for when you need it.  But I'm not a text chauvinist.  I'm a structured object
        notation first and foremost.  The numbers {1, 2, 3} are parsed as numbers,
        not strings.  Any my attributes make it easy to define, embed, and
        disambiguate microformats and domain specific languages.]
    @p [Need a microformat for time?  You'll find it falls out naturally after
        {{10 @minutes}} of using Recon.  Need to build a DSL for real-time GUI
        widgets?  Recon helps you do so cleanly and concisely, like this:]
    @pie {
      title: "Events"
      linkStats: @link(host: "warp://traffic.swim.services", node: "swim:meta:mesh", lane: "linkStats", type: value)
      @slice {
        value: $max(0.1, $rate($linkStats.downMessageCount))
        label: @text($percent($value, $total))
        legend: @text([Down ({$round($value)}/s)])
        innerRadius: 10 + 7.5 * $value / $max($value) @pct
        outerRadius: 20 + 7.5 * $value / $max($value) @pct
      }
      @slice {
        value: $max(0.1, $rate($linkStats.upMessageCount))
        label: @text($percent($value, $total))
        legend: @text([Up ({$round($value)}/s)])
        innerRadius: 10 + 7

5 = $value / $max($value)@pct
}
}
}
}

重孔中的数据类型

记录表示法有六种原始数据类型:文本、数据、num、bool、现有和不存在,以及一个聚合数据类型:记录。下面,我介绍了每种数据类型的简要说明。您可以在GitHub 上阅读有关 Recon 数据类型的更多内容。

  • 文本值:文本值采用两种形式之一,即带引号的字符串或未引用的标识符。

  • 数据值:二进制数据编码为前导%符号,后跟 base64 文本。

  • 数值:序列化为十进制文本的数字。

  • 布尔值:布尔由 true false 标识符表示。

  • 存在值:存在符号的东西已定义,但没有特定值。存在由需要值的空标记表示。

  • 缺失值:存在符号化已定义但未具有特定值的事物。

  • 记录值:记录扮演数组和关联数组的组合角色。将记录视为部分键控列表 – 某些项可能具有键,而其他项可能缺少键。数组是没有项具有键的记录。关联数组是每个项都有一个键的记录。对象是每个项都有文本键的记录。

对于第一次尝试Recon的用户,我建议从游泳操作系统教程开始。您还可以在swimOS 开发人员网站GitHub 上阅读更多有关 Recon 的一些内容。

了解更多信息

让我们知道你正在用开源的游泳操作系统平台建设什么。你可以在这里开始与游泳操作系统,并确保在GitHub上为我们之星。

Comments are closed.