Define a LinkAhead Schema with JSON Schema#
Note
This page has been migrated from the old documentation, and has not yet been fully revised. There might be inconsistencies or errors when using with current LinkAhead versions.
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 Schema 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"
}
}
}
}
}
This 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 Schema, 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 Schema 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.
JSON schema from LinkAhead Schema#
Sometimes you may want to have a json schema which describes a LinkAhead Schema, for example for the automatic generation of user interfaces with third-party tools like rjsf.
For this use case, look at the documentation of the caosadvancedtools.json_schema_exporter module.