Defining A Reference
A key with a # prefix at the root of the file means that it is a definition of a reusable reference. When it is encountered in value side, it means that reference is being used. Below is an example.
CONCEPTS: class-1.concepts.json
{
"$class+": "#properties",
"#properties": {
"$property*": "$type"
}
}
Above there is a #properties reference in which $property concept is defined and it is used under $class concept. This definition is equivalent to below definition;
CONCEPTS: class-2.concepts.json
{
"$class+": {
"$property*": "$type"
}
}
References does not have an effect in concepts shadow and schema validation, so class-1.concepts.json has exactly the same shadow and schema validation behavior with class-2.concepts.json.
References Can Only Be Defined at the Root
Below is an invalid definition because #method is defined under $class concept instead of being defined at the root;
CONCEPTS: class.concepts.json
{
"$class+": {
"$method*": "#method",
"#method": {
"$parameter*": "$type",
"returns": "$type"
}
}
}
ERROR: 'class.concepts.json' is not valid, '#method' should be defined at theroot.