Я строю схему, используя JSON-схему, часть которой описывает математические операции (такие как сложение, умножение, вычитание, деление и т. Д.).
Эти операции могут принимать операнды, которые являются переменными, но они также могут принимать экземпляры самих себя. То есть типы "add"
и "multiply"
могут быть представлены следующим образом:
"add": {
"description": "The mathematical operation of adding two or more operands together",
"type": "array",
"minItems": 2,
"items": {
"anyOf": [
{ "$ref": "#/definitions/variable" },
{ "$ref": "#/definitions/subformula" },
{ "$ref": "#/definitions/add" },
{ "$ref": "#/definitions/multiply" },
{ "$ref": "#/definitions/subtract" },
{ "$ref": "#/definitions/divide" },
{ "$ref": "#/definitions/sum" },
{ "$ref": "#/definitions/maximum" },
{ "$ref": "#/definitions/average" }
]
}
},
"multiply": {
"description": "The mathematical operation of multiplying two or more operands together",
"type": "array",
"minItems": 2,
"items": {
"anyOf": [
{ "$ref": "#/definitions/variable" },
{ "$ref": "#/definitions/subformula" },
{ "$ref": "#/definitions/add" },
{ "$ref": "#/definitions/multiply" },
{ "$ref": "#/definitions/subtract" },
{ "$ref": "#/definitions/divide" },
{ "$ref": "#/definitions/sum" },
{ "$ref": "#/definitions/maximum" },
{ "$ref": "#/definitions/average" }
]
}
}
Для JSON, например:
"add": [ 5, 6, "multiply": [ 2, 3 ] ]
Этот список ссылок на типы одинаков для каждой операции и под-формулы. Это довольно обременительно в случае, если может быть добавлено больше операций, их нужно добавлять в этот список в каждом месте, где происходит список ...
Можно ли как-то разметить операции так, чтобы я мог называть их группой, что-то вроде следующего:
"add": {
"description": "The mathematical operation of adding two or more operands together",
"type": "array",
"minItems": 2,
"items": {
"anyOf": [
{ "$ref": "#/definitions/variable" },
{ "$ref": "#/definitions/subformula" },
{ "$ref": "#/definitions/operations/" } //note the trailing '/'
]
}
},
"multiply": {
"description": "The mathematical operation of multiplying two or more operands together",
"type": "array",
"minItems": 2,
"items": {
"anyOf": [
{ "$ref": "#/definitions/variable" },
{ "$ref": "#/definitions/subformula" },
{ "$ref": "#/definitions/operations/" } //note the trailing '/'
]
}
}