From 25e112fa985a6210f858231064eeb17173aa1d34 Mon Sep 17 00:00:00 2001 From: "K. Joeri van der Velde" Date: Wed, 5 Mar 2025 17:08:20 +0100 Subject: [PATCH] Feat: Data Catalogue compliance for EJP-RD VP onboarding metadata level 1 (#4796) * Fixes for FDP SHACL files * Correct casing for DCAT endpointURL * RDF API bugfix: prevent unintentional text to array * Compliance updates for Agent and Endpoint * Fix for EJP-RD resource SHACL file * Enable EJP-RD compliance for Data Catalogue * Sync back to shared to fix Beacon tests --------- Co-authored-by: K. Joeri van der Velde <82420+joerivandervelde@users.noreply.github.com> --- .../test/java/org/molgenis/emx2/datamodels/TestLoaders.java | 2 +- .../SHACL/EJP_RD_VP_Level_1/01-08-2024/resource.shacl | 2 +- .../java/org/molgenis/emx2/rdf/ColumnTypeRdfMapper.java | 6 ++++++ data/_demodata/applications/datacatalogue/Agent.csv | 6 +++--- data/_demodata/applications/datacatalogue/Endpoint.csv | 6 +++--- data/_demodata/shared-examples/Agent.csv | 6 +++--- data/_demodata/shared-examples/Endpoint.csv | 6 +++--- data/_models/shared/Agent.csv | 4 +++- data/_models/shared/Endpoint.csv | 6 +++--- 9 files changed, 26 insertions(+), 18 deletions(-) diff --git a/backend/molgenis-emx2-datamodels/src/test/java/org/molgenis/emx2/datamodels/TestLoaders.java b/backend/molgenis-emx2-datamodels/src/test/java/org/molgenis/emx2/datamodels/TestLoaders.java index caffb0be44..8cd9d89e39 100644 --- a/backend/molgenis-emx2-datamodels/src/test/java/org/molgenis/emx2/datamodels/TestLoaders.java +++ b/backend/molgenis-emx2-datamodels/src/test/java/org/molgenis/emx2/datamodels/TestLoaders.java @@ -94,7 +94,7 @@ void test06DataCatalogueLoader() throws Exception { testShaclCompliance(FAIR_DATA_POINT_SHACL_FILES, outputStream.toString()); // testShaclCompliance(DCAT_AP_SHACL_FILES, outputStream.toString()); testShaclCompliance(HEALTH_RI_SHACL_FILES, outputStream.toString()); - // testShaclCompliance(EJP_RD_VP_SHACL_FILES, outputStream.toString()); + testShaclCompliance(EJP_RD_VP_SHACL_FILES, outputStream.toString()); } @Test diff --git a/backend/molgenis-emx2-datamodels/src/test/resources/SHACL/EJP_RD_VP_Level_1/01-08-2024/resource.shacl b/backend/molgenis-emx2-datamodels/src/test/resources/SHACL/EJP_RD_VP_Level_1/01-08-2024/resource.shacl index a97ee52d6a..4940cf5369 100644 --- a/backend/molgenis-emx2-datamodels/src/test/resources/SHACL/EJP_RD_VP_Level_1/01-08-2024/resource.shacl +++ b/backend/molgenis-emx2-datamodels/src/test/resources/SHACL/EJP_RD_VP_Level_1/01-08-2024/resource.shacl @@ -57,7 +57,7 @@ dash:editor dash:URIEditor ; dash:viewer dash:LabelViewer ; ], [ - sh:path dct:keyword ; + sh:path dcat:keyword ; # FIX: 'keyword' is a DCAT term (prefix: dcat), instead of a Dublin Core term (prefix: dct) sh:name "Keywords" ; sh:nodeKind sh:Literal ; sh:minCount 1 ; diff --git a/backend/molgenis-emx2-rdf/src/main/java/org/molgenis/emx2/rdf/ColumnTypeRdfMapper.java b/backend/molgenis-emx2-rdf/src/main/java/org/molgenis/emx2/rdf/ColumnTypeRdfMapper.java index 20a810b262..315e527bde 100644 --- a/backend/molgenis-emx2-rdf/src/main/java/org/molgenis/emx2/rdf/ColumnTypeRdfMapper.java +++ b/backend/molgenis-emx2-rdf/src/main/java/org/molgenis/emx2/rdf/ColumnTypeRdfMapper.java @@ -132,6 +132,12 @@ Set retrieveValues(String baseURL, Row row, Column column) { return basicRetrievalString(row.getStringArrayPreserveDelimiter(column), Values::literal); } }, + TEXT(CoreDatatype.XSD.STRING) { + @Override + Set retrieveValues(String baseURL, Row row, Column column) { + return basicRetrievalString(row.getStringArrayPreserveDelimiter(column), Values::literal); + } + }, INT(CoreDatatype.XSD.INT) { @Override Set retrieveValues(String baseURL, Row row, Column column) { diff --git a/data/_demodata/applications/datacatalogue/Agent.csv b/data/_demodata/applications/datacatalogue/Agent.csv index b12035fa29..f3842c2534 100644 --- a/data/_demodata/applications/datacatalogue/Agent.csv +++ b/data/_demodata/applications/datacatalogue/Agent.csv @@ -1,3 +1,3 @@ -name,logo -MOLGENIS,https://molgenis.org/assets/img/logo_green.png -UMCG,https://www.umcg.nl/o/umcg-website-theme/images/desktop-umcg-logo.webp +name,logo,url,mbox +MOLGENIS,https://molgenis.org/assets/img/logo_green.png,https://molgenis.org,molgenis-support@umcg.nl +UMCG,https://www.umcg.nl/o/umcg-website-theme/images/desktop-umcg-logo.webp,https://www.umcg.nl,info@umcg.nl diff --git a/data/_demodata/applications/datacatalogue/Endpoint.csv b/data/_demodata/applications/datacatalogue/Endpoint.csv index 67038aedcc..a0d371eba0 100644 --- a/data/_demodata/applications/datacatalogue/Endpoint.csv +++ b/data/_demodata/applications/datacatalogue/Endpoint.csv @@ -1,3 +1,3 @@ -id,type,name,version,description,publisher,language,license,conformsTo,rights,accessRights,contact,keyword,theme,endPointDescription,metadataCatalog.name,metadataCatalog.network,organisation,alternativeUrl,conformsToFdpSpec,EJP_RD_personalData,EJP_RD_vpConnection,issued,modified -org.molgeniscloud.beaconv2,https://w3id.org/fdp/fdp-o#MetadataService,MOLGENIS EMX2 Beacon v2,v2,This MOLGENIS EMX2 Beacon v2 is based on the GA4GH Beacon v2.0 specification,MOLGENIS,,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://github.com/ga4gh-beacon/beacon-v2/,,,molgenis-support@umcg.nl,,https://www.wikidata.org/wiki/Q7321258,,testNetwork1,testNetwork1,UMCG,https://umcgresearch.org/w/gcc,https://github.com/ga4gh-beacon/beacon-v2/,,,1990-01-01 00:00:00.0,1990-01-01 00:00:00.0 -Example_FAIR_Data_Point,"https://w3id.org/fdp/fdp-o#MetadataService, http://www.w3.org/ns/dcat#Resource, http://www.w3.org/ns/dcat#DataService, https://w3id.org/fdp/fdp-o#FAIRDataPoint",Example MOLGENIS EMX2 FAIR Data Point,v1.2,"This example MOLGENIS EMX2 multi-interoperable FAIR Data Point is based on the FAIR Data Point 1.2 specification but includes extension points to support additional DCAT flavours including EJP RD Virtual Platform level 1 metadata, HealthRI core plateau 1 metadata, and so on.",MOLGENIS,https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?iso_639_1=en,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,https://www.linktosomerightsstatement.org,https://www.linktosomeaccessrightsstatement.org,molgenis-support@umcg.nl,"example, fdp, molgenis, emx2",https://www.wikidata.org/wiki/Q2352616,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,"LifeCycle,ATHLETE","LifeCycle,ATHLETE",UMCG,https://alturl.org,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,false,https://w3id.org/ejp-rd/vocabulary#VPDiscoverable,1990-01-01 00:00:00.0,1990-01-01 00:00:00.0 +id,type,name,version,description,publisher,language,license,conformsTo,rights,accessRights,contact,keyword,theme,endPointDescription,metadataCatalog.name,metadataCatalog.network,organisation,alternativeUrl,conformsToFdpSpec,EJP_RD_personalData,EJP_RD_vpConnection,issued,modified,url +org.molgeniscloud.beaconv2,https://w3id.org/fdp/fdp-o#MetadataService,MOLGENIS EMX2 Beacon v2,v2,This MOLGENIS EMX2 Beacon v2 is based on the GA4GH Beacon v2.0 specification,MOLGENIS,,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://github.com/ga4gh-beacon/beacon-v2/,,,MOLGENIS,"Example MOLGENIS EMX2 Beacon v2 endpoint",https://www.wikidata.org/wiki/Q7321258,,testNetwork1,testNetwork1,UMCG,https://umcgresearch.org/w/gcc,https://github.com/ga4gh-beacon/beacon-v2/,false,https://w3id.org/ejp-rd/vocabulary#VPDiscoverable,1990-01-01 00:00:00.0,1990-01-01 00:00:00.0,https://molgenis.org/ +Example_FAIR_Data_Point,"https://w3id.org/fdp/fdp-o#MetadataService, http://www.w3.org/ns/dcat#Resource, http://www.w3.org/ns/dcat#DataService, https://w3id.org/fdp/fdp-o#FAIRDataPoint","Example MOLGENIS EMX2 FAIR Data Point",v1.2,"This example MOLGENIS EMX2 multi-interoperable FAIR Data Point is based on the FAIR Data Point 1.2 specification but includes extension points to support additional DCAT flavours including EJP RD Virtual Platform level 1 metadata, HealthRI core plateau 1 metadata, and so on.",MOLGENIS,https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?iso_639_1=en,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,https://www.linktosomerightsstatement.org,https://www.linktosomeaccessrightsstatement.org,MOLGENIS,"example, fdp, molgenis, emx2",https://www.wikidata.org/wiki/Q2352616,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,"LifeCycle,ATHLETE","LifeCycle,ATHLETE",UMCG,https://alturl.org,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,false,https://w3id.org/ejp-rd/vocabulary#VPDiscoverable,1990-01-01 00:00:00.0,1990-01-01 00:00:00.0,https://molgenis.org/ diff --git a/data/_demodata/shared-examples/Agent.csv b/data/_demodata/shared-examples/Agent.csv index b12035fa29..f3842c2534 100644 --- a/data/_demodata/shared-examples/Agent.csv +++ b/data/_demodata/shared-examples/Agent.csv @@ -1,3 +1,3 @@ -name,logo -MOLGENIS,https://molgenis.org/assets/img/logo_green.png -UMCG,https://www.umcg.nl/o/umcg-website-theme/images/desktop-umcg-logo.webp +name,logo,url,mbox +MOLGENIS,https://molgenis.org/assets/img/logo_green.png,https://molgenis.org,molgenis-support@umcg.nl +UMCG,https://www.umcg.nl/o/umcg-website-theme/images/desktop-umcg-logo.webp,https://www.umcg.nl,info@umcg.nl diff --git a/data/_demodata/shared-examples/Endpoint.csv b/data/_demodata/shared-examples/Endpoint.csv index 3dbd4f5eb3..a0d371eba0 100644 --- a/data/_demodata/shared-examples/Endpoint.csv +++ b/data/_demodata/shared-examples/Endpoint.csv @@ -1,3 +1,3 @@ -id,type,name,description,publisher,language,license,conformsTo,rights,accessRights,contact,keyword,theme,url,endPointDescription,metadataIdentifier,metadataCatalog,organisation,alternativeUrl,EJP_RD_personalData,EJP_RD_vpConnection -org.molgeniscloud.beaconv2,https://w3id.org/fdp/fdp-o#MetadataService,MOLGENIS EMX2 Beacon v2,This MOLGENIS EMX2 Beacon v2 is based on the GA4GH Beacon v2.0 specification,MOLGENIS,,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://github.com/ga4gh-beacon/beacon-v2/,,,molgenis-support@umcg.nl,,https://www.wikidata.org/wiki/Q7321258,https://molgenis.org/,,,,UMCG,https://umcgresearch.org/w/gcc,, -Example_FAIR_Data_Point,"https://w3id.org/fdp/fdp-o#MetadataService, http://www.w3.org/ns/dcat#Resource, http://www.w3.org/ns/dcat#DataService, https://w3id.org/fdp/fdp-o#FAIRDataPoint",Example MOLGENIS EMX2 FAIR Data Point,"This example MOLGENIS EMX2 multi-interoperable FAIR Data Point is based on the FAIR Data Point 1.2 specification but includes extension points to support additional DCAT flavours including EJP RD Virtual Platform level 1 metadata, HealthRI core plateau 1 metadata, and so on.",MOLGENIS,https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?iso_639_1=en,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,https://www.linktosomerightsstatement.org,https://www.linktosomeaccessrightsstatement.org,molgenis-support@umcg.nl,"example, fdp, molgenis, emx2",https://www.wikidata.org/wiki/Q2352616,https://www.MyMOLGENISServer.org/myFDPschema/api/rdf,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,https://www.MyMOLGENISServer.org/myFDPschema/api/rdf,"catalogId01,catalogId02",UMCG,https://alturl.org,false,https://w3id.org/ejp-rd/vocabulary#VPDiscoverable +id,type,name,version,description,publisher,language,license,conformsTo,rights,accessRights,contact,keyword,theme,endPointDescription,metadataCatalog.name,metadataCatalog.network,organisation,alternativeUrl,conformsToFdpSpec,EJP_RD_personalData,EJP_RD_vpConnection,issued,modified,url +org.molgeniscloud.beaconv2,https://w3id.org/fdp/fdp-o#MetadataService,MOLGENIS EMX2 Beacon v2,v2,This MOLGENIS EMX2 Beacon v2 is based on the GA4GH Beacon v2.0 specification,MOLGENIS,,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://github.com/ga4gh-beacon/beacon-v2/,,,MOLGENIS,"Example MOLGENIS EMX2 Beacon v2 endpoint",https://www.wikidata.org/wiki/Q7321258,,testNetwork1,testNetwork1,UMCG,https://umcgresearch.org/w/gcc,https://github.com/ga4gh-beacon/beacon-v2/,false,https://w3id.org/ejp-rd/vocabulary#VPDiscoverable,1990-01-01 00:00:00.0,1990-01-01 00:00:00.0,https://molgenis.org/ +Example_FAIR_Data_Point,"https://w3id.org/fdp/fdp-o#MetadataService, http://www.w3.org/ns/dcat#Resource, http://www.w3.org/ns/dcat#DataService, https://w3id.org/fdp/fdp-o#FAIRDataPoint","Example MOLGENIS EMX2 FAIR Data Point",v1.2,"This example MOLGENIS EMX2 multi-interoperable FAIR Data Point is based on the FAIR Data Point 1.2 specification but includes extension points to support additional DCAT flavours including EJP RD Virtual Platform level 1 metadata, HealthRI core plateau 1 metadata, and so on.",MOLGENIS,https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?iso_639_1=en,https://www.gnu.org/licenses/lgpl-3.0.html#license-text,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,https://www.linktosomerightsstatement.org,https://www.linktosomeaccessrightsstatement.org,MOLGENIS,"example, fdp, molgenis, emx2",https://www.wikidata.org/wiki/Q2352616,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,"LifeCycle,ATHLETE","LifeCycle,ATHLETE",UMCG,https://alturl.org,https://specs.fairdatapoint.org/fdp-specs-v1.2.html,false,https://w3id.org/ejp-rd/vocabulary#VPDiscoverable,1990-01-01 00:00:00.0,1990-01-01 00:00:00.0,https://molgenis.org/ diff --git a/data/_models/shared/Agent.csv b/data/_models/shared/Agent.csv index 718210c992..10adb48fd3 100644 --- a/data/_models/shared/Agent.csv +++ b/data/_models/shared/Agent.csv @@ -1,4 +1,6 @@ tableName,tableExtends,columnName,columnType,key,required,refSchema,refTable,refLink,refBack,validation,semantics,description,profiles -Agent,,,,,,,,,,,"http://xmlns.com/foaf/0.1/Agent","An agent (eg. person, group, software or physical artifact).","DCAT,Beacon v2,DataCatalogueFlat" +Agent,,,,,,,,,,,"http://xmlns.com/foaf/0.1/Agent,http://www.w3.org/2006/vcard/ns#Agent","An agent (eg. person, group, software or physical artifact).","DCAT,Beacon v2,DataCatalogueFlat" Agent,,name,string,1,TRUE,,,,,,"http://xmlns.com/foaf/0.1/name,http://purl.org/dc/terms/identifier",A name and identifier for this agent.,"DCAT,Beacon v2,DataCatalogueFlat" Agent,,logo,hyperlink,,,,,,,,"http://xmlns.com/foaf/0.1/logo",A logo representing some thing.,"DCAT,Beacon v2,DataCatalogueFlat" +Agent,,url,hyperlink,,,,,,,,"http://www.w3.org/2006/vcard/ns#url",An URL representing some thing.,"Beacon v2,DataCatalogueFlat" +Agent,,mbox,email,,,,,,,,"http://www.w3.org/2006/vcard/ns#hasEmail,http://xmlns.com/foaf/0.1/mbox","An email address is an identifier to send mail to particular electronic mailbox of a contact person or organization.","Beacon v2,DataCatalogueFlat" diff --git a/data/_models/shared/Endpoint.csv b/data/_models/shared/Endpoint.csv index 09f11b7049..87730f2205 100644 --- a/data/_models/shared/Endpoint.csv +++ b/data/_models/shared/Endpoint.csv @@ -4,14 +4,14 @@ Endpoint,,id,string,1,TRUE,,,,,,"http://schema.org/identifier","A unique proper Endpoint,,type,hyperlink_array,,TRUE,,,,,,http://www.w3.org/1999/02/22-rdf-syntax-ns#type,This row is an instance of one or more of these class(es) other than the Endpoint table.,"FAIRDataPoint,DataCatalogueFlat" Endpoint,,name,string_array,,TRUE,,,,,,http://purl.org/dc/terms/title,A name given to the resource.,"Beacon v2,FAIRDataPoint,DataCatalogueFlat" Endpoint,,version,text,,,,,,,,http://purl.org/dc/terms/hasVersion,An account of the resource version.,"DataCatalogueFlat" -Endpoint,,description,text_array,,,,,,,,http://purl.org/dc/terms/description,An account of the resource.,"Beacon v2,FAIRDataPoint,DataCatalogueFlat" +Endpoint,,description,text,,,,,,,,http://purl.org/dc/terms/description,An account of the resource.,"Beacon v2,FAIRDataPoint,DataCatalogueFlat" Endpoint,,publisher,ref_array,,TRUE,,Agent,,,,http://purl.org/dc/terms/publisher,An entity responsible for making the resource available.,"Beacon v2,FAIRDataPoint,DataCatalogueFlat" Endpoint,,language,hyperlink_array,,,,,,,,http://purl.org/dc/terms/language,A language of the resource.,"FAIRDataPoint,DataCatalogueFlat" Endpoint,,license,hyperlink,,TRUE,,,,,,http://purl.org/dc/terms/license,A legal document giving official permission to do something with the resource.,"FAIRDataPoint,DataCatalogueFlat" Endpoint,,conformsTo,hyperlink,,TRUE,,,,,,http://purl.org/dc/terms/conformsTo,An established standard to which the described resource conforms.,"FAIRDataPoint,DataCatalogueFlat" Endpoint,,rights,hyperlink_array,,,,,,,,http://purl.org/dc/terms/rights,Information about rights held in and over the resource.,"FAIRDataPoint,DataCatalogueFlat" Endpoint,,accessRights,hyperlink_array,,,,,,,,http://purl.org/dc/terms/accessRights,Information about who access the resource or an indication of its security status.,"FAIRDataPoint,DataCatalogueFlat" -Endpoint,,contact,string,,,,,,,,http://www.w3.org/ns/dcat#contactPoint,Relevant contact information for the catalogued resource. Use of vCard is recommended.,"Beacon v2,FAIRDataPoint,DataCatalogueFlat" +Endpoint,,contact,ref,,,,Agent,,,,http://www.w3.org/ns/dcat#contactPoint,"Relevant contact information for the cataloged resource. Use of vCard is recommended [VCARD-RDF].","Beacon v2,FAIRDataPoint,DataCatalogueFlat" Endpoint,,keyword,string_array,,,,,,,,http://www.w3.org/ns/dcat#keyword,A keyword or tag describing a resource.,"FAIRDataPoint,DataCatalogueFlat" Endpoint,,theme,hyperlink_array,,,,,,,,http://www.w3.org/ns/dcat#theme,A main category of the resource. A resource can have multiple themes.,"FAIRDataPoint,DataCatalogueFlat" Endpoint,,url,hyperlink,,,,,,,,http://www.w3.org/ns/dcat#endpointURL,"The root location or primary endpoint of the service (a web-resolvable IRI). For Beacon v2 only, in other cases we want to autogenerate this information.","Beacon v2" @@ -21,7 +21,7 @@ Endpoint,,metadataCatalog,ref_array,,,,Catalog,,,,https://w3id.org/fdp/fdp-o#met Endpoint,,organisation,ontology,,,,Organisations,,,,http://purl.obolibrary.org/obo/NCIT_C25412,Name of the organisation. E.g. University Medical Center Groningen,Beacon v2 Endpoint,,alternativeUrl,,,,,,,,,"http://purl.org/dc/terms/alternative, http://schema.org/url",Alternative endpoint URL.,Beacon v2 Endpoint,,conformsToFdpSpec,hyperlink,,TRUE,,,,,,https://w3id.org/fdp/fdp-o#conformsToFdpSpec,The relation should point to an URI that contains the version of the FDP specifications for which this instance of the FDP conforms to,"DataCatalogueFlat" -Endpoint,,EJP_RD_personalData,bool,,,,,,,,https://w3id.org/ejp-rd/vocabulary#personalData,"Set to true if the resource onboarded to the EJP-RD Virtual Platform contains personal data, personal data meaning data related to identified or identifiable persons (as per GDPR definition), otherwise false.","FAIRDataPoint,DataCatalogueFlat" +Endpoint,,EJP_RD_personalData,string,,,,,,,,https://w3id.org/ejp-rd/vocabulary#personalData,"Set to true if the resource onboarded to the EJP-RD Virtual Platform contains personal data, personal data meaning data related to identified or identifiable persons (as per GDPR definition), otherwise false. Must be String as workaround for current FDP reference implementation limitations.","FAIRDataPoint,DataCatalogueFlat" Endpoint,,EJP_RD_vpConnection,hyperlink,,,,,,,,https://w3id.org/ejp-rd/vocabulary#vpConnection,"This property must be attached to every entity that you wish the EJP-RD Virtual Platform to explore.","FAIRDataPoint,DataCatalogueFlat" Endpoint,,issued,datetime,,,,,,,,"http://purl.org/dc/terms/issued,https://w3id.org/fdp/fdp-o#metadataIssued",,DataCatalogueFlat, Endpoint,,modified,datetime,,,,,,,,"http://purl.org/dc/terms/modified,https://w3id.org/fdp/fdp-o#metadataModified",,DataCatalogueFlat,