diff --git a/algorithm_catalog/dhi/RAMONA-herbaceous_rangeland_biomass-country-mosaick/records/RAMONA-herbaceous_rangeland_biomass-country-mosaick.json b/algorithm_catalog/dhi/RAMONA-herbaceous_rangeland_biomass-country-mosaick/records/RAMONA-herbaceous_rangeland_biomass-country-mosaick.json index 87ee0471..cf02635f 100644 --- a/algorithm_catalog/dhi/RAMONA-herbaceous_rangeland_biomass-country-mosaick/records/RAMONA-herbaceous_rangeland_biomass-country-mosaick.json +++ b/algorithm_catalog/dhi/RAMONA-herbaceous_rangeland_biomass-country-mosaick/records/RAMONA-herbaceous_rangeland_biomass-country-mosaick.json @@ -92,7 +92,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/openeo_platform.json" + "href": "../../../../platform_catalog/openeo_platform.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "DHI", + "href": "../../record.json" }, { "rel": "webapp", diff --git a/algorithm_catalog/dhi/wind_turbine/records/wind_turbine_detection.json b/algorithm_catalog/dhi/wind_turbine/records/wind_turbine_detection.json index 5c799881..269a857f 100644 --- a/algorithm_catalog/dhi/wind_turbine/records/wind_turbine_detection.json +++ b/algorithm_catalog/dhi/wind_turbine/records/wind_turbine_detection.json @@ -94,7 +94,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/openeo_platform.json" + "href": "../../../../platform_catalog/openeo_platform.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "DHI", + "href": "../../record.json" }, { "rel": "webapp", diff --git a/algorithm_catalog/eurac/eurac_pv_farm_detection/records/eurac_pv_farm_detection.json b/algorithm_catalog/eurac/eurac_pv_farm_detection/records/eurac_pv_farm_detection.json index 3f3e3638..bf92dc62 100644 --- a/algorithm_catalog/eurac/eurac_pv_farm_detection/records/eurac_pv_farm_detection.json +++ b/algorithm_catalog/eurac/eurac_pv_farm_detection/records/eurac_pv_farm_detection.json @@ -113,7 +113,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "Eurac Research", + "href": "../../record.json" }, { "rel": "webapp", diff --git a/algorithm_catalog/terradue/gep_bas/records/gep_bas.json b/algorithm_catalog/terradue/gep_bas/records/gep_bas.json index b9cb10d0..fa42c226 100644 --- a/algorithm_catalog/terradue/gep_bas/records/gep_bas.json +++ b/algorithm_catalog/terradue/gep_bas/records/gep_bas.json @@ -95,7 +95,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/gep.json" + "href": "../../../../platform_catalog/gep.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "Terradue", + "href": "../../record.json" }, { "rel": "service", diff --git a/algorithm_catalog/terradue/gep_ost/records/gep_ost.json b/algorithm_catalog/terradue/gep_ost/records/gep_ost.json index a40e2fee..1057be1d 100644 --- a/algorithm_catalog/terradue/gep_ost/records/gep_ost.json +++ b/algorithm_catalog/terradue/gep_ost/records/gep_ost.json @@ -93,7 +93,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/gep.json" + "href": "../../../../platform_catalog/gep.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "Terradue", + "href": "../../record.json" }, { "rel": "service", diff --git a/algorithm_catalog/terradue/sar_coin/records/sar_coin.json b/algorithm_catalog/terradue/sar_coin/records/sar_coin.json index 1e76fc5b..b4f22fca 100644 --- a/algorithm_catalog/terradue/sar_coin/records/sar_coin.json +++ b/algorithm_catalog/terradue/sar_coin/records/sar_coin.json @@ -94,7 +94,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/gep.json" + "href": "../../../../platform_catalog/gep.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "Terradue", + "href": "../../record.json" }, { "rel": "service", diff --git a/algorithm_catalog/terradue/snap_insar_sentinel1_iw_slc/records/snap_insar_sentinel1_iw_slc.json b/algorithm_catalog/terradue/snap_insar_sentinel1_iw_slc/records/snap_insar_sentinel1_iw_slc.json index 4b283546..c91bc929 100644 --- a/algorithm_catalog/terradue/snap_insar_sentinel1_iw_slc/records/snap_insar_sentinel1_iw_slc.json +++ b/algorithm_catalog/terradue/snap_insar_sentinel1_iw_slc/records/snap_insar_sentinel1_iw_slc.json @@ -94,7 +94,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/gep.json" + "href": "../../../../platform_catalog/gep.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "Terradue", + "href": "../../record.json" }, { "rel": "service", diff --git a/algorithm_catalog/vito/bap_composite/records/bap_composite.json b/algorithm_catalog/vito/bap_composite/records/bap_composite.json index 00502dc7..22fe51f2 100644 --- a/algorithm_catalog/vito/bap_composite/records/bap_composite.json +++ b/algorithm_catalog/vito/bap_composite/records/bap_composite.json @@ -105,7 +105,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "example-output", diff --git a/algorithm_catalog/vito/biopar/records/biopar.json b/algorithm_catalog/vito/biopar/records/biopar.json index f7f0cb13..987c2233 100644 --- a/algorithm_catalog/vito/biopar/records/biopar.json +++ b/algorithm_catalog/vito/biopar/records/biopar.json @@ -122,7 +122,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "example-output", diff --git a/algorithm_catalog/vito/fusets_mogpr/records/fusets_mogpr.json b/algorithm_catalog/vito/fusets_mogpr/records/fusets_mogpr.json index ce0b87e3..b14fbc74 100644 --- a/algorithm_catalog/vito/fusets_mogpr/records/fusets_mogpr.json +++ b/algorithm_catalog/vito/fusets_mogpr/records/fusets_mogpr.json @@ -133,7 +133,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "about", diff --git a/algorithm_catalog/vito/max_ndvi_composite/records/max_ndvi_composite.json b/algorithm_catalog/vito/max_ndvi_composite/records/max_ndvi_composite.json index 28381db1..a43f60a1 100644 --- a/algorithm_catalog/vito/max_ndvi_composite/records/max_ndvi_composite.json +++ b/algorithm_catalog/vito/max_ndvi_composite/records/max_ndvi_composite.json @@ -110,7 +110,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "example-output", diff --git a/algorithm_catalog/vito/parcel_delineation/records/parcel_delineation.json b/algorithm_catalog/vito/parcel_delineation/records/parcel_delineation.json index d29dc439..afeede37 100644 --- a/algorithm_catalog/vito/parcel_delineation/records/parcel_delineation.json +++ b/algorithm_catalog/vito/parcel_delineation/records/parcel_delineation.json @@ -109,7 +109,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "webapp", @@ -142,4 +148,4 @@ "href": "https://raw.githubusercontent.com/Open-EO/openeo-community-examples/refs/heads/main/python/ParcelDelineation/Parcel%20delineation.ipynb" } ] -} +} \ No newline at end of file diff --git a/algorithm_catalog/vito/random_forest_firemapping/records/random_forest_firemapping.json b/algorithm_catalog/vito/random_forest_firemapping/records/random_forest_firemapping.json index 709fb292..1f318a1b 100644 --- a/algorithm_catalog/vito/random_forest_firemapping/records/random_forest_firemapping.json +++ b/algorithm_catalog/vito/random_forest_firemapping/records/random_forest_firemapping.json @@ -105,7 +105,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "example-output", diff --git a/algorithm_catalog/vito/sentinel1_stats/records/sentinel1_stats.json b/algorithm_catalog/vito/sentinel1_stats/records/sentinel1_stats.json index e20285b5..c031574e 100644 --- a/algorithm_catalog/vito/sentinel1_stats/records/sentinel1_stats.json +++ b/algorithm_catalog/vito/sentinel1_stats/records/sentinel1_stats.json @@ -108,7 +108,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "example-output", diff --git a/algorithm_catalog/vito/variabilitymap/records/variabilitymap.json b/algorithm_catalog/vito/variabilitymap/records/variabilitymap.json index ecc6f398..41193099 100644 --- a/algorithm_catalog/vito/variabilitymap/records/variabilitymap.json +++ b/algorithm_catalog/vito/variabilitymap/records/variabilitymap.json @@ -126,7 +126,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "example-output", diff --git a/algorithm_catalog/vito/worldcereal_crop_extent/records/worldcereal_crop_extent.json b/algorithm_catalog/vito/worldcereal_crop_extent/records/worldcereal_crop_extent.json index 2e1aefeb..ebbc6e8b 100644 --- a/algorithm_catalog/vito/worldcereal_crop_extent/records/worldcereal_crop_extent.json +++ b/algorithm_catalog/vito/worldcereal_crop_extent/records/worldcereal_crop_extent.json @@ -115,7 +115,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "about", diff --git a/algorithm_catalog/vito/worldcereal_crop_type/records/worldcereal_crop_type.json b/algorithm_catalog/vito/worldcereal_crop_type/records/worldcereal_crop_type.json index 018bc764..f81e3cd0 100644 --- a/algorithm_catalog/vito/worldcereal_crop_type/records/worldcereal_crop_type.json +++ b/algorithm_catalog/vito/worldcereal_crop_type/records/worldcereal_crop_type.json @@ -113,7 +113,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "about", diff --git a/algorithm_catalog/vito/worldcover_statistics/records/worldcover_statistics.json b/algorithm_catalog/vito/worldcover_statistics/records/worldcover_statistics.json index 334334d9..7a9b6fe9 100644 --- a/algorithm_catalog/vito/worldcover_statistics/records/worldcover_statistics.json +++ b/algorithm_catalog/vito/worldcover_statistics/records/worldcover_statistics.json @@ -92,7 +92,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "VITO", + "href": "../../record.json" }, { "rel": "webapp", diff --git a/algorithm_catalog/wur/worldagrocommodities/records/wac_inference_africa.json b/algorithm_catalog/wur/worldagrocommodities/records/wac_inference_africa.json index 1b611d67..5d95544b 100644 --- a/algorithm_catalog/wur/worldagrocommodities/records/wac_inference_africa.json +++ b/algorithm_catalog/wur/worldagrocommodities/records/wac_inference_africa.json @@ -106,7 +106,13 @@ "rel": "platform", "type": "application/json", "title": "CDSE openEO federation", - "href": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/cdse_openeo_federation.json" + "href": "../../../../platform_catalog/cdse_openeo_federation.json" + }, + { + "rel": "provider", + "type": "application/json", + "title": "Wageningen University & Research", + "href": "../../record.json" } ] } \ No newline at end of file diff --git a/docs/catalogue.md b/docs/catalogue.md index cc0e5265..6c009edc 100644 --- a/docs/catalogue.md +++ b/docs/catalogue.md @@ -25,6 +25,25 @@ Onboarding your service to the APEx Algorithm Services Catalogue is a straightfo 2. Fork the current repository and add your record file to `algorithm_catalog///records/.json`. You can create the necessary subdirectories if they do not already exist. 3. Once your record is ready, submit a pull request to this repository. The APEx team will review your submission and, upon approval, your service will be added to the APEx Algorithm Services Catalogue. +# Providers and Platforms + +To ensure the proper contribution of the services that are part of the APEx Algorithm Services Catalogue, it is essential to include information about the service provider and the hosting platform within the record. + +## Provider Information + +### Creating a new Provider Record +If you are creating a new folder in the `algorithm_catalog` directory for your service, make sure to include a `record.json` file within that folder. This OGC API Record should contain all the necessary information about the service provider, such as the provider's name, description, and contact details, and a link to the website and logo. You can refer to an existing provider folder in the repository as a template for creating your own. + +### Linking the Service to the Provider +It is also important to link the service record to the provider record. This can be achieved by adding an entry in the `links` section of the service record, where the `rel` property is set to `provider` and the `href` contains the relative path to the provider's record file (`../../record.json`). + +## Hosting Platform Information + +### Creating a new Platform Record +If you are integrating a service record that is hosted on an APEx-compliant platform that is not yet represented in the repository, you will need to create a new `.json` file within the `platform_catalog` directory. This new file contains all the necessary information about the hosting platform, such as its name, description, contact details, website link, and logo. You can refer to an existing platform file in the repository as a template for creating your own. + +### Linking the Service to the Hosting Platform +To link the service record to the hosting platform record, add an entry in the `links` section of the service record. Set the `rel` property to `platform` and the `href` to the relative path of the platform's record file (`../../../../platform_catalog/.json`). # Record Mapping The following sections demonstrate how the various sections from the record are connected to the information displayed in the APEx Algorithm Service Catalogue. diff --git a/schemas/record.json b/schemas/record.json index b1b56186..ebd7ba8f 100644 --- a/schemas/record.json +++ b/schemas/record.json @@ -448,6 +448,7 @@ "description": "The type or semantics of the relation.", "enum": [ "platform", + "provider", "application", "service", "example-output", @@ -483,25 +484,50 @@ "title", "href" ], - "if": { - "properties": { - "rel": { - "const": "platform" - } - } - }, - "then": { - "properties": { - "href": { - "type": "string", - "description": "Platform record URI (must point into platform_catalog).", - "pattern": "^https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/platform_catalog/[^\\s]+\\.json$" + "allOf": [ + { + "if": { + "properties": { + "rel": { + "const": "platform" + } + } + }, + "then": { + "properties": { + "href": { + "type": "string", + "description": "Platform record URI (must point into platform_catalog).", + "pattern": "^(?:\\.\\.\/){4}platform_catalog/[^\\s]+\\.json$" + } + }, + "required": [ + "href" + ] } }, - "required": [ - "href" - ] - } + { + "if": { + "properties": { + "rel": { + "const": "provider" + } + } + }, + "then": { + "properties": { + "href": { + "type": "string", + "description": "Provider record URI (must point into platform_catalog).", + "pattern": "^(?:\\.\\.\/){2}record\\.json$" + } + }, + "required": [ + "href" + ] + } + } + ] }, "minItems": 3, "allOf": [ @@ -525,6 +551,16 @@ } } }, + { + "contains": { + "type": "object", + "properties": { + "rel": { + "const": "provider" + } + } + } + }, { "contains": { "type": "object",