2016-12-13 65 views
0

路徑是E:\JSONSchema\Files\details.json怎能一個jsonschema鏈接到該文件的另一個jsonschema

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "properties": { 
     "id": { 
     "type": "string" 
     }, 
     "tagid": { 
     "type": "string" 
     } 
    }, 
    "required": [ 
     "id", 
     "tagid" 
    ], 
    "additionalProperties": false 
    } 
} 

我想重用上面jsonschema其中位於E:\JSONSchema\Core\visuals.json另一個文件。我怎樣才能實現它?

+0

與您的問題分開,您的示例架構中出現錯誤。該模式無效,因爲「必需」屬性顯示爲「屬性」列表的一個元素。 「需要」需要是架構對象的頂級屬性,在「屬性」的同級別。我爲您的問題提交了一個修改,並且剛剛獲得批准。有關記錄,這裏有一個要點,顯示在JSON Schema Lint中:http://jsonschemalint.com/#/version/draft-05/markup/json?gist=8a3c1b3b0264899879c1fecab6ba8ed4 –

回答

0

使用$ref,並提供一個絕對路徑作爲值

例子:

文件路徑:E:\JSONSchema\Files\details.json

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "reuse": { 
    "type": "array", 
    "items": { 
     "type": "object", 
     "properties": { 
     "id": { 
      "type": "string" 
     }, 
     "tagid": { 
      "type": "string" 
     } 
     }, 
     "required": [ 
     "id", 
     "tagid" 
     ], 
     "additionalProperties": false 
    } 
    } 
} 

如果我想在另一個文件中重用的代碼示例看起來像

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "firstName": { 
     "type": "string" 
    }, 
    "lastName": { 
     "type": "string" 
    }, 
    "IDs": { 
     "$ref": "file:/E:/JSONSchema/Files/details.json#/reuse" 
    } 
    } 
} 

實現這一目標的另一種方法是使用id。 檢查下面的代碼。

{ 
     "$schema": "http://json-schema.org/draft-04/schema#", 
     "id": "file:/E:/JSONSchema/Files/details.json", 
     "type": "object", 
     "properties": { 
     "firstName": { 
      "type": "string" 
     }, 
     "lastName": { 
      "type": "string" 
     }, 
     "IDs": { 
      "$ref": "#/reuse" 
     } 
     } 
    } 
+0

您的'$ ref'指向'#/ reuse',我相信這是未定義的。 '#'後的所有內容都是文檔中的JSON指針。由於您在其之前包含了沒有文件引用的散列片段,因此會在_current_模式的根對象中查找「reuse」元素。如果要在外部模式中引用'reuse',則必須包含指向該模式的URI,後跟Hash符號和JSON指針。 –

0

JSON Schema允許使用具有單個$ref屬性的對象在需要架構對象的任何位置引用外部定義的架構。規範的相關部分是here

任何時候,子模式的預期,一個模式可以代替使用含有「$ REF」屬性的對象 。 $ ref的值是一個URI 參考。針對當前的URI庫解析,它標識要使用的模式的URI。 「$ ref」對象中的所有其他屬性必須被忽略。

所以跟隨你的榜樣,這應該作爲e:\JSONSchema\Core\visuals.json內容:

{ 
    "type": "object", 
    "properties": { 
    "firstName": { 
     "type": "string" 
    }, 
    "lastName": { 
     "type": "string" 
    }, 
    "IDs": { 
     "$ref": "../files/details.json" 
    } 
    } 
} 
+0

感謝您的編輯和回答。但是,當我嘗試你的解決方案時,我得到了一個像'URI不是絕對的'的錯誤。所以,我試圖提供絕對路徑。請檢查我的答案,並讓我知道如果我錯了。 – KC7

+0

我認爲相對URI應該可以工作,但我沒有一個好的環境來測試(除了編寫我自己的測試工具之外)。你用什麼來測試? –

+0

我在'java'環境中使用'jackson' api來測試 – KC7