Json Зависимости схемы с определениями объектов - PullRequest
0 голосов
/ 28 апреля 2020

При использовании json схема 7 можно установить зависимость от определения объекта, ссылающегося на отдельные поля?

Например, у меня есть строка типа и объект свойств. В зависимости от типа поля свойств объекта будут разными, но я не хочу устанавливать зависимость каждого возможного поля. Это довольно утомительно, например

{
  "$id": "https://sibytes.datagovernor.com/dataset.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "dataset",
  "type": "object",
  "properties": {
    "dataset_type": {
      "type": "string",
      "description": ""
    },
    "dataset_properties": {
      << BASICALLY HERE I WANT THE REFERENCE OBJECT DEFINITION TO BE DEPENDENT ON THE DATASET TYPE ABOVE>>
      "$ref": "http://example.com/tableproperties.schema.json"
      "$ref": "http://example.com/tableproperties.fileproperties.json"
      ...there will be others.
    }
  }
}

1 Ответ

0 голосов
/ 28 апреля 2020

Получается, что это можно сделать, используя подсхемы и предикаты https://json-schema.org/understanding-json-schema/reference/conditionals.html

{
  "$id": "https://sibytes.datagovernor.com/dataset.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "dataset",
  "type": "object",
  "properties": {

    "dataset_type": {
      "enum": ["Table","View"],
      "description": "This is the type of physical object that the dataset describes."
    }
  },
  "dataset_properties": {
    "allOf": [
      {
        "if": {
          "properties": {"dataset_type":{"const": "Table"}}
        },
        "then": {
          "properties": {
            "dataset_properties" : {
              "$ref": "dataset.table.schema.json#/definitions/dataset_properties"
            }
          }
        }
      },

      {
        "if": {
          "properties": {"dataset_type":{"const": "View"}}
        },
        "then": {
          "properties": {
            "dataset_properties" : {
              "$ref": "dataset.view.schema.json#/definitions/dataset_properties"
            }
          }
        }
      }
    ]
  },
  "required": ["dataset_type","dataset_properties"]
}
...