diff --git a/ckanext/dcatapchharvest/profiles.py b/ckanext/dcatapchharvest/profiles.py index edc1064..ef1db55 100644 --- a/ckanext/dcatapchharvest/profiles.py +++ b/ckanext/dcatapchharvest/profiles.py @@ -487,6 +487,11 @@ def parse_dataset(self, dataset_dict, dataset_ref): # noqa dataset_uri = dh.dataset_uri(dataset_dict, dataset_ref) dataset_dict['extras'].append({'key': 'uri', 'value': dataset_uri}) + # Documentation + dataset_dict['documentation'] = self._object_value_list( + dataset_ref, FOAF.page + ) + # Resources for distribution in self._distributions(dataset_ref): resource_dict = { @@ -645,7 +650,6 @@ def graph_from_dataset(self, dataset_dict, dataset_ref): # noqa ('theme', DCAT.theme, None, URIRef), ('conforms_to', DCT.conformsTo, None, Literal), ('alternate_identifier', ADMS.identifier, None, Literal), - ('documentation', FOAF.page, None, Literal), ('has_version', DCT.hasVersion, None, Literal), ('is_version_of', DCT.isVersionOf, None, Literal), ('source', DCT.source, None, Literal), @@ -725,6 +729,13 @@ def graph_from_dataset(self, dataset_dict, dataset_ref): # noqa ) g.add((dataset_ref, DCT.temporal, temporal_extent)) + # Documentation + documentation = dataset_dict.get('documentation', []) + for link in documentation: + doc = URIRef(link) + g.add((doc, RDF.type, FOAF.Document)) + g.add((dataset_ref, FOAF.page, doc)) + # Themes groups = self._get_dataset_value(dataset_dict, 'groups', []) for group_name in groups: @@ -1066,7 +1077,6 @@ def graph_from_dataset(self, dataset_dict, dataset_ref): # Lists items = [ - ("documentation", FOAF.page, None, Literal), ("language", DCT.language, None, Literal), ("conforms_to", DCT.conformsTo, None, Literal), ] diff --git a/ckanext/dcatapchharvest/tests/fixtures/1901.xml b/ckanext/dcatapchharvest/tests/fixtures/1901.xml index d554c28..bc573b8 100644 --- a/ckanext/dcatapchharvest/tests/fixtures/1901.xml +++ b/ckanext/dcatapchharvest/tests/fixtures/1901.xml @@ -55,5 +55,11 @@ basi-statistiche-e-presentazioni-generali Annuaire statistique de la Suisse 1901 statistische-grundlagen-und-ubersichten + + + + + + diff --git a/ckanext/dcatapchharvest/tests/fixtures/dataset.json b/ckanext/dcatapchharvest/tests/fixtures/dataset.json index 3391fde..665e46a 100644 --- a/ckanext/dcatapchharvest/tests/fixtures/dataset.json +++ b/ckanext/dcatapchharvest/tests/fixtures/dataset.json @@ -93,6 +93,10 @@ "en": "English Description", "it": "" }, + "documentation": [ + "http://dataset.info.org/doc1", + "http://dataset.info.org/doc2" + ], "extras": [ { "key": "alternate_identifier", @@ -126,10 +130,6 @@ "key": "access_rights", "value": "public" }, - { - "key": "documentation", - "value": "[\"http://dataset.info.org/doc1\", \"http://dataset.info.org/doc2\"]" - }, { "key": "provenance", "value": "Some statement about provenance" diff --git a/ckanext/dcatapchharvest/tests/test_dcatap_ch_parse.py b/ckanext/dcatapchharvest/tests/test_dcatap_ch_parse.py index 5b66c2e..0db6ac6 100644 --- a/ckanext/dcatapchharvest/tests/test_dcatap_ch_parse.py +++ b/ckanext/dcatapchharvest/tests/test_dcatap_ch_parse.py @@ -86,6 +86,10 @@ def test_dataset_all_fields(self): # Lists eq_(sorted(dataset['language']), [u'de', u'fr']) eq_(sorted(dataset['groups']), [{'name': u'statistical-basis'}]) + eq_( + sorted(dataset['documentation']), + ['https://example.com/documentation-dataset-1', 'https://example.com/documentation-dataset-2'] + ) # Dataset URI eq_(extras['uri'], u'https://opendata.swiss/dataset/7451e012-64b2-4bbc-af20-a0e2bc61b585') diff --git a/ckanext/dcatapchharvest/tests/test_dcatap_ch_serialize.py b/ckanext/dcatapchharvest/tests/test_dcatap_ch_serialize.py index ea7b0fe..30ee88a 100644 --- a/ckanext/dcatapchharvest/tests/test_dcatap_ch_serialize.py +++ b/ckanext/dcatapchharvest/tests/test_dcatap_ch_serialize.py @@ -56,10 +56,14 @@ def test_graph_from_dataset(self): for keyword in keywords: assert self._triple(g, dataset_ref, DCAT.keyword, Literal(keyword, lang=key)) + # Documentation + eq_(len([t for t in g.triples((dataset_ref, FOAF.page, None))]), 2) + for documentation_link in dataset['documentation']: + assert self._triple(g, dataset_ref, FOAF.page, URIRef(documentation_link)) + # List for item in [ ('language', DCT.language, Literal), - # ('documentation', FOAF.page, URIRef, FOAF.Document), ]: values = json.loads(extras[item[0]]) eq_(len([t for t in g.triples((dataset_ref, item[1], None))]), len(values))