diff --git a/README.md b/README.md index f2be462..424fa66 100644 --- a/README.md +++ b/README.md @@ -6,23 +6,25 @@ The GMF standard can be used to store statistical metadata on tabular datasets, to generate synthetic versions of the original dataset. By storing the statistical metadata information in this intermediate standard, privacy can be ensured by careful manual disclosure control. -A Python reference implementation for generating GMF files and creating synthetic dataset is available on [GitHub](https://github.com/sodascience/metasynth). +A Python reference implementation for generating GMF files and creating synthetic dataset is available on [GitHub](https://github.com/sodascience/metasyn). The GMF standard is designed to be modular and extensible with more distributions and privacy enhancing mechanisms. Additional distributions might be available at a later date in this repository outside of the core directory. # GMF format versions and metasyn versions -| GMF version | metasyn version compatibility | -| ----------- | ----------------------------- | -| 0.1 | metasyn < 0.4.0 | -| 0.2 | metasyn == 0.4.0 | -| 0.3 | metasyn == 0.5.0, 0.6.0 | -| 1.0 | metasyn >= 0.7.0, <= 1.0.3 | -| 1.1 | metasyn >= 1.1.0 | +| GMF version | metasyn version compatibility | Notes | +| ----------- | ----------------------------- | | +| 0.1 | metasyn < 0.4.0 | | +| 0.2 | metasyn == 0.4.0 | | +| 0.3 | metasyn == 0.5.0, 0.6.0 | | +| 1.0 | metasyn >= 0.7.0, <= 1.0.3 | | +| 1.1 | metasyn == 1.1.0 | | +| 2.0 | metasyn >= 2.1.0 | Support for multitable | +| 2.1 | metasyn >= 3.0.0 | Add operators | ## Contact **Metasyn** (and the GMF schema attached to it) is a project by the [ODISSEI Social Data Science (SoDa)](https://odissei-data.nl/nl/soda/) team. -Do you have questions, suggestions, or remarks on the technical implementation? File an issue in the issue tracker or feel free to contact [Erik-Jan van Kesteren](https://github.com/vankesteren) or [Raoul Schram](https://github.com/qubixes). +Do you have questions, suggestions, or remarks on the technical implementation? File an issue in the issue tracker or feel free to contact [Raoul Schram](https://github.com/qubixes). SoDa logo diff --git a/core/1.1/README.md b/core/1.1/README.md index 2daa745..c68559c 100644 --- a/core/1.1/README.md +++ b/core/1.1/README.md @@ -1,3 +1,3 @@ # Generative metadata format - v1.1 -Compatibility: metasyn == 1.1.0 and higher +Compatibility: metasyn == 1.1.0 diff --git a/core/2.0/README.md b/core/2.0/README.md new file mode 100644 index 0000000..4540d1f --- /dev/null +++ b/core/2.0/README.md @@ -0,0 +1,5 @@ +# Generative metadata format - v2.0 + +Compatibility: metasyn == 2.1 or higher + +New features: Multi table support diff --git a/core/2.0/generative_metadata_format.json b/core/2.0/generative_metadata_format.json new file mode 100644 index 0000000..fed3a54 --- /dev/null +++ b/core/2.0/generative_metadata_format.json @@ -0,0 +1,1102 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "http://sodascience.github.io/generative_metadata_format/core/2.0/generative_metadata_format", + "type": "object", + "properties": { + "gmf_version": { + "type": "string" + }, + "relations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "primary_table": { + "type": "string" + }, + "primary_key": { + "type": "string" + }, + "foreign_table": { + "type": "string" + }, + "foreign_key": { + "type": "string" + }, + "relation_type": { + "type": "string" + } + }, + "required": [ + "primary_table", + "primary_key", + "foreign_table", + "foreign_key", + "relation_type" + ] + } + }, + "provenance": { + "type": "object", + "properties": { + "created by": { + "type": "object" + }, + "creation time": { + "type": "string" + } + }, + "required": [ + "created by", + "creation time" + ] + }, + "tables": { + "type": "array", + "items": { + "type": "object", + "properties": { + "n_rows": { + "type": "number" + }, + "n_columns": { + "type": "number" + }, + "vars": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "enum": [ + "discrete", + "continuous", + "string", + "categorical", + "date", + "datetime", + "time" + ] + }, + "dtype": { + "type": "string" + }, + "prop_missing": { + "type": "number" + }, + "distribution": { + "$ref": "#/$defs/all_dist_def" + } + } + }, + "required": [ + "name", + "type", + "dtype", + "provenance", + "prop_missing", + "distribution" + ] + } + }, + "required": [ + "n_rows", + "n_columns", + "vars" + ] + } + } + }, + "$defs": { + "all_dist_def": { + "anyOf": [ + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "integer" + }, + "upper": { + "type": "integer" + } + }, + "required": [ + "lower", + "upper" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "number" + }, + "upper": { + "type": "number" + } + }, + "required": [ + "lower", + "upper" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "string" + }, + "upper": { + "type": "string" + } + }, + "required": [ + "lower", + "upper" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "TimeUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "string" + }, + "upper": { + "type": "string" + }, + "precision": { + "type": "string" + } + }, + "required": [ + "lower", + "upper", + "precision" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateTimeUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "string" + }, + "upper": { + "type": "string" + }, + "precision": { + "type": "string" + } + }, + "required": [ + "lower", + "upper", + "precision" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.regex" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "RegexDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "regex": { + "type": "string" + }, + "counts": { + "type": "array" + } + }, + "required": [ + "regex_data" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.regex" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "UniqueRegexDistribution" + }, + "unique": { + "const": true + }, + "parameters": { + "type": "object", + "properties": { + "regex": { + "type": "string" + }, + "counts": { + "type": "array" + } + }, + "required": [ + "regex_data" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "integer" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateTimeConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "TimeConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "StringConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.exponential" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ExponentialDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "rate": { + "type": "number" + } + }, + "required": [ + "rate" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.multinoulli" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "MultinoulliDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "uniqueItems": true + }, + "probs": { + "type": "array", + "items": { + "type": "number" + } + } + }, + "required": [ + "labels", + "probs" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.faker" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "FakerDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "faker_type": { + "type": "string" + }, + "locale": { + "type": "string" + } + }, + "required": [ + "faker_type", + "locale" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.faker" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "UniqueFakerDistribution" + }, + "unique": { + "const": true + }, + "parameters": { + "type": "object", + "properties": { + "faker_type": { + "type": "string" + }, + "locale": { + "type": "string" + } + }, + "required": [ + "faker_type", + "locale" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.freetext" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "FreeTextDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "locale": { + "type": "string" + }, + "avg_sentences": { + "type": [ + "number", + "null" + ] + }, + "avg_words": { + "type": "number" + } + }, + "required": [ + "locale", + "avg_sentences", + "avg_words" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.poisson" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "PoissonDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "rate": { + "type": "number" + } + }, + "required": [ + "rate" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.lognormal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "LogNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.truncated_normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteTruncatedNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "number" + }, + "upper": { + "type": "number" + }, + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "lower", + "upper", + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.truncated_normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousTruncatedNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "number" + }, + "upper": { + "type": "number" + }, + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "lower", + "upper", + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.unique_key" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "UniqueKeyDistribution" + }, + "unique": { + "const": true + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "integer" + }, + "consecutive": { + "type": "boolean" + } + }, + "required": [ + "lower", + "consecutive" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.na" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "NADistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": {}, + "required": [] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.na" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "NADistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": {}, + "required": [] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/core/2.1/README.md b/core/2.1/README.md new file mode 100644 index 0000000..79d39e6 --- /dev/null +++ b/core/2.1/README.md @@ -0,0 +1,5 @@ +# Generative metadata format - v2.1 + +Compatibility: metasyn == 3.0 or higher + +New features: distribution operators \ No newline at end of file diff --git a/core/2.1/generative_metadata_format.json b/core/2.1/generative_metadata_format.json new file mode 100644 index 0000000..6d25d36 --- /dev/null +++ b/core/2.1/generative_metadata_format.json @@ -0,0 +1,1370 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "http://sodascience.github.io/generative_metadata_format/core/2.1/generative_metadata_format", + "type": "object", + "properties": { + "gmf_version": { + "type": "string" + }, + "relations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "primary_table": { + "type": "string" + }, + "primary_key": { + "type": "string" + }, + "foreign_table": { + "type": "string" + }, + "foreign_key": { + "type": "string" + }, + "relation_type": { + "type": "string" + } + }, + "required": [ + "primary_table", + "primary_key", + "foreign_table", + "foreign_key", + "relation_type" + ] + } + }, + "provenance": { + "type": "object", + "properties": { + "created by": { + "type": "object" + }, + "creation time": { + "type": "string" + } + }, + "required": [ + "created by", + "creation time" + ] + }, + "tables": { + "type": "array", + "items": { + "type": "object", + "properties": { + "n_rows": { + "type": "number" + }, + "n_columns": { + "type": "number" + }, + "vars": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "enum": [ + "discrete", + "continuous", + "string", + "categorical", + "date", + "datetime", + "time", + "duration" + ] + }, + "dtype": { + "type": "string" + }, + "prop_missing": { + "type": "number" + }, + "distribution": { + "$ref": "#/$defs/all_dist_def" + } + } + }, + "required": [ + "name", + "type", + "dtype", + "provenance", + "prop_missing", + "distribution" + ] + } + }, + "required": [ + "n_rows", + "n_columns", + "vars" + ] + } + } + }, + "$defs": { + "all_dist_def": { + "anyOf": [ + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "integer" + }, + "upper": { + "type": "integer" + } + }, + "required": [ + "lower", + "upper" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "number" + }, + "upper": { + "type": "number" + } + }, + "required": [ + "lower", + "upper" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "string" + }, + "upper": { + "type": "string" + } + }, + "required": [ + "lower", + "upper" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "TimeUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "string" + }, + "upper": { + "type": "string" + }, + "precision": { + "type": "string" + } + }, + "required": [ + "lower", + "upper", + "precision" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateTimeUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "string" + }, + "upper": { + "type": "string" + }, + "precision": { + "type": "string" + } + }, + "required": [ + "lower", + "upper", + "precision" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.uniform" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DurationUniformDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "string" + }, + "upper": { + "type": "string" + }, + "precision": { + "type": "string" + } + }, + "required": [ + "lower", + "upper", + "precision" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.regex" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "RegexDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "regex": { + "type": "string" + }, + "counts": { + "type": "array" + } + }, + "required": [ + "regex_data" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.regex" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "UniqueRegexDistribution" + }, + "unique": { + "const": true + }, + "parameters": { + "type": "object", + "properties": { + "regex": { + "type": "string" + }, + "counts": { + "type": "array" + } + }, + "required": [ + "regex_data" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "integer" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DateTimeConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "TimeConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.constant" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "StringConstantDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.exponential" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ExponentialDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "rate": { + "type": "number" + } + }, + "required": [ + "rate" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.multinoulli" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "MultinoulliDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "uniqueItems": true + }, + "probs": { + "type": "array", + "items": { + "type": "number" + } + } + }, + "required": [ + "labels", + "probs" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.faker" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "FakerDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "faker_type": { + "type": "string" + }, + "locale": { + "type": "string" + } + }, + "required": [ + "faker_type", + "locale" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.faker" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "UniqueFakerDistribution" + }, + "unique": { + "const": true + }, + "parameters": { + "type": "object", + "properties": { + "faker_type": { + "type": "string" + }, + "locale": { + "type": "string" + } + }, + "required": [ + "faker_type", + "locale" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.freetext" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "FreeTextDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "locale": { + "type": "string" + }, + "avg_sentences": { + "type": [ + "number", + "null" + ] + }, + "avg_words": { + "type": "number" + } + }, + "required": [ + "locale", + "avg_sentences", + "avg_words" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.poisson" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "PoissonDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "rate": { + "type": "number" + } + }, + "required": [ + "rate" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.lognormal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "LogNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.truncated_normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteTruncatedNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "number" + }, + "upper": { + "type": "number" + }, + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "lower", + "upper", + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.truncated_normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "ContinuousTruncatedNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "number" + }, + "upper": { + "type": "number" + }, + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "lower", + "upper", + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.normal" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "DiscreteNormalDistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": { + "mean": { + "type": "number" + }, + "sd": { + "type": "number" + } + }, + "required": [ + "mean", + "sd" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.unique_key" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "UniqueKeyDistribution" + }, + "unique": { + "const": true + }, + "parameters": { + "type": "object", + "properties": { + "lower": { + "type": "integer" + }, + "consecutive": { + "type": "boolean" + } + }, + "required": [ + "lower", + "consecutive" + ] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "core.na" + }, + "version": { + "type": "string" + }, + "class_name": { + "const": "NADistribution" + }, + "unique": { + "const": false + }, + "parameters": { + "type": "object", + "properties": {}, + "required": [] + } + }, + "required": [ + "name", + "class_name", + "parameters" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "EqualsCondition" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "IfThenElse" + }, + "operands": { + "type": "array", + "minItems": 3, + "maxItems": 3 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "PlusOperator" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "MultiplyOperator" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "DivideOperator" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "SubOperator" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "PowerOperator" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "AndOperator" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "OrOperator" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "LessThanCondition" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "GreaterThanCondition" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "NotEqualsCondition" + }, + "operands": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "NotOperator" + }, + "operands": { + "type": "array", + "minItems": 1, + "maxItems": 1 + } + }, + "required": [ + "name", + "operands" + ] + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "ref_name": { + "type": "string" + } + }, + "required": [ + "name", + "ref_name" + ] + }, + { + "type": "object", + "properties": { + "name": { + "const": "IsNull" + }, + "operands": { + "type": "array", + "minItems": 1, + "maxItems": 1 + } + }, + "required": [ + "name", + "operands" + ] + } + ] + } + } +} \ No newline at end of file