diff --git a/algorithm_catalog/dhi/record.json b/algorithm_catalog/dhi/record.json index 24b5cdfc..8938fd75 100644 --- a/algorithm_catalog/dhi/record.json +++ b/algorithm_catalog/dhi/record.json @@ -23,7 +23,10 @@ ], "contacts": [], "themes": [], - "license": "other" + "license": "other", + "acl": { + "admin": ["@dhigroup.com"] + } }, "linkTemplates": [], "links": [ diff --git a/algorithm_catalog/eodc/record.json b/algorithm_catalog/eodc/record.json new file mode 100644 index 00000000..cd203690 --- /dev/null +++ b/algorithm_catalog/eodc/record.json @@ -0,0 +1,46 @@ +{ + "id": "eodc", + "type": "Feature", + "conformsTo": [ + "http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core" + ], + "properties": { + "created": "2025-12-03T13:00:00Z", + "updated": "2025-12-03T13:00:00Z", + "type": "algoritm_provider", + "title": "EODC", + "description": "", + "keywords": [], + "language": { + "code": "en-US", + "name": "English (United States)" + }, + "languages": [ + { + "code": "en-US", + "name": "English (United States)" + } + ], + "contacts": [], + "themes": [], + "license": "other", + "acl": { + "admin": ["@eodc.eu"] + } + }, + "linkTemplates": [], + "links": [ + { + "rel": "website", + "type": "text/html", + "title": "EODC", + "href": "https://eodc.eu/" + }, + { + "rel": "logo", + "type": "image/png", + "title": "Logo", + "href": "https://eodc.eu/wp-content/themes/eodc/assets/imgs/eodc_logo_marine.svg" + } + ] +} \ No newline at end of file diff --git a/algorithm_catalog/eodc/sen2like/benchmark_scenarios/sen2like.json b/algorithm_catalog/eodc/sen2like/benchmark_scenarios/sen2like.json index 617655ad..2525865c 100644 --- a/algorithm_catalog/eodc/sen2like/benchmark_scenarios/sen2like.json +++ b/algorithm_catalog/eodc/sen2like/benchmark_scenarios/sen2like.json @@ -7,7 +7,7 @@ "process_graph": { "ardsen2like": { "process_id": "sen2like", - "namespace": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/sen2like/algorithm_catalog/eodc/sen2like/openeo_udp/sen2like.json", + "namespace": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/algorithm_catalog/eodc/sen2like/openeo_udp/sen2like.json", "arguments": { "spatial_extent": { "east": 16.414, diff --git a/algorithm_catalog/eodc/sen2like/records/sen2like.json b/algorithm_catalog/eodc/sen2like/records/sen2like.json index 8ce714cd..2edf22d1 100644 --- a/algorithm_catalog/eodc/sen2like/records/sen2like.json +++ b/algorithm_catalog/eodc/sen2like/records/sen2like.json @@ -11,11 +11,10 @@ "updated": "2025-05-22T00:00:00Z", "type": "service", "title": "Harmonized Landsat/Sentinel-2 ARD", - "description": "# Sen2like\n\nThe Sen2Like processor was developed by ESA as part of the EU Copernicus program. It creates Sentinel-2 like harmonized (Level-2H) or fused (Level-2F) surface reflectances by harmonizing Sentinel-2 and Landsat 8/Landsat 9 to increase the temporal revisits. The fusion involves the upscaling of Landsat 8/Landsat 9 data to Sentinel-2 resolution. Furthermore, the resulting sen2like L2H/ L2F data can be processed using openEO to generate statistics, vegetation indices, do comparisons with other datasets, etc.\n\n### Methodology\n\nThe processing of the incoming Landsat and Sentinel-2 L1C data includes the following main processing steps: Geometric Processing, Stitching, Geometric Check, Inter-calibration, Atmospheric correction, BRDF Adjustment, SBAF, Topographic Correction, Data Fusion. If Sentinel-2 L2A data is provided, sen2like processing will not include Atmospheric and Topographic Correction. In the geometric processing step, the input images are co-registered to a Sentinel-2 reference image. The atmospheric correction step makes use of the sen2cor processor and additionally relies on Copernicus Atmosphere Monitoring Service (CAMS) Near Real Time and Reanalysis data as well as the Copernicus Digital Elevation Model. The Data Fusion step alignes Landsat 8 image pixel spacing fully with Sentinel2 image pixel spacing. Depending on the band, the resolution of the Landsat L2F product is 10 m, 20 m or 30 m.\n\n### Quality\n\nThe geometric check process is a Quality Control step of the product. For further information, see Sen2like User Manual.\n\n### Links\n\n- [RD1] openEO platform Sen2like documentation https://docs.openeo.cloud/usecases/ard/sen2like\n- [RD1] Saunier, S. (2025). Sen2like User Manual https://github.com/senbox-org/sen2like/blob/master/sen2like/docs/source/S2-SEN2LIKE-UM-V1.10.pdf", + "description": "Sen2Like is a processor that generates harmonized or fused Sentinel-2–like surface reflectance products by combining Sentinel-2 and Landsat 8/9 data. By inter-calibrating, atmospherically correcting, and optionally fusing Landsat data to Sentinel-2 resolution, it increases temporal revisit frequency and produces analysis-ready datasets that can be further processed with openEO for statistics, indices, and comparisons.", "keywords": [ - "sentinel-2", - "landsat-8", - "ard" + "Sentinel-2", + "Landsat-8" ], "language": { "code": "en-US", @@ -74,6 +73,18 @@ }, "linkTemplates": [], "links": [ + { + "rel": "provider", + "type": "application/json", + "title": "EODC", + "href": "../../record.json" + }, + { + "rel": "platform", + "type": "application/json", + "title": "EODC openEO Backend", + "href": "../../../../platform_catalog/openeo_eodc.json" + }, { "rel": "application", "type": "application/vnd.openeo+json;type=process", @@ -95,8 +106,8 @@ { "rel": "service", "type": "application/json", - "title": "openEO platform", - "href": "https://openeo.cloud" + "title": "EODC openEO Backend", + "href": "https://openeo.eodc.eu/openeo/1.2.0" }, { "rel": "cite-as", diff --git a/algorithm_catalog/eurac/record.json b/algorithm_catalog/eurac/record.json index 968dcbf7..8e3ca1bd 100644 --- a/algorithm_catalog/eurac/record.json +++ b/algorithm_catalog/eurac/record.json @@ -23,7 +23,10 @@ ], "contacts": [], "themes": [], - "license": "other" + "license": "other", + "acl": { + "admin": ["@eurac.edu"] + } }, "linkTemplates": [], "links": [ diff --git a/algorithm_catalog/terradue/record.json b/algorithm_catalog/terradue/record.json index 88a34c52..2a15dfdb 100644 --- a/algorithm_catalog/terradue/record.json +++ b/algorithm_catalog/terradue/record.json @@ -23,7 +23,10 @@ ], "contacts": [], "themes": [], - "license": "other" + "license": "other", + "acl": { + "admin": ["@terradue.com"] + } }, "linkTemplates": [], "links": [ diff --git a/algorithm_catalog/vito/record.json b/algorithm_catalog/vito/record.json index 2834f40f..f9acab8e 100644 --- a/algorithm_catalog/vito/record.json +++ b/algorithm_catalog/vito/record.json @@ -23,7 +23,10 @@ ], "contacts": [], "themes": [], - "license": "other" + "license": "other", + "acl": { + "admin": ["@vito.be"] + } }, "linkTemplates": [], "links": [ diff --git a/algorithm_catalog/wur/record.json b/algorithm_catalog/wur/record.json index 2436ef6c..2f4c58e0 100644 --- a/algorithm_catalog/wur/record.json +++ b/algorithm_catalog/wur/record.json @@ -23,7 +23,10 @@ ], "contacts": [], "themes": [], - "license": "other" + "license": "other", + "acl": { + "admin": ["@vito.be"] + } }, "linkTemplates": [], "links": [ diff --git a/docs/catalogue.md b/docs/catalogue.md index c74e74de..d23ff984 100644 --- a/docs/catalogue.md +++ b/docs/catalogue.md @@ -42,6 +42,8 @@ It is also important to link the service record to the provider record. This can ### 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. +Each platform record must also have an `properties.acl` section that defines the access control list for the platform. This information is used to determine which email addresses are authorized to access benchmark information for services hosted on that platform (currently in development). You can either specify specific email addresses or define email domains that are allowed access. + ### 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`). diff --git a/platform_catalog/openeo_eodc.json b/platform_catalog/openeo_eodc.json new file mode 100644 index 00000000..a5a72d3a --- /dev/null +++ b/platform_catalog/openeo_eodc.json @@ -0,0 +1,60 @@ +{ + "id": "openeo_eodc", + "type": "Feature", + "conformsTo": [ + "http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core" + ], + "properties": { + "created": "2024-05-17T00:00:00Z", + "updated": "2024-05-17T00:00:00Z", + "type": "openeo_backend", + "title": "EODC openEO Backend", + "short_title": "EODC openEO", + "description": "The EODC openEO backend enables processing using openEO.", + "keywords": [], + "language": { + "code": "en-US", + "name": "English (United States)" + }, + "languages": [ + { + "code": "en-US", + "name": "English (United States)" + } + ], + "contacts": [ + { + "name": "EODC openEO Backend", + "links": [ + { + "href": "https://openeo.eodc.eu", + "rel": "about", + "title": "EODC openEO Backend", + "type": "text/html" + } + ], + "contactInstructions": "SEE WEBSITE", + "roles": [ + "operator" + ] + } + ], + "themes": [], + "license": "other" + }, + "linkTemplates": [], + "links": [ + { + "rel": "website", + "type": "text/html", + "title": "EODC openEO Backend API", + "href": "https://openeo.eodc.eu" + }, + { + "rel": "logo", + "type": "image/svg+xml", + "title": "EODC Logo", + "href": "https://eodc.eu/wp-content/themes/eodc/assets/imgs/eodc_logo_marine.svg" + } + ] +} \ No newline at end of file diff --git a/qa/tools/apex_algorithm_qa_tools/scenarios.py b/qa/tools/apex_algorithm_qa_tools/scenarios.py index 9f3af838..2f0557a5 100644 --- a/qa/tools/apex_algorithm_qa_tools/scenarios.py +++ b/qa/tools/apex_algorithm_qa_tools/scenarios.py @@ -96,12 +96,14 @@ def lint_benchmark_scenario(scenario: BenchmarkScenario): # TODO #17 raise descriptive exceptions instead of asserts? assert re.match(r"^[a-zA-Z0-9_-]+$", scenario.id) # TODO proper allow-list of backends or leave this freeform? - assert scenario.backend in [ - "openeo.dataspace.copernicus.eu", - "openeofed.dataspace.copernicus.eu", - "openeo.cloud", - "openeo.vito.be", + backend_patterns = [ + r"^(https:\/\/)?openeo\.dataspace\.copernicus\.eu(\/.*)?$", + r"^(https:\/\/)?openeofed\.dataspace\.copernicus\.eu(\/.*)?$", + r"^(https:\/\/)?openeo\.cloud(\/.*)?$", + r"^(https:\/\/)?openeo\.vito\.be(\/.*)?$", + r"^(https:\/\/)?openeo\.eodc\.eu(\/.*)?$", ] + assert any(re.fullmatch(p, scenario.backend) for p in backend_patterns), f"Unsupported backend: {scenario.backend!r}" # TODO: more advanced process graph validation? assert isinstance(scenario.process_graph, dict) for node_id, node in scenario.process_graph.items(): diff --git a/schemas/provider.json b/schemas/provider.json index e0907195..9a42ca92 100644 --- a/schemas/provider.json +++ b/schemas/provider.json @@ -49,7 +49,8 @@ "title", "description", "contacts", - "themes" + "themes", + "acl" ], "properties": { "created": { @@ -324,6 +325,18 @@ } } } + }, + "acl": { + "type": "object", + "properties": { + "admin": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false } } }, diff --git a/schemas/record.json b/schemas/record.json index 94059090..dea04410 100644 --- a/schemas/record.json +++ b/schemas/record.json @@ -53,8 +53,6 @@ "type", "title", "description", - "cost_estimate", - "cost_unit", "contacts", "themes", "formats"