我想创建一个2020-12元模式草案的方言。我希望方言禁止使用“元数据”元模式中的任何属性(标题、描述、默认值等)。换句话说,我希望从“主”元模式中删除元数据词汇表:
"$vocabulary": {
...
"https://json-schema.org/draft/2020-12/vocab/meta-data": true
字符串
怎么办?创建这种新的元模式方言需要哪些步骤?@Jason Desrosiers写了一个很棒的步骤列表(https://stackoverflow.com/a/63797644/1248535),用于创建draft 04元模式的方言。我猜创建2020-12元模式草案方言的步骤列表是完全不同的。
1条答案
按热度按时间ve7v8dk21#
实际上在说明书中有一个很好的例子。
从2019-09年开始,我们将元模式分解为几个,每个词汇表一个。首先要做的是删除你不想要的东西。
从2020-12基本元模式开始。
字符串
您不需要元数据词汇表,因此删除对它的引用。您还应该更改
$id
,因为这是您的元模式,而不是2020-12元模式草案。型
这会删除这些关键字的定义,但不会禁止它们。草案2020-12允许包含未知关键字,因此任何人仍然可以添加
title
。更重要的是,由于我们已经删除了title
的定义,他们可以添加任何他们想要的值:型
根据您的元模式,这将是一个有效的模式。
要禁用这些关键字,您有几个选项。
只禁用这些关键字
你有几个选择,但我认为这可能是最简单的:
型
它基本上说,这些属性的值都是无效的,实际上要求它们不存在。
禁止所有未知关键字
对于这种方法,您将向元模式添加
unevaluatedProperties: false
。这将禁止allOf
中列出的某个元模式中未定义的任何关键字。型