Defining datamodels with a JSON schema specification
TODO, see https://gitlab.com/caosdb/caosdb-advanced-user-tools/-/issues/42
Further information
Pattern Properties
The JSON-schema parser has rudimentary support for patternProperties
. Since
their names (only the pattern that their names will suffice) are not known a
priori, we create RecordTypes for all pattern properties. The names of these
RecordTypes are created from their parent element’s name by appending the string
"Entry"
and possibly a number if there are more than one pattern properties
for one parent.
All the RecordTypes created for pattern properties have at least an obligatory
__matched_pattern
property which will – as the name suggests – store the
matched pattern of an actual data entry.
Note
The __matched_pattern
property is added automatically to your datamodel
as soon as there is at least one pattern property in your JSON schema. So be
sure that you don’t happen to have an entity with exactly this name in your
database.
E.g., a json schema with
"dataset": {
"patternProperties": {
"^[0-9]{4,4}": {
"type": "boolean"
},
"^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}": {
"type": "object",
"properties": {
"date_id": {
"$ref": "#/definitions/uuid"
}
}
}
}
}
Would result in a Dataset
RecordType that has the two properties
DatasetEntry_1
and DatasetEntry_2
(as always, name can be overwritten
explicitly by specifying the title
property), referencing corresponding
DatasetEntry_1
and DatasetEntry_2
Records.
Apart from the aforementioned __matched_pattern
property, DatasetEntry_1
also has the DatasetEntry_1_value
property with datatype BOOLEAN
, that
stores the actual value. In turn, DatasetEntry_2
is of type: object
and
is treated like any other RecordType. Consequently, it has, appart from the
__matched_pattern
property, a date_id
property as specified in its
properties
.
Array entries without items
specification
JSON schema allows for properties of type: array
without the items
specification that consequently can be arrays of any (and of mixed) types. While
this is in general problematic when specifying a data model, sometimes these
properties cannot be specified further, e.g., when you’re using an external
schema that you cannot change.
These properties can still be added to your datamodel by specifying their types
explicitly in a dictionary or, alternatively, they can be ignored. See the
types_for_missing_array_items
and ignore_unspecified_array_items
parameters of models.parser.JsonSchemaParser
, respectively, for more
information.