{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Geospatial Processing Step Provenance",
  "description": "A single geospatial processing step, expressed as a constrained profile of PROV-O. Inputs and outputs are entity references; the role each played is expressed through prov:qualifiedUsage rather than inline, so the profile stays compatible with the PROV-O object model.",
  "allOf": [
    {
      "$ref": "https://ogcincubator.github.io/bblock-prov-schema/build/annotated/ogc-utils/prov/schema.json"
    },
    {
      "type": "object",
      "required": [
        "id",
        "processType",
        "used",
        "generated"
      ],
      "properties": {
        "id": {
          "description": "Stable identifier for this processing step activity.",
          "type": "string"
        },
        "processType": {
          "description": "Identifier of the registered process type this step is an instance of. This is the link that PROV-O and OGC API - Processes Part 5 do not themselves provide. Bound to dct:type rather than a newly minted term, so the value resolves as a governed concept in the process-type register.",
          "type": "string",
          "x-jsonld-id": "http://purl.org/dc/terms/type",
          "x-jsonld-type": "@id"
        },
        "label": {
          "type": "string",
          "x-jsonld-id": "http://www.w3.org/2000/01/rdf-schema#label"
        },
        "startedAtTime": {
          "type": "string",
          "format": "date-time"
        },
        "endedAtTime": {
          "type": "string",
          "format": "date-time"
        },
        "used": {
          "description": "Entities consumed by this step.",
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "generated": {
          "description": "Entities produced by this step.",
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "qualifiedUsage": {
          "description": "Which declared input slot of the process type each consumed entity occupied. Makes two runs of the same process type comparable.",
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "entity",
              "hadRole"
            ],
            "properties": {
              "entity": {
                "type": "string"
              },
              "hadRole": {
                "type": "string"
              }
            }
          }
        },
        "wasAssociatedWith": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "parameters": {
          "description": "Parameter values that determined the behaviour of this step. Keys SHOULD be drawn from the parameter terms declared by the registered process type. Deliberately left unbound in the JSON-LD context: how parameters should be typed depends on whether process types are registered coarsely or as parameterised subtypes, which is still an open question for the register design.",
          "type": "object",
          "additionalProperties": true
        }
      }
    }
  ]
}