I'm using JSON schema for data modelling. I define a base Document
schema, that I later use to define model schemas (e.g. Product
, Category
, User
, etc.).
I'm doing this because I want all models to inherit certain structure/rules. For example every model instance should have certain common properties (such as, id
, createdAt
, updatedAt
). In OOP terminology: Product extends Document
and therefore it inherits its instance properties. In schemas terminology (I think) Document
is a meta-schema for creating model schemas.
I've defined the Document schema as follows:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"id": "http://example.com/schemas/document.json#",
"title": "Document",
"type": "object",
"additionalProperties": false,
"required": ["type", "name", "fields"],
"properties": {
"type": {
"constant": "document"
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"readOnly": {
"type": "boolean"
},
"properties": {
// common properties
// model-specific properties
}
}
}
- How do I specify that the Document meta-schema "extends" the base JSON schema (draft-07), so that I don't have to define all the properties of the draft (
$schema
,id
, etc.)? - How do I specify that the
properties
of each model schema contains some common properties (id
,createdAt
, ...), without having to define them in each model schema definition?