我正在尝试使用JSON Schema规范中的元模式示例。
我将新的主元模式放入一个名为new-main-meta-schema.json的文件中
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/meta/general-use-example",
"$dynamicAnchor": "meta",
"$vocabulary": {
"https://json-schema.org/draft/2020-12/vocab/core": true,
"https://json-schema.org/draft/2020-12/vocab/applicator": true,
"https://json-schema.org/draft/2020-12/vocab/validation": true,
"https://example.com/vocab/example-vocab": true
},
"allOf": [
{"$ref": "https://json-schema.org/draft/2020-12/meta/core"},
{"$ref": "https://json-schema.org/draft/2020-12/meta/applicator"},
{"$ref": "https://json-schema.org/draft/2020-12/meta/validation"},
{"$ref": "https://example.com/meta/example-vocab"}
],
"patternProperties": {
"^unevaluated": false
},
"properties": {
"localKeyword": {
"$comment": "Not in vocabulary, but validated if used",
"type": "string"
}
}
}
字符串
该元模式引用新的扩展模式。我把它放到一个名为**extension-schema.json的文件中
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/meta/example-vocab",
"$dynamicAnchor": "meta",
"$vocabulary": {
"https://example.com/vocab/example-vocab": true
},
"type": ["object", "boolean"],
"properties": {
"minDate": {
"type": "string",
"pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}",
"format": "date"
}
}
}
型
现在我创建了一个符合新的元模式的模式。我将模式放入名为schema.json的文件中
{
"$schema": "https://example.com/meta/general-use-example",
"type": "object",
"properties": {
"departingGate": {"type": "string"},
"minDate": "2023-08-07"
}
}
型
然后我创建了一个模式的示例。我将示例放入一个名为instance.json的文件中
{
"departingGate": "Gate 26"
}
型
看起来都对吗?
接下来,我想根据schema.json验证instance.json,所以我打开浏览器到online JSON Schema validator tool Hyperjump。我将new-main-meta-schema.json的内容复制到在线工具的schema部分。该工具立即响应此错误消息:
Error: Unrecognized vocabulary: https://example.com/vocab/example-vocab. You can define this vocabulary with the 'defineVocabulary' function.
型
有没有办法在Hyperjump的在线模式验证器中运行这个例子?如果没有,是否有一个在线模式验证器可以运行这个示例?
1条答案
按热度按时间gg58donl1#
有没有办法在Hyperjump的在线模式验证器中运行这个例子?
做了一些调整,是的。定义自定义方言的某些部分需要代码。任何需要代码的事情都不能在在线工具中完成。
您的示例创建了一个名为
minDate
的自定义关键字。为了让验证器知道如何计算该关键字,您需要在JavaScript(或TypeScript)中提供一个关键字实现。您不能在线提供代码,但是如果您的关键字只是一个注解(始终验证为true
),您可以将关键字的词汇表设置为可选,从而避免编写代码。下面是你如何使词汇成为可选的。
字符串
它也在词汇元模式中。实际上没有理由在这里使用
$vocabulary
,所以只需要删除它。型
现在它将在在线验证器中工作。如果您还没有弄清楚,可以使用
[+]
按钮向模式面板添加附加选项卡。第一个选项卡始终是入口点。这就是您创建的模式将去的地方。方言元模式和词汇表元模式将位于您打开的“模式2”和“模式3”选项卡中。警告:为了避免错误,请在将模式粘贴到主模式选项卡之前先添加元模式。此时,您将得到无效模式错误,因为您的模式无效。我想你是说这个
型