From ef26fb94829ccf794c9835ae408a9d51ea9c6731 Mon Sep 17 00:00:00 2001 From: amercader Date: Thu, 17 Oct 2024 14:00:59 +0200 Subject: [PATCH] Fix parsing of statements after #313 --- ckanext/dcat/profiles/base.py | 2 + .../dcat_ap_2/test_scheming_support.py | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/ckanext/dcat/profiles/base.py b/ckanext/dcat/profiles/base.py index ad51b97c..ce942720 100644 --- a/ckanext/dcat/profiles/base.py +++ b/ckanext/dcat/profiles/base.py @@ -218,6 +218,8 @@ def _object_value(self, subject, predicate): # Use first object as fallback if no object with the default language is available elif fallback == "": fallback = str(o) + elif len(list(self.g.objects(o, RDFS.label))): + return str(next(self.g.objects(o, RDFS.label))) else: return str(o) return fallback diff --git a/ckanext/dcat/tests/profiles/dcat_ap_2/test_scheming_support.py b/ckanext/dcat/tests/profiles/dcat_ap_2/test_scheming_support.py index 507c762c..3b1d99f5 100644 --- a/ckanext/dcat/tests/profiles/dcat_ap_2/test_scheming_support.py +++ b/ckanext/dcat/tests/profiles/dcat_ap_2/test_scheming_support.py @@ -790,6 +790,54 @@ def test_e2e_dcat_to_ckan(self): "http://publications.europa.eu/webapi/rdf/sparql" ] + def test_statement_label(self): + data = """ + @prefix dcat: . + @prefix dct: . + @prefix rdfs: . + + + a dcat:Dataset ; + dct:title "Dataset 1" ; + dct:description "This is a dataset" ; + dct:accessRights [ + a dct:RightsStatement; + rdfs:label "Some statement" + ] + . + """ + p = RDFParser() + + p.parse(data, _format="ttl") + datasets = [d for d in p.datasets()] + + dataset = datasets[0] + + assert dataset["notes"] == "This is a dataset" + assert dataset["access_rights"] == "Some statement" + + def test_statement_literal(self): + data = """ + @prefix dcat: . + @prefix dct: . + @prefix rdfs: . + + + a dcat:Dataset ; + dct:title "Dataset 1" ; + dct:description "This is a dataset" ; + dct:accessRights "Some statement" + . + """ + p = RDFParser() + + p.parse(data, _format="ttl") + datasets = [d for d in p.datasets()] + + dataset = datasets[0] + + assert dataset["notes"] == "This is a dataset" + assert dataset["access_rights"] == "Some statement" @pytest.mark.usefixtures("with_plugins", "clean_db", "clean_index") @pytest.mark.ckan_config("ckan.plugins", "dcat scheming_datasets")