geosolutions-it/geonode-rndt

Constraints: model

Opened this issue · 0 comments

etj commented

RNDT requires constraints for both access and use, while GeoNode only defines on set of costraints.

According to ISO19115, constraints are defined through a value in a codelist. If such value in the codelist is set to "otherRestrictions", the text element "otherConstraints" should be populated.

GeoNode model defines

  • restriction_code_type = models.ForeignKey(RestrictionCodeType, ....
  • constraints_other = models.TextField(...

and in the template these values are set as useConstraints.

RNDT requires that the RestrictionCode for both access and use are set to "otherRestrictions".

Limitations on public access

The otherConstraints element for access should be expressed as a URI + text from a controlled set.

The related vocabulary is defined at https://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess, while a valid RDF thesaurus can be downloaded from here: https://github.com/geosolutions-it/iso19139.rndt/releases/download/v1.0-RC1/httpinspireeceuropaeumetadatacodelistLimitationsOnPublicAccess-LimitationsOnPublicAccess.rdf

We may simply store the item URI in the DB, and then retrieve the related label from the thesaurus when needed.

Use constraints

The otherConstraints element for use should be expressed either as

  • a URI + text from a controlled set.
  • or a free text

The vocabulary is defined at https://inspire.ec.europa.eu/metadata-codelist/ConditionsApplyingToAccessAndUse while a RDF thesaurus can be found at https://github.com/geosolutions-it/iso19139.rndt/releases/download/v1.0-RC1/httpinspireeceuropaeumetadatacodelistConditionsApplyingToAccessAndUse-ConditionsApplyingToAccessAndUse.rdf

We can use the existing field constraints_other for storing such a value, and we'll tell which case is used (URI or free text) simply by checking if the contents is a URI.

Changes needed

We only need to add a single field to the Layer.
Since we don't want to add fields to existing table, we'll create a new table LayerRNDT, which is 1:1 with table Layer, and that will store a single field accessConstraints