如何使用JsonSchema对复杂模式进行建模而无需太多重复?

时间:2018-06-28 09:33:17

标签: json schema data-modeling jsonschema

我正在尝试对文档(例如护照)及其属性(名字,出生日期等)进行建模,并使用json schema对其进行描述。

我想在运行时定义许多类型的文档,每个文档都作为单独的架构。 某些属性可以从多个文档中引用,例如护照和驾照中的firstName,因此 为此创建一个单独的属性定义架构可能是明智的。

可以说,我有护照,其型号如下:

{
  "owner":  "<string>",
  "type" :  "<string>",
  "salt" :  <number>,
  "attributes": {
    "number"     : {"value": "<string>",     "salt": <number>}
    "lastName"   : {"value": "<string>",     "salt": <number>},
    "firstName"  : {"value": "<string>",     "salt": <number>},
    "birthDate"  : {"value": "<date>",       "salt": <number>},
    "nationality": {"value": "<string>",     "salt": <number>},
  }
}

每个属性都有“值”和“盐”,但是每个键(属性名)的“值”不同。 我的问题是,这种JSON文档的架构外观如何?

UPD :每个属性都有valuesalt。盐对于所有属性都是完全相同的,但是value是不同的。如果我手动指定每个属性都具有saltvalue,那么我将得到大量的架构重复。有可能避免吗?

2 个答案:

答案 0 :(得分:2)

您可以做很多事情来减少架构中的重复项。一种方法是使用{{ date_value|date:'m/d/Y' }} 关键字。另一种选择是使用let readPermissions = AMZNScopeFactory.scope(withName: "alexa::ask:skills:readwrite") 来验证跨多个属性的通用约束。

definitions

答案 1 :(得分:1)

对于JSON Schema的草案7(在撰写本文时为最新),假设您要使用对另一个包含属性定义的文件的引用,则可能需要执行以下操作。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "number": {
      "properties": {
        "value": {...}, # Whatever you define as your schema for number/value.
        "salt": {
          "$ref": "externalRef/definitions/salt"
        }
      }
    }
  }
}