自从应用程序开始移动数据记录以来,我们就需要使用格式说明对这些记录进行批示。许多这些记录表示法格式为开发人员所熟悉。例如,根据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上为我们之星。