使用其他必填字段扩展$ ref

时间:2017-01-31 13:06:00

标签: jsonschema

给定一个名为location的模式的一部分,如下所示:

{
  type: 'object',
  required: [ 'country' ],
  additionalProperties: false,
  properties: {
    country: {
      enum: [ 'DE', 'CH', 'AT' ],
    },
    postalCode: { type: 'string' },
  },
};

在我们的大多数用例中,只有国家/地区代码才能使位置有效。但是,我们有几次需要邮政编码。

例如,我们案例中的公司总是需要邮政编码。我们以前的location架构当然不会强制执行此操作。其他模式需要不强制存在邮政编码的位置对象。这是我们公司的架构:

{
  type: 'object',
  required: [ 'name', 'location' ],
  additionalProperties: false,
  properties: {
    location: { $ref: 'location' },
    name: { type: 'string' },
    website: { type: 'string' },
  },
};

JSON Schema中是否有一种方法可以使用$ ref但是也可以对其进行扩展,以便location模式中的company属性自动需要postalCode?我们当前的解决方案是基于location创建第二个架构,我们只是更改了required属性,但我希望有更好的方法。

谢谢。

1 个答案:

答案 0 :(得分:5)

你可以

{
  type: 'object',
  required: [ 'name', 'location' ],
  additionalProperties: false,
  properties: {
    location: {
      allOf: [
        { $ref: 'location' },
        { required: [ 'postalCode' ] }
      ]
    },
    name: { type: 'string' },
    website: { type: 'string' }
  }
}