$defs是否可以從外部架構匯入整個部分(使用 JSON 架構草案 2020)?
例如,假設我有一組這樣的三個模式:
“根據”
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/base",
"$defs": {
"abc": {
"type": "string",
"pattern": "^[abcABC] $"
}
},
"type": "object",
"properties": {
"baseprop1": {
"title": "base property 1",
"$ref": "#/$defs/abc"
},
"baseprop2": {
"title": "base property 2",
"$ref": "#/$defs/abc"
}
}
}
“更好的”
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/better",
"$ref": "https://example.com/schemas/base",
"type": "object",
"properties": {
"betterprop": {
"title": "an additional, even better property!",
"$ref": "base#/$defs/abc"
}
}
}
“最好的”
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/best",
"$ref": "https://example.com/schemas/better",
"type": "object",
"properties": {
"bestprop": {
"title": "the best property!",
"$ref": "base#/$defs/abc"
}
}
}
在基地我已經$defs/abc定義了。我可以在其他兩種模式中將其參考為base#/$defs/abc.
但是我想做的是以某種方式將它的定義從base匯入到better中,這樣最好我可以將它參考為better#/$defs/abc而不是base#/$defs/abc.
有沒有辦法做到這一點?
至今:
最好地使用
#/$defs/abc是行不通的;雖然我實際上有點期待它,因為我希望頂層將所有內容都拉入每個模式,包括物件。(同樣我注意到,更好的也不起作用,即使我希望它給出頂級的)。$ref$defs#/$defs/abc$ref我試過更好:
"$defs": { "$ref": "base#/$defs" }但是隨后 AJV(至少)抱怨這
$ref不是一個物件/布林值(因為它是一個字串)。我也手動嘗試過"base#/$defs/",但預期也沒有用。我也嘗試過這個更好,再次揮手:
"$defs": { "allOf": [ { "$ref": "base#/$defs/" } ] }但是 AJV 再次抱怨(因為它是一個陣列)。
我真的沒有其他想法。
為什么$defs頂層沒有拉入物件$ref(即使例如properties物件被合并沒有問題),為什么$ref內部沒有作業$defs?這有可能嗎?如果是這樣,怎么做?
另請注意,我說的是“匯入”,但也許有某種“別名”型別的東西?我的最終目標是讓基地 $defs中的所有事物看起來好像它們實際上更好,從最好的 POV 來看。- 當然,沒有明確地將它們從base復制 粘貼到better。
uj5u.com熱心網友回復:
您可以使用$id關鍵字為您的定義提供一個新名稱以在參考中使用,因此您不必跟蹤它是在 base 中定義還是更好:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/base",
"$defs": {
"abc": {
"$id": "https://example.com/schemas/abc",
"type": "string",
"pattern": "^[abcABC] $"
}
},
...
}
https://json-schema.org/understanding-json-schema/structuring.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495974.html
