什么是 vega-schema
vega-schema 是在 Vega-Lite 规范的基础上,提供了进一步的数据类型定义和数据格式校验的 JSON Schema 实现。它允许利用 JSON Schema 来验证和编写可组合的数据源和数据转换操作。
Vega-Lite 规范允许用户用简短的语法定义图形,但不包括如何从数据源中获取数据或进行数据处理。 Vega-Lite 使用 Vega 数据分析和可视化语言实现大量的数据转换能力,但缺乏正式的架构或格式定义以确保正确的数据输入和输出格式。
vega-schema 可以用来为 JSON 数据源定义强类型约束(例如,输入每个维度的数据类型以及每个维度的位置等),从而更好地支持数据交互和数据共享。它还可以用来描述复杂的数据处理管道,包括多步操作和非线性操作。
安装
安装 vega-schema 命令如下:
npm install vega-schema
使用方法
定义 schema
要定义 vega-schema,请使用 JSON 格式并指定属性类型。例如以下定义包含一个 person
对象,它具有 name
和 age
属性:
-- -------------------- ---- ------- - ------- --------- ------------- - --------- - ------- --------- ------------- - ------- - ------- -------- -- ------ - ------- -------- - - - - -
从 schema 中生成数据
vega-schema 可以根据定义好的 schema 生成符合 schema 的数据,使用 vega.schema.generate
函数实现。例如,可以从上面的 schema 中生成一个 person 对象:
-- -------------------- ---- ------- ----- - -------- - - ----------------------- ----- ------ - - ------- --------- ------------- - --------- - ------- --------- ------------- - ------- - ------- -------- -- ------ - ------- -------- - - - - -- ----- ---- - ----------------- ------------------
输出结果:
{ person: { name: 'dqfzy', age: 92 } }
在数据上验证 schema
vega-schema 还可以用于在数据上进行类型和格式验证。 要这样做,请使用 vega.schema.validate
函数验证数据是否符合 schema 的规定。
-- -------------------- ---- ------- ----- - -------- - - ----------------------- ----- ------ - - ------- --------- ------------- - --------- - ------- --------- ------------- - ------- - ------- -------- -- ------ - ------- -------- - - - - -- ----- ---- - - ------- - ----- -------- ---- -- - -- ----- ------ - ---------------- ------ --------------------------
输出结果:
true
如果改变数据中任一属性的值类型,将无法通过验证:
const data = { person: { name: 'dqfzy', age: '92' } }; const result = validate(schema, data); console.log(result.valid);
输出结果:
false
总结
vega-schema 是 Vega-Lite 规范的扩展,提供了进一步的数据类型定义和数据格式校验的 JSON Schema 实现。我们可以定义强数据类型约束,从而更好地支持数据交互和数据共享。同时可以利用 vega-schema 进行数据类型和格式验证,避免将错误数据输入到我们的程序中。
使用 vega-schema 可以有效地减轻前端的数据处理负担,提高数据处理的效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedd5fcbb4e78292a6fb865