Схема JSON для принудительного применения содержимого массива

Привет всем и заранее спасибо.

Я пытаюсь создать схему JSON, чтобы заставить массив содержать один объект A и B и N объектов C, где A и B - объекты C, а N - целое число от 0 до бесконечности.

Для этого:

[A, B] [A, B, C1] [A, B, C1, .., CN]

Вседействительный, хотя :

[A] [A, C1] [A, C1, .., CN]

Находятсянедействительный.

Чтобы было ясно, А и В должны присутствовать. Объекты C являются необязательными, хотя вы можете иметь столько, сколько захотите.

Схемы объектов C:


{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "C Object",

  "type": "object",
  "required": ["id", "name"],

  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string"
    }
  },
  "additionalProperties": false
}

Таким образом, объект C - это любой допустимый объект JSON, содержащий только свойства «id» и «name», где «id» является целым числом, а «name» является строкой.

Схемы объектов A и B:


{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "A Object",

  "type": "object",
  "required": ["id", "name"],

  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string",
      "enum": ["A"]
    }
  },
  "additionalProperties": false
}

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "B Object",

  "type": "object",
  "required": ["id", "name"],

  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string",
      "enum": ["B"]
    }
  },
  "additionalProperties": false
}

Объекты A и B отличаются от объектов C тем, что там применяется значение имени. Значение имени объекта A должно быть значением, содержащимся в поле enum, где enum содержит одно значение.

Моя самая полная схема на сегодняшний день:


{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "To Date Solution",
  "description": "So far this is the most complete attempt at enforcing values to be contained within a JSON structure using JSON schemas.",

  "type": "array"
  "items": {
    "allOf": [
      {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "title": "C Object",

        "type": "object",
        "required": ["id", "name"],

        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    ]
  }
}

Это гарантирует, что все содержащиеся в нем объекты должны иметь тип C, к которым относятся A и B, хотя я не уверен, как обеспечить, чтобы хотя бы один экземпляр A и B содержался в моем массиве.

Ответы на вопрос(2)

Ваш ответ на вопрос