diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index 6c52344f68d17ba9fa48c1ac1180494a18f60bc2..3c4fc5f1c11a0ba64ae7d67732a11555be665feb 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -223,6 +223,18 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm toolkit.get_converter('convert_from_extras'), toolkit.get_validator('ignore_missing') ], + 'reference': [ + toolkit.get_converter('convert_from_extras'), + toolkit.get_validator('ignore_missing') + ], + 'hvdCategory': [ + toolkit.get_converter('convert_from_extras'), + toolkit.get_validator('ignore_missing') + ], + 'applicableLegislation': [ + toolkit.get_converter('convert_from_extras'), + toolkit.get_validator('ignore_missing') + ], }) return schema diff --git a/ckanext/odsh/profiles/odsh_dcat_de_profile.py b/ckanext/odsh/profiles/odsh_dcat_de_profile.py index 1910368cbe00d9b1620a2e58d5a2d0348500bde4..14ef3ef5ace7c9371020cbdeb9ef83abad289ca7 100644 --- a/ckanext/odsh/profiles/odsh_dcat_de_profile.py +++ b/ckanext/odsh/profiles/odsh_dcat_de_profile.py @@ -11,10 +11,11 @@ from ckanext.dcatde.profiles import DCATdeProfile, DCATDE, DCAT, DCATDE_1_0, DCA import ckanext.odsh.helpers as helpers_odsh import ckanext.odsh.collection.helpers as helpers_collection - +import ast DCT = rdflib.namespace.Namespace("http://purl.org/dc/terms/") DCAT = rdflib.namespace.Namespace("http://www.w3.org/ns/dcat#") +DCATAP = rdflib.namespace.Namespace("http://data.europa.eu/r5r/") DCATDE_1_0_2 = rdflib.namespace.Namespace("http://dcat-ap.de/def/dcatde/1.0.2/") ADMS = rdflib.namespace.Namespace("http://www.w3.org/ns/adms#") @@ -94,8 +95,8 @@ class ODSHDCATdeProfile(DCATdeProfile): self._add_type(dataset_dict, dataset_ref) self._add_modified_and_issued(dataset_dict, dataset_ref) self._add_extra_field(dataset_dict, dataset_ref, 'reference', DCT.references) - self._add_extra_field(dataset_dict, dataset_ref, 'applicableLegislation', DCAT.applicableLegislation) - self._add_extra_field(dataset_dict, dataset_ref, 'hvdCategory', DCAT.hvdCategory) + self._add_extra_field(dataset_dict, dataset_ref, 'applicableLegislation', DCATAP.applicableLegislation) + self._add_extra_field(dataset_dict, dataset_ref, 'hvdCategory', DCATAP.hvdCategory) self._add_version(dataset_dict, dataset_ref) if self._is_dataset_collection(dataset_dict): self._remove_predefined_collection_members() @@ -126,10 +127,26 @@ class ODSHDCATdeProfile(DCATdeProfile): ) def _add_extra_field(self, dataset_dict, dataset_ref, field_name, dcat_property): - uri = helpers_odsh.odsh_extract_value_from_extras(dataset_dict.get('extras'), field_name) - if uri: + field_value_str = helpers_odsh.odsh_extract_value_from_extras(dataset_dict.get('extras'), field_name) + + try: + # Attempt to parse the string as a Python literal + field_value = ast.literal_eval(field_value_str) + if not isinstance(field_value, set): + # If it's not a set, treat it as a single value + raise ValueError("Not a set") + except (ValueError, SyntaxError): + # If parsing fails, treat the entire string as a single value + field_value = field_value_str + + if isinstance(field_value, set): + for value in field_value: + self.g.set( + (dataset_ref, dcat_property, rdflib.URIRef(value)) + ) + else: self.g.set( - (dataset_ref, dcat_property, rdflib.URIRef(uri)) + (dataset_ref, dcat_property, rdflib.URIRef(field_value)) ) diff --git a/ckanext/odsh/resources/applicable_legislations.json b/ckanext/odsh/resources/applicable_legislations.json index 1a3d34ae56f66ac3c015caf06eb611b8196c6597..fbac6533079666bde808862c7315c05194a87f4c 100644 --- a/ckanext/odsh/resources/applicable_legislations.json +++ b/ckanext/odsh/resources/applicable_legislations.json @@ -1,6 +1,4 @@ { - "https://example.com/example1/":"Example 1", - "https://example.com/example2/":"Example 2", - "https://example.com/example3/":"Example 3", - "https://example.com/example4/":"Example 4" + "http://data.europa.eu/eli/reg_impl/2023/138/oj": "Durchführungsverordnung (EU) 2023/138 der Kommission vom 21. Dezember 2022 zur Festlegung bestimmter hochwertiger Datensätze und der Modalitäten ihrer Veröffentlichung und Weiterverwendung", + "http: //data.europa.eu/eli/dir/2007/2/2019-06-26": "Richtlinie 2007/2/EG des Europäischen Parlaments und des Rates vom 14. März 2007 zur Schaffung einer Geodateninfrastruktur in der Europäischen Gemeinschaft (INSPIRE)" } \ No newline at end of file diff --git a/ckanext/odsh/resources/hvd_categories.json b/ckanext/odsh/resources/hvd_categories.json index 17200ab4de1021e90c668f971240b5a3fc27a2f9..2320885eb4c513b9ecf39cf8ddd095e89cd74531 100644 --- a/ckanext/odsh/resources/hvd_categories.json +++ b/ckanext/odsh/resources/hvd_categories.json @@ -1,6 +1,8 @@ { - "https://example.com/category1/":"Category 1", - "https://example.com/category2/":"Category 2", - "https://example.com/category3/":"Category 3", - "https://example.com/category4/":"Category 4" + "https://example.com/category1/": "Georaum", + "https://example.com/category2/": "Erdbeobachtung und Umwelt", + "https://example.com/category3/": "Meteorologie", + "https://example.com/category4/": "Statistik", + "https://example.com/category5/": "Unternehmen und Eigentümerschaft von Unternehmen", + "https://example.com/category6/": "Mobilität" } \ No newline at end of file diff --git a/ckanext/odsh/templates/macros/form.html b/ckanext/odsh/templates/macros/form.html index 5bbcec81bca5733912a6e94858773c7adc4c3f5e..c69c12d998b587865cd4fdc0bbf8a111b40b7606 100644 --- a/ckanext/odsh/templates/macros/form.html +++ b/ckanext/odsh/templates/macros/form.html @@ -165,7 +165,7 @@ is_required=false) %} {# Creates a select with an input field for autocomplete #} {% macro select_autocomplete(name, id='', label='', options='', selected='', error='', classes=[], attrs={}, - is_required=false, is_multiple=false, is_extra=false, index=0) %} + is_required=false, is_multiple=false) %} {% set classes = classes|default([]) + ['control-select'] %} {%- set extra_html = caller() if caller -%} @@ -173,10 +173,7 @@ is_required=false) %} <div class="row-fluid"> <div class="span6"> - {% if is_extra %} - <input id="field-{{ name }}-key" type="hidden" name="extras__{{ index }}__key" value="{{ id or name }}" /> - {% endif %} - <select id="{{ 'field-' ~ (id or name) ~ '-value' if is_extra else (id or name) }}" name="{{ 'extras__' ~ index ~ '__value' if is_extra else (name) }}" + <select id="{{ (id or name) }}" name="{{ name }}" {{ attributes(attrs) }} data-module="autocomplete"{% if is_multiple %} multiple{% endif %}> {% for option in options %} {% if option.key %} diff --git a/ckanext/odsh/templates/package/snippets/package_basic_fields.html b/ckanext/odsh/templates/package/snippets/package_basic_fields.html index 2e62b49c44fef2a9d22f43b049dfef318e79f155..176d934cf95db831cf5087d0f42fdc7ba12cc030 100644 --- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html +++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html @@ -340,19 +340,19 @@ dataset_is_draft)) %} {# field reference #} {% set field = 'reference' %} {% set error_reference = h.odsh_extract_error(field, errors) %} -{% set value = h.odsh_extract_value_from_extras(data.extras,field) or '' %} +{% set value = data.get(field) or '' %} {{ form.select_autocomplete(field, label=_('Sample Dataset'), selected=value, options=h.odsh_load_mdk_sample_dataset(), error=error_reference, is_required=False, classes=['control-full', 'field-reference'])}} {# field applicableLegislation #} {% set field = 'applicableLegislation' %} {% set error_reference = h.odsh_extract_error(field, errors) %} -{% set value = h.odsh_extract_value_from_extras(data.extras,field) or '' %} +{% set value = data.get(field) or '' %} {{ form.select_autocomplete(field, label=_('Applicable Legislation'), selected=value, options=h.odsh_load_applicable_legislations(), error=error_reference, is_required=False, classes=['control-full', 'field-applicableLegislation'], is_multiple=True, is_extra=True, index=5)}} {# field hvdCategory #} {% set field = 'hvdCategory' %} {% set error_reference = h.odsh_extract_error(field, errors) %} -{% set value = h.odsh_extract_value_from_extras(data.extras,field) or '' %} +{% set value = data.get(field) or '' %} {{ form.select_autocomplete(field, label=_('HVD Category'), selected=value, options=h.odsh_load_hvd_categories(), error=error_reference, is_required=False, classes=['control-full', 'field-hvdCategory'], is_multiple=True, is_extra=True, index=6)}} {% block scripts %}