{
  "type": "object",
  "required": [
    "toProperty",
    "equation",
    "symbols",
    "model"
  ],
  "properties": {
    "id": {
      "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json",
      "description": "Identifier (IRI or CURIE) for this equation record.",
      "x-jsonld-id": "@id"
    },
    "type": {
      "description": "Relationship type. Use EquationPropertyRelationship, optionally alongside PropertyRelationship.",
      "oneOf": [
        {
          "const": "EquationPropertyRelationship"
        },
        {
          "type": "array",
          "contains": {
            "const": "EquationPropertyRelationship"
          },
          "items": {
            "type": "string"
          }
        }
      ],
      "x-jsonld-id": "@type"
    },
    "relationshipKind": {
      "const": "equation",
      "description": "Discriminator for equation-based relationships.",
      "x-jsonld-id": "https://schema.org/additionalType"
    },
    "fromProperty": {
      "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json",
      "description": "Optional. Use when the record focuses on one specific symbol-edge of the equation (a sensitivity / cross-impact reading); it must then match exactly one entry in `symbols[]` by its `fromProperty`. Omit when the record describes the equation as a whole \u2014 the full table is in `symbols[]` and there is no single \"from\".\n",
      "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/fromProperty",
      "x-jsonld-type": "@id"
    },
    "toProperty": {
      "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json",
      "description": "IRI or CURIE of the derived target property calculated by the equation.",
      "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/toProperty",
      "x-jsonld-type": "@id"
    },
    "equation": {
      "type": "string",
      "minLength": 1,
      "description": "Canonical mathematical expression. It should match schema:mathExpression on the target property definition.",
      "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasEquation"
    },
    "symbols": {
      "type": "array",
      "minItems": 1,
      "description": "Complete symbol table for `equation`: one entry per symbol used in the expression. For equation-level records, top-level `fromProperty` is omitted and `symbols[]` is the full computable table. For symbol-centred records, the primary symbol is the entry whose `fromProperty` equals top-level `fromProperty`; the other entries remain in the table so the record is computationally self-contained.\n",
      "items": {
        "type": "object",
        "required": [
          "symbol",
          "fromProperty",
          "bindings"
        ],
        "properties": {
          "symbol": {
            "type": "string",
            "minLength": 1,
            "description": "LaTeX symbol as it occurs literally in `equation`.",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasSymbol"
          },
          "symbolAliases": {
            "type": "array",
            "description": "Alternative renderings (ASCII variants, plain forms).",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasSymbolAlias",
            "x-jsonld-container": "@set"
          },
          "fromProperty": {
            "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json",
            "description": "Abstract Rainbow IRI for this symbol.",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/fromProperty",
            "x-jsonld-type": "@id"
          },
          "variableKind": {
            "type": "string",
            "enum": [
              "featureOfInterest",
              "intensiveQuantity",
              "extensiveQuantity",
              "adjustmentFactor",
              "timeCoefficient",
              "rateCoefficient",
              "uncertaintyFactor",
              "aggregationIndex"
            ],
            "description": "Semantic role of the symbol in the equation.\n",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasVariableKind",
            "x-jsonld-type": "@vocab"
          },
          "dimensionKind": {
            "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json",
            "description": "Unit-abstract dimensional type as a QUDT QuantityKind URI (e.g. `quantitykind:Area`, `quantitykind:SurfaceDensity`, `quantitykind:Dimensionless`, `quantitykind:Time`, `quantitykind:Frequency`). Decouples dimensional analysis from unit selection.\n",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasDimensionKind",
            "x-jsonld-type": "@id"
          },
          "indexed": {
            "type": "boolean",
            "default": false,
            "description": "True if the term is iterated under the aggregation index of toProperty (e.g. per-taxon `D_{pre,i}`).\n",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/isIndexed"
          },
          "index": {
            "type": "string",
            "description": "Index symbol, e.g. \"i\". Only meaningful when `indexed` is true.",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasIndex"
          },
          "indexedBy": {
            "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json",
            "description": "IRI of the entity class whose instances enumerate the index (e.g. `odd:TaxonGroup`). Required when `indexed` is true.\n",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasIndexedBy",
            "x-jsonld-type": "@id"
          },
          "equationRole": {
            "type": "string",
            "enum": [
              "input",
              "coefficient",
              "normaliser",
              "lossTerm",
              "uncertaintyTerm",
              "qualityTerm",
              "output",
              "other"
            ],
            "description": "Role this symbol plays in the equation.",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasEquationRole",
            "x-jsonld-type": "@vocab"
          },
          "operator": {
            "type": "string",
            "enum": [
              "sum",
              "product",
              "subtract",
              "divide",
              "transform",
              "weightedSum",
              "other"
            ],
            "description": "Main operation connecting this symbol to the equation.",
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasOperator",
            "x-jsonld-type": "@vocab"
          },
          "bindings": {
            "type": "array",
            "minItems": 1,
            "description": "Concrete vocabulary IRIs that realise the abstract `fromProperty` of this symbol. Use when one symbol expands over an index (per-taxon, per-region), or when alternate / fallback measurements exist.\n",
            "items": {
              "type": "object",
              "required": [
                "variable"
              ],
              "properties": {
                "variable": {
                  "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json",
                  "description": "Concrete Rainbow IRI realising the entry's fromProperty.",
                  "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/bindingVariable",
                  "x-jsonld-type": "@id"
                },
                "indexValue": {
                  "type": "string",
                  "description": "Value of the equation index variable (e.g. \"Mytilus edulis\").",
                  "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/bindingIndexValue"
                },
                "bindingRole": {
                  "type": "string",
                  "enum": [
                    "primary",
                    "alternate",
                    "fallback",
                    "expansion"
                  ],
                  "default": "primary",
                  "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/bindingRole",
                  "x-jsonld-type": "@vocab"
                },
                "validityScope": {
                  "type": "string",
                  "description": "Short scope note (region, scenario, season).",
                  "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/bindingValidityScope"
                },
                "evidence": {
                  "oneOf": [
                    {
                      "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json"
                    },
                    {
                      "type": "array",
                      "items": {
                        "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json"
                      }
                    }
                  ],
                  "x-jsonld-id": "http://www.w3.org/ns/prov#wasDerivedFrom",
                  "x-jsonld-type": "@id"
                }
              }
            },
            "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasBinding",
            "x-jsonld-container": "@set"
          },
          "explanation": {
            "type": "string",
            "description": "Human-readable note about this symbol.",
            "x-jsonld-id": "http://www.w3.org/2000/01/rdf-schema#comment"
          }
        }
      },
      "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasEquationSymbol",
      "x-jsonld-container": "@set"
    },
    "weight": {
      "description": "Optional sensitivity or coefficient value. In this profile it is not a causal cross-impact weight.",
      "type": "object",
      "required": [
        "value"
      ],
      "properties": {
        "value": {
          "type": "number",
          "description": "Numeric sensitivity or coefficient value.",
          "x-jsonld-id": "http://qudt.org/schema/qudt/numericValue"
        }
      },
      "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasWeight",
      "x-jsonld-type": "@id"
    },
    "model": {
      "description": "Model that defines or evaluates this equation relationship (prov:wasAttributedTo).",
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Identifier of the model (dct:identifier).",
          "x-jsonld-id": "http://purl.org/dc/terms/identifier"
        },
        "name": {
          "type": "string",
          "description": "Human-readable label of the model (rdfs:label).",
          "x-jsonld-id": "http://www.w3.org/2000/01/rdf-schema#label"
        },
        "uri": {
          "type": "string",
          "description": "URI of the model resource.",
          "x-jsonld-id": "@id"
        }
      },
      "x-jsonld-id": "http://www.w3.org/ns/prov#wasAttributedTo"
    },
    "reef-effect": {
      "description": "Experiment activity that evaluated this relationship (prov:wasGeneratedBy).",
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Identifier of the experiment (dct:identifier).",
          "x-jsonld-id": "@id"
        },
        "name": {
          "type": "string",
          "description": "Human-readable label of the experiment (rdfs:label).",
          "x-jsonld-id": "http://www.w3.org/2000/01/rdf-schema#label"
        },
        "uri": {
          "type": "string",
          "description": "URI of the experiment resource."
        },
        "start": {
          "type": "string",
          "format": "date-time",
          "pattern": "^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(Z|[+-]\\\\d{2}:\\\\d{2})?$",
          "description": "Date and time when the experiment started (prov:startedAtTime)."
        },
        "end": {
          "type": "string",
          "format": "date-time",
          "pattern": "^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(Z|[+-]\\\\d{2}:\\\\d{2})?$",
          "description": "Date and time when the experiment ended (prov:endedAtTime)."
        }
      }
    },
    "evidence": {
      "oneOf": [
        {
          "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json"
        },
        {
          "type": "array",
          "items": {
            "$ref": "https://opengeospatial.github.io/bblocks/annotated-schemas/ogc-utils/iri-or-curie/schema.json"
          }
        }
      ],
      "description": "Evidence or definition source for the equation relationship.",
      "x-jsonld-id": "http://www.w3.org/ns/prov#wasDerivedFrom",
      "x-jsonld-type": "@id"
    },
    "explanation": {
      "type": "string",
      "description": "Human-readable explanation of how the primary fromProperty participates in the equation.",
      "x-jsonld-id": "http://www.w3.org/2000/01/rdf-schema#comment"
    }
  },
  "additionalProperties": true,
  "x-jsonld-extra-terms": {
    "PropertyRelationship": "https://w3id.org/ogc/hosted/seadots/prop-rel/PropertyRelationship",
    "EquationPropertyRelationship": "https://w3id.org/ogc/hosted/seadots/prop-rel/EquationPropertyRelationship",
    "targetDefinition": {
      "x-jsonld-id": "https://w3id.org/ogc/hosted/seadots/prop-rel/targetDefinition",
      "x-jsonld-context": {
        "id": "@id",
        "type": "@type",
        "name": "http://www.w3.org/2000/01/rdf-schema#label",
        "mathExpression": "https://schema.org/mathExpression",
        "wasDerivedFrom": {
          "@id": "http://www.w3.org/ns/prov#wasDerivedFrom",
          "@type": "@id",
          "@container": "@set"
        },
        "aggregation": {
          "@id": "https://w3id.org/ogc/hosted/seadots/prop-rel/hasAggregation",
          "@context": {
            "type": "@type",
            "operator": {
              "@id": "https://w3id.org/ogc/hosted/seadots/prop-rel/aggregationOperator",
              "@type": "@id"
            },
            "aggregatesOver": {
              "@id": "https://w3id.org/ogc/hosted/seadots/prop-rel/aggregatesOver",
              "@type": "@id"
            },
            "indexSymbol": "https://w3id.org/ogc/hosted/seadots/prop-rel/indexSymbol"
          }
        }
      }
    },
    "experiment": {
      "x-jsonld-id": "http://www.w3.org/ns/prov#wasGeneratedBy",
      "x-jsonld-context": {
        "id": "http://purl.org/dc/terms/identifier",
        "name": "http://www.w3.org/2000/01/rdf-schema#label",
        "uri": "@id",
        "start": {
          "@id": "http://www.w3.org/ns/prov#startedAtTime",
          "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
        },
        "end": {
          "@id": "http://www.w3.org/ns/prov#endedAtTime",
          "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
        }
      }
    }
  },
  "x-jsonld-prefixes": {
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "prop-rel": "https://w3id.org/ogc/hosted/seadots/prop-rel/",
    "schema": "https://schema.org/",
    "prov": "http://www.w3.org/ns/prov#",
    "qudt": "http://qudt.org/schema/qudt/",
    "dct": "http://purl.org/dc/terms/",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "quantitykind": "http://qudt.org/vocab/quantitykind/",
    "odd": "https://w3id.org/iliad/odd#",
    "tc": "http://rs.tdwg.org/ontology/voc/TaxonConcept#",
    "indo": "https://w3id.org/indicators/marine/obs/",
    "indp": "https://w3id.org/indicators/marine/parameters/",
    "ind": "https://w3id.org/indicators/marine/"
  }
}