{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "http://idaes.org",
  "definitions": {
    "SemanticVersion": {
      "type": "array",
      "items": [
        {
          "type": "integer"
        },
        {
          "type": "integer"
        },
        {
          "type": "integer"
        },
        {
          "type": "string"
        }
      ],
      "minItems": 4
    }
  },
  "type": "object",
  "properties": {
    "aliases": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "codes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "method",
              "function",
              "module",
              "class",
              "file",
              "package",
              "repository",
              "notebook"
            ]
          },
          "desc": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "idhash": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "version": {
            "$ref": "#/definitions/SemanticVersion"
          }
        }
      }
    },
    "collaborators": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ]
      }
    },
    "created": {
      "type": "number"
    },
    "creator": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ]
    },
    "data": {
      "type": "object"
    },
    "datafiles": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "desc": {
            "type": "string"
          },
          "metadata": {
            "type": "object"
          },
          "mimetype": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "subdir": {
            "type": "string"
          }
        },
        "required": [
          "desc",
          "metadata",
          "mimetype",
          "path",
          "subdir"
        ]
      }
    },
    "datafiles_dir": {
      "type": "string"
    },
    "desc": {
      "type": "string"
    },
    "id_": {
      "type": "integer"
    },
    "modified": {
      "type": "number"
    },
    "relations": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "predicate": {
            "type": "string",
            "enum": [
              "WasGeneratedBy",
              "Used",
              "WasDerivedFrom",
              "WasTriggeredBy",
              "WasControlledBy",
              "WasRevisionOf"
            ]
          },
          "identifier": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "subject",
              "object"
            ]
          }
        },
        "required": [
          "predicate",
          "identifier",
          "role"
        ]
      }
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "number"
          },
          "doi": {
            "type": "string"
          },
          "isbn": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "source": {
            "type": "string"
          }
        }
      }
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "type": {
      "type": "string"
    },
    "version": {
      "type": "object",
      "properties": {
        "created": {
          "type": "number"
        },
        "name": {
          "type": "string"
        },
        "revision": {
          "$ref": "#/definitions/SemanticVersion"
        }
      }
    }
  },
  "required": [
    "id_"
  ],
  "additionalProperties": false
}