JSON-Schema zum Erzwingen von Array-Inhalten

Hallo zusammen und vielen Dank im Voraus.

Ich versuche, ein JSON-Schema zu erstellen, um ein Array zu erzwingen, das ein A- und ein B-Objekt und N C-Objekte enthält, wobei A und B C-Objekte sind und N eine ganze Zahl ist, die zwischen 0 und unendlich liegt.

Dafür:

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

Sind allegültigobwohl:

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

Sindungültig.

Um dies zu verdeutlichen, müssen A und B vorhanden sein. C-Objekte sind optional, obwohl Sie möglicherweise so viele haben, wie Sie möchten.

C-Objektschemata:


{
  "$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
}

Ein C-Objekt ist also ein beliebiges gültiges JSON-Objekt, das nur die Eigenschaften "id" und "name" enthält, wobei "id" eine Ganzzahl und "name" eine Zeichenfolge ist.

A- und B-Objektschemata:


{
  "$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- und B-Objekte unterscheiden sich von C-Objekten darin, dass der Namenswert erzwungen wird. Der Namenswert eines A-Objekts muss ein Wert sein, der im Feld enum enthalten ist, wobei enum einen einzelnen Wert enthält.

Mein bisher vollständigstes Schema ist:


{
  "$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
      }
    ]
  }
}

Dies erzwingt, dass alle darin enthaltenen Objekte vom Typ C sein müssen, also A und B, obwohl ich nicht sicher bin, wie ich sicherstellen soll, dass mindestens eine Instanz von A und B in meinem Array enthalten ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage