Skip to main content

语言、协议、Schema、规范的联系与区别

· 4 min read

Schema

Schema 通常指对某一类概念的结构描述,侧重强调概念的结构特征。比如数据库的 Schema、Swagger 的 Schema、描述组件的 Schema。

由于经常用 JSON/YAML/XML 的语法形式表达,类似一份配置文件,所以在口语中也经常叫成配置。

下面是一份 NASL 描述组件定义的 Schema(用 YAML 的语法表示):

- name: u-list-view
title: 数据列表
icon: list-view
description: 用于列举大量数据的列表框,支持单选、多选、过滤(搜索)、分页等功能。
attrs:
- name: data-source
title: 数据源
type: DataSourceParams => List<T>
description: 列表的数据源,数据集对象或者返回数据集的逻辑
group: 数据属性
- name: pageable
title: 可分页
type: boolean
default: false
group: 数据属性
- name: page-size
title: 每页数据条数
type: number
default: 50
group: 数据属性
slots:
- concept: Slot
name: item
description: 自定义选项的结构和样式
slotProps:
concept: Param
name: scope
type: ScopeOf<T>
events:
- name: select
title: 选择后
description: 选择某一项时触发。
params:
- name: event
type: ChangeItemEvent
description: 事件对象
methods:
- name: load
description: 带缓存地加载
params: []
- name: reload
description: 清除缓存,重新加载
params: []

协议(Protocol)

协议是指需要合作实现某种功能的双方必须共同遵从的一组约定,侧重强调不同团队之间的合作性和开发人员的实现原理。比如数据通信协议、远程调试协议、扩展协议等。

它的范围一般比 Schema 广,除了包括协议必需的结构描述,还会包括协议中的概念语义、双方通信的时序等。

这是一个 Debug Adapter Protocol 的例子。

在低代码领域,协议一般用于支持扩展能力:比如扩展组件、扩展函数库、扩展接口协议、用户认证等。

语言(Language)

语言是指用于人与计算机之间通信的媒介,侧重强调概念的语义特征和用户向计算机传递意图的表达能力。比如 CSS、Excel 公式、Java 等。

编程语言特指用来进行程序设计的语言。

除了一些通信时序等协议特有的概念,语言的范围比协议和 Schema 更广。语言会更关注:

  • 用户如何表达某个字段是日期时间、Email 等(统一的静态类型系统)
  • 在业务定制化场景中,用户如何更容易表达 a + b、数据查询时的布尔筛选条件等(表达式)
  • 用户如何更容易表达两个表之间的 Join、查询聚合等
  • ...

同时语言也会更关注:

  • 用户更易用的语法(文本或可视化)
  • 使用时的自动补全和语义检查
  • 怎样表达更接近用户认知
  • ...

在 NASL 中:

  • 语法树就是 NASL 的 Schema 部分;
  • 和 TypeScript 一样的 Declaration 机制就是扩展协议部分。

规范(Specification)

规范是指对上面三者制定标准的详细描述,也可能会包含一些工程规范等。

总结

最后用一张图来总结上面几者的关系: