diff --git a/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/model/OgcApiSpatialExtent.java b/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/model/OgcApiSpatialExtent.java index 3d9bbaa3..b74afc61 100644 --- a/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/model/OgcApiSpatialExtent.java +++ b/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/model/OgcApiSpatialExtent.java @@ -5,6 +5,8 @@ package org.fao.geonet.ogcapi.records.model; +import static org.fao.geonet.ogcapi.records.util.JsonUtils.getAsDouble; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import java.util.ArrayList; @@ -14,6 +16,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; + /** * cf. https://github.com/opengeospatial/ogcapi-features/blob/master/core/openapi/schemas/extent.yaml * @@ -112,8 +115,8 @@ public static OgcApiSpatialExtent fromGnIndexRecord(Map map) { for (var myCoord : coords) { var coord = (List) myCoord; - var x = (Double) coord.get(0); - var y = (Double) coord.get(1); + var x = getAsDouble(coord.get(0)); + var y = getAsDouble(coord.get(1)); if (x < xmin) { xmin = x; } diff --git a/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/util/JsonUtils.java b/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/util/JsonUtils.java index ec6587e9..b3bd7e58 100644 --- a/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/util/JsonUtils.java +++ b/modules/services/ogc-api-records/src/main/java/org/fao/geonet/ogcapi/records/util/JsonUtils.java @@ -1,3 +1,8 @@ +/** + * (c) 2024 Open Source Geospatial Foundation - all rights reserved This code is licensed under the + * GPL 2.0 license, available at the root application directory. + */ + package org.fao.geonet.ogcapi.records.util; import java.util.Map; @@ -39,4 +44,17 @@ public static String getAsString(Object o) { var result = o.toString(); return result; } + + /** + * Simple utility class to get a JSON value as a double. + * + * @param o json object (could be integer or double) + * @return null or double value + */ + public static Double getAsDouble(Object o) { + if (o == null) { + return null; + } + return ((Number) o).doubleValue(); + } } diff --git a/modules/services/ogc-api-records/src/test/java/org/fao/geonet/ogcapi/records/util/ElasticIndexJson2CollectionInfoTest.java b/modules/services/ogc-api-records/src/test/java/org/fao/geonet/ogcapi/records/util/ElasticIndexJson2CollectionInfoTest.java new file mode 100644 index 00000000..2d5a6c54 --- /dev/null +++ b/modules/services/ogc-api-records/src/test/java/org/fao/geonet/ogcapi/records/util/ElasticIndexJson2CollectionInfoTest.java @@ -0,0 +1,134 @@ +/** + * (c) 2024 Open Source Geospatial Foundation - all rights reserved This code is licensed under the + * GPL 2.0 license, available at the root application directory. + */ +package org.fao.geonet.ogcapi.records.util; + +import org.apache.commons.io.IOUtils; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.type.TypeFactory; +import org.fao.geonet.ogcapi.records.controller.model.CollectionInfo; +import org.junit.BeforeClass; +import org.junit.Test; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +public class ElasticIndexJson2CollectionInfoTest { + + + // sample Elastic Index JSON + public static String sample1ElasticIndexJson; + public static Map sample1ElasticIndexParsed; + + + + ElasticIndexJson2CollectionInfo elasticIndexJson2CollectionInfo = new ElasticIndexJson2CollectionInfo(); + + + @BeforeClass + public static void setupClass() throws IOException { + + + + + sample1ElasticIndexJson = IOUtils.toString( + ClassLoader.getSystemClassLoader().getResourceAsStream("org/fao/geonet/ogcapi/records/util/sampleCollectionServiceRecordElasticIndex.json"), + "UTF-8"); + + sample1ElasticIndexParsed = new ObjectMapper().readValue( sample1ElasticIndexJson, + TypeFactory.mapType(HashMap.class, String.class, Object.class)); + sample1ElasticIndexParsed = (Map ) sample1ElasticIndexParsed.get("hits"); + sample1ElasticIndexParsed = (Map ) ((List)sample1ElasticIndexParsed.get("hits")).get(0); + sample1ElasticIndexParsed = (Map )sample1ElasticIndexParsed.get("_source"); + + + } + + + /** + * Simple test case to read in the Elastic Index JSON, and parse it into a CollectionInfo. + */ + @Test + public void testFull() { + var collectionInfo = new CollectionInfo(); + elasticIndexJson2CollectionInfo.injectLinkedServiceRecordInfo(collectionInfo, sample1ElasticIndexParsed); + + assertEquals("catalog", collectionInfo.getType()); + assertEquals("record", collectionInfo.getItemType()); + + assertEquals("GeoCat Demo OGCIAPI sub-portal", collectionInfo.getTitle()); + assertEquals("This is a sub-portal for testing OGCAPI.", collectionInfo.getDescription()); + + assertEquals("http://www.opengis.net/def/crs/OGC/1.3/CRS84", collectionInfo.getCrs().get(0)); + assertEquals("2024-09-10T19:10:58.536961Z", collectionInfo.getCreated()); + assertEquals("2024-09-16T17:07:51.673194Z", collectionInfo.getUpdated()); + assertEquals("eng", collectionInfo.getLanguage().code); + assertEquals("use limitation", collectionInfo.getLicense()); + + //languages + assertEquals(3, collectionInfo.getLanguages().size()); + assertEquals("dut", collectionInfo.getLanguages().get(0).code); + assertEquals("spa", collectionInfo.getLanguages().get(1).code); + assertEquals("eng", collectionInfo.getLanguages().get(2).code); + + //keywords + assertEquals(6, collectionInfo.getKeywords().size()); + assertEquals("GEONETWORK", collectionInfo.getKeywords().get(0)); + assertEquals("OSGeo", collectionInfo.getKeywords().get(1)); + assertEquals("GeoCat", collectionInfo.getKeywords().get(2)); + assertEquals("OGCAPI", collectionInfo.getKeywords().get(3)); + assertEquals("Algeria", collectionInfo.getKeywords().get(4)); + assertEquals("Antarctica", collectionInfo.getKeywords().get(5)); + + + //themes + assertEquals(2, collectionInfo.getThemes().size()); + //first theme + assertEquals("otherKeywords-theme", collectionInfo.getThemes().get(0).schema); + assertEquals(4, collectionInfo.getThemes().get(0).getConcepts().size()); + assertEquals("GEONETWORK", collectionInfo.getThemes().get(0).getConcepts().get(0).id); + assertEquals("OSGeo", collectionInfo.getThemes().get(0).getConcepts().get(1).id); + assertEquals("GeoCat", collectionInfo.getThemes().get(0).getConcepts().get(2).id); + assertEquals("OGCAPI", collectionInfo.getThemes().get(0).getConcepts().get(3).id); + + //2nd theme + assertEquals("http://localhost:8080/geonetwork/srv/api/registries/vocabularies/external.place.regions", collectionInfo.getThemes().get(1).schema); + assertEquals(2, collectionInfo.getThemes().get(1).getConcepts().size()); + assertEquals("Algeria", collectionInfo.getThemes().get(1).getConcepts().get(0).id); + assertEquals("Antarctica", collectionInfo.getThemes().get(1).getConcepts().get(1).id); + + //contacts + assertEquals(1, collectionInfo.getContacts().size()); + assertEquals("Jody Garnett", collectionInfo.getContacts().get(0).getName()); + assertEquals("Hat Wearer Extraordinaire", collectionInfo.getContacts().get(0).getPosition()); + assertEquals("GeoCat Canada Ltd", collectionInfo.getContacts().get(0).getOrganization()); + //phones + assertEquals(1, collectionInfo.getContacts().get(0).getPhones().size()); + assertEquals("+1 (250) 213-1219", collectionInfo.getContacts().get(0).getPhones().get(0).getValue()); + //email + assertEquals(1, collectionInfo.getContacts().get(0).getEmails().size()); + assertEquals("jody.garnett@geocat.net", collectionInfo.getContacts().get(0).getEmails().get(0).getValue()); + //address + assertEquals(1, collectionInfo.getContacts().get(0).getAddresses().size()); + assertEquals(1, collectionInfo.getContacts().get(0).getAddresses().get(0).getDeliveryPoint().size()); + assertEquals("3613 Doncaster Drr, Victoria, BC, V8P 3W5, Canada", collectionInfo.getContacts().get(0).getAddresses().get(0).getDeliveryPoint().get(0)); + + //extent - spatial + assertEquals("http://www.opengis.net/def/crs/OGC/1.3/CRS84", collectionInfo.getExtent().getSpatial().getCrs()); + assertEquals(4, collectionInfo.getExtent().getSpatial().getBbox().size()); + assertEquals(-180.0, collectionInfo.getExtent().getSpatial().getBbox().get(0).doubleValue() ,0); + assertEquals(-90.0, collectionInfo.getExtent().getSpatial().getBbox().get(1).doubleValue() ,0); + assertEquals(180.0, collectionInfo.getExtent().getSpatial().getBbox().get(2).doubleValue() ,0); + assertEquals(90.0, collectionInfo.getExtent().getSpatial().getBbox().get(3).doubleValue() ,0); + //extent - temporal + assertEquals("http://www.opengis.net/def/uom/ISO-8601/0/Gregorian", collectionInfo.getExtent().getTemporal().getTrs()); + assertEquals(2, collectionInfo.getExtent().getTemporal().getInterval().size()); + assertEquals("2016-02-29T20:00:00.000Z", collectionInfo.getExtent().getTemporal().getInterval().get(0)); + assertEquals("2016-02-29T20:00:00.000Z", collectionInfo.getExtent().getTemporal().getInterval().get(1)); + + } +} diff --git a/modules/services/ogc-api-records/src/test/resources/org/fao/geonet/ogcapi/records/util/sampleCollectionServiceRecord.xml b/modules/services/ogc-api-records/src/test/resources/org/fao/geonet/ogcapi/records/util/sampleCollectionServiceRecord.xml new file mode 100644 index 00000000..c4ac0b5d --- /dev/null +++ b/modules/services/ogc-api-records/src/test/resources/org/fao/geonet/ogcapi/records/util/sampleCollectionServiceRecord.xml @@ -0,0 +1,787 @@ + + + + 9bac358b-11ec-4293-aeef-5a077b778412 + + + + + + + + + + + + + + Jody Garnett + + + Jody Garnett + + + + + GeoCat Canada Ltd + + + GeoCat Canada Ltd + + + + + Hat Wearer Extraordinaire + + + Hat Wearer Extraordinaire + + + + + + + + + +1 (250) 213-1219 + + + + + + + + + + 3613 Doncaster Drr + + + 3613 Doncaster Drr + + + + + Victoria + + + BC + + + V8P 3W5 + + + Canada + + + Canada + + + + + jody.garnett@geocat.net + + + jody.garnett@geocat.net + + + + + + + + + http://geocat.net + + + + + + + + Please call between 9:00am and 5:00pm + + + Please call between 9:00am and 5:00pm + + + + + + + + + + + + 2024-09-16T17:07:51.673224Z + + + ISO 19115:2003/19139 + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://www.opengis.net/def/crs/OGC/1.3/CRS84 + + + http://www.opengis.net/def/crs/OGC/1.3/CRS84 + + + + + + + + + + + + + + + + GeoCat Demo OGCIAPI sub-portal + + + GeoCat Demo OGCIAPI sub-portal + + + + + + + + 2016-02-29T12:00:00 + + + + + + + + + + This is a sub-portal for testing OGCAPI. + + + This is a sub-portal for testing OGCAPI. + + + + + + + + + + Jody Garnett + + + Jody Garnett + + + + + GeoCat Canada Ltd + + + GeoCat Canada Ltd + + + + + position + + + position + + + + + + + + + +1 (250) 213-1219 + + + + + + + + + + 3613 Doncaster Dr + + + 3613 Doncaster Dr + + + + + Victoria + + + BC + + + V8P 3W5 + + + Canada + + + Canada + + + + + jody.garnett@geocat.net + + + jody.garnett@geocat.net + + + + + + + + + http://geocat.net + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://localhost:8080/geonetwork/srv/api/records/9bac358b-11ec-4293-aeef-5a077b778412/attachments/jody.jpg + + + + + + + GEONETWORK + + + GEONETWORK + + + + + OSGeo + + + OSGeo + + + + + GeoCat + + + GeoCat + + + + + OGCAPI + + + OGCAPI + + + + + + + + + + + + + + + + + + + + INSPIRE Service taxonomy + + + INSPIRE Service taxonomy + + + + + + + 2010-04-22 + + + + + + + + + + geonetwork.thesaurus.external.theme.inspire-service-taxonomy + + + + + + + + + + + Algeria + + + Algeria + + + + + + + + + + + Antarctica + + + Antarctica + + + + + + + + + + + + + + + + Continents, countries, sea regions of the world. + + + Continents, countries, sea regions of the world. + + + + + + + 2015-07-17 + + + + + + + + + + geonetwork.thesaurus.external.place.regions + + + + + + + + + + + use limitation + + + use limitation + + + + + + + + + + + No Conditions Apply + + + No Conditions Apply + + + + + blah + + + blah + + + + + + + other + + + 1.1.1 + + + + + NONE + + + + + + + + + -180.00 + + + 180.00 + + + -90.00 + + + 90.00 + + + + + + + + + + + + GetCapabilities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + invocable + + + invocable + + + + + + + 2014-12-11 + + + + + + + + + + Conformant to the INSPIRE SDS specifications. + + + Conformant to the INSPIRE SDS specifications. + + + + + true + + + + + + + + + availability + + + availability + + + + + + + INSPIRE_service_availability + + + INSPIRE_service_availability + + + + + + + + + + 90 + + + + + + + + + performance + + + performance + + + + + + + INSPIRE_service_performance + + + INSPIRE_service_performance + + + + + + + + + + 0.5 + + + + + + + + + capacity + + + capacity + + + + + + + INSPIRE_service_capacity + + + INSPIRE_service_capacity + + + + + + + + + + 50 + + + + + + + + + + + + + Description of technical specification + + + Description of technical specification + + + + + + + 2014-12-11 + + + + + + + + + + Conformant to the cited specifications. + + + Conformant to the cited specifications. + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/services/ogc-api-records/src/test/resources/org/fao/geonet/ogcapi/records/util/sampleCollectionServiceRecordElasticIndex.json b/modules/services/ogc-api-records/src/test/resources/org/fao/geonet/ogcapi/records/util/sampleCollectionServiceRecordElasticIndex.json new file mode 100644 index 00000000..02a60fed --- /dev/null +++ b/modules/services/ogc-api-records/src/test/resources/org/fao/geonet/ogcapi/records/util/sampleCollectionServiceRecordElasticIndex.json @@ -0,0 +1,538 @@ +{ + "took": 67, + "timed_out": false, + "_shards": { + "total": 1, + "successful": 1, + "skipped": 0, + "failed": 0 + }, + "hits": { + "total": { + "value": 1, + "relation": "eq" + }, + "max_score": 1.8064759, + "hits": [ + { + "_index": "gn-records", + "_id": "9bac358b-11ec-4293-aeef-5a077b778412", + "_score": 1.8064759, + "_ignored": [ + "overview.data.keyword" + ], + "_source": { + "docType": "metadata", + "document": "", + "metadataIdentifier": "9bac358b-11ec-4293-aeef-5a077b778412", + "standardNameObject": { + "default": "ISO 19115:2003/19139", + "langeng": "ISO 19115:2003/19139" + }, + "standardVersionObject": { + "default": "1.0", + "langeng": "1.0" + }, + "indexingDate": 1726506476530, + "dateStamp": "2024-09-16T17:07:51.673224Z", + "mainLanguage": "eng", + "otherLanguage": [ + "dut", + "spa", + "eng" + ], + "otherLanguageId": [ + "NL", + "ES", + "EN" + ], + "cl_characterSet": [ + { + "key": "utf8", + "default": "UTF8", + "langeng": "UTF8", + "langdut": "utf8", + "langspa": "UTF8", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_CharacterSetCode" + } + ], + "resourceType": [ + "service" + ], + "OrgObject": { + "default": "GeoCat Canada Ltd", + "langeng": "GeoCat Canada Ltd" + }, + "pointOfContactOrgObject": { + "default": "GeoCat Canada Ltd", + "langeng": "GeoCat Canada Ltd" + }, + "contact": [ + { + "organisationObject": { + "default": "GeoCat Canada Ltd", + "langeng": "GeoCat Canada Ltd" + }, + "role": "pointOfContact", + "email": "jody.garnett@geocat.net", + "website": "http://geocat.net", + "logo": "", + "individual": "Jody Garnett", + "position": "Hat Wearer Extraordinaire", + "phone": "+1 (250) 213-1219", + "address": "3613 Doncaster Drr, Victoria, BC, V8P 3W5, Canada" + } + ], + "cl_hierarchyLevel": [ + { + "key": "service", + "default": "Service", + "langeng": "Service", + "langdut": "service", + "langspa": "Servicio", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ScopeCode" + } + ], + "cl_status": [ + { + "key": "completed", + "default": "Completed", + "langeng": "Completed", + "langdut": "compleet", + "langspa": "Terminado", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ProgressCode" + } + ], + "cl_type": [ + { + "key": "theme", + "default": "Theme", + "langeng": "Theme", + "langdut": "theme", + "langspa": "Tema", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode" + }, + { + "key": "place", + "default": "Place", + "langeng": "Place", + "langdut": "place", + "langspa": "Lugar", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode" + } + ], + "cl_accessConstraints": [ + { + "key": "otherRestrictions", + "default": "Other restrictions", + "langeng": "Other restrictions", + "langdut": "anders", + "langspa": "Otras restricciones", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode" + } + ], + "cl_useConstraints": [ + { + "key": "restricted", + "default": "Restricted", + "langeng": "Restricted", + "langdut": "niet\n toegankelijk\n ", + "langspa": "Restricted", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode" + } + ], + "cl_couplingType": [ + { + "key": "tight", + "default": "Tight", + "langeng": "Tight", + "langdut": "tight", + "langspa": "Apretado", + "link": "http://www.isotc211.org/2005/iso19119/resources/Codelist/gmxCodelists.xml#SV_CouplingType" + } + ], + "cl_DCP": [ + { + "key": "XML", + "default": "XML", + "langeng": "XML", + "langdut": "XML", + "langspa": "XML", + "link": "http://inspire.ec.europa.eu/metadata-codelist/DCPList" + } + ], + "resourceTitleObject": { + "default": "GeoCat Demo OGCIAPI sub-portal", + "langeng": "GeoCat Demo OGCIAPI sub-portal" + }, + "resourceAltTitleObject": [ + { + "default": "", + "lang": "" + } + ], + "revisionDateForResource": [ + "2016-02-29T20:00:00.000Z" + ], + "revisionYearForResource": "2016", + "revisionMonthForResource": "2016-02", + "resourceDate": [ + { + "type": "revision", + "date": "2016-02-29T20:00:00.000Z" + } + ], + "resourceTemporalDateRange": [ + { + "gte": "2016-02-29T20:00:00.000Z", + "lte": "2016-02-29T20:00:00.000Z" + } + ], + "resourceAbstractObject": { + "default": "This is a sub-portal for testing OGCAPI.", + "langeng": "This is a sub-portal for testing OGCAPI." + }, + "OrgForResourceObject": { + "default": "GeoCat Canada Ltd", + "langeng": "GeoCat Canada Ltd" + }, + "pointOfContactOrgForResourceObject": { + "default": "GeoCat Canada Ltd", + "langeng": "GeoCat Canada Ltd" + }, + "contactForResource": [ + { + "organisationObject": { + "default": "GeoCat Canada Ltd", + "langeng": "GeoCat Canada Ltd" + }, + "role": "pointOfContact", + "email": "jody.garnett@geocat.net", + "website": "http://geocat.net", + "logo": "", + "individual": "Jody Garnett", + "position": "position", + "phone": "+1 (250) 213-1219", + "address": "3613 Doncaster Dr, Victoria, BC, V8P 3W5, Canada" + }, + { + "organisationObject": {}, + "role": "", + "email": "", + "website": "", + "logo": "", + "individual": "", + "position": "", + "phone": "", + "address": "" + } + ], + "hasOverview": "true", + "tag": [ + { + "default": "GEONETWORK", + "langeng": "GEONETWORK" + }, + { + "default": "OSGeo", + "langeng": "OSGeo" + }, + { + "default": "GeoCat", + "langeng": "GeoCat" + }, + { + "default": "OGCAPI", + "langeng": "OGCAPI" + }, + { + "default": "Algeria", + "langeng": "Algeria", + "link": "http://www.naturalearthdata.com/ne_admin#Country/DZA", + "key": "http://www.naturalearthdata.com/ne_admin#Country/DZA" + }, + { + "default": "Antarctica", + "langeng": "Antarctica", + "link": "http://www.naturalearthdata.com/ne_admin#Country/Indeterminate/ATA", + "key": "http://www.naturalearthdata.com/ne_admin#Country/Indeterminate/ATA" + } + ], + "tagNumber": "6", + "isOpenData": "false", + "keywordType-theme": [ + { + "default": "GEONETWORK", + "langeng": "GEONETWORK" + }, + { + "default": "OSGeo", + "langeng": "OSGeo" + }, + { + "default": "GeoCat", + "langeng": "GeoCat" + }, + { + "default": "OGCAPI", + "langeng": "OGCAPI" + } + ], + "keywordType-place": [ + { + "default": "Algeria", + "langeng": "Algeria", + "link": "http://www.naturalearthdata.com/ne_admin#Country/DZA" + }, + { + "default": "Antarctica", + "langeng": "Antarctica", + "link": "http://www.naturalearthdata.com/ne_admin#Country/Indeterminate/ATA" + } + ], + "th_otherKeywords-themeNumber": "4", + "th_otherKeywords-theme": [ + { + "default": "GEONETWORK", + "langeng": "GEONETWORK" + }, + { + "default": "OSGeo", + "langeng": "OSGeo" + }, + { + "default": "GeoCat", + "langeng": "GeoCat" + }, + { + "default": "OGCAPI", + "langeng": "OGCAPI" + } + ], + "th_regionsNumber": "2", + "th_regions": [ + { + "default": "Algeria", + "langeng": "Algeria", + "link": "http://www.naturalearthdata.com/ne_admin#Country/DZA" + }, + { + "default": "Antarctica", + "langeng": "Antarctica", + "link": "http://www.naturalearthdata.com/ne_admin#Country/Indeterminate/ATA" + } + ], + "th_inspire-service-taxonomyNumber": "0", + "th_inspire-service-taxonomy": [], + "allKeywords": { + "th_otherKeywords-theme": { + "title": "otherKeywords-theme", + "theme": "theme", + "keywords": [ + { + "default": "GEONETWORK", + "langeng": "GEONETWORK" + }, + { + "default": "OSGeo", + "langeng": "OSGeo" + }, + { + "default": "GeoCat", + "langeng": "GeoCat" + }, + { + "default": "OGCAPI", + "langeng": "OGCAPI" + } + ] + }, + "th_regions": { + "id": "geonetwork.thesaurus.external.place.regions", + "multilingualTitle": { + "default": "Continents, countries, sea regions of the world.", + "langeng": "Continents, countries, sea regions of the world.", + "link": "http://geonetwork-opensource.org/thesaurus/naturalearth-and-seavox" + }, + "theme": "place", + "link": "http://localhost:8080/geonetwork/srv/api/registries/vocabularies/external.place.regions", + "keywords": [ + { + "default": "Algeria", + "langeng": "Algeria", + "link": "http://www.naturalearthdata.com/ne_admin#Country/DZA" + }, + { + "default": "Antarctica", + "langeng": "Antarctica", + "link": "http://www.naturalearthdata.com/ne_admin#Country/Indeterminate/ATA" + } + ] + }, + "th_inspire-service-taxonomy": { + "id": "geonetwork.thesaurus.external.theme.inspire-service-taxonomy", + "multilingualTitle": { + "default": "INSPIRE Service taxonomy", + "langeng": "INSPIRE Service taxonomy" + }, + "theme": "theme", + "link": "http://localhost:8080/geonetwork/srv/api/registries/vocabularies/external.theme.inspire-service-taxonomy", + "keywords": [] + } + }, + "th_regions_tree": { + "default": [ + "Africa", + "Africa^Algeria", + "Antarctica" + ], + "key": [ + "http://www.naturalearthdata.com/ne_admin#Continent/Africa", + "http://www.naturalearthdata.com/ne_admin#Continent/Africa^http://www.naturalearthdata.com/ne_admin#Country/DZA", + "http://www.naturalearthdata.com/ne_admin#Country/Indeterminate/ATA" + ] + }, + "MD_LegalConstraintsOtherConstraintsObject": [ + { + "default": "No Conditions Apply", + "langeng": "No Conditions Apply", + "link": "http://inspire.ec.europa.eu/registry/metadata-codelist/ConditionsApplyingToAccessAndUse/noConditionsApply" + }, + { + "default": "blah", + "langeng": "blah" + } + ], + "MD_LegalConstraintsUseLimitationObject": [ + { + "default": "use limitation", + "langeng": "use limitation" + } + ], + "licenseObject": [ + { + "default": "No Conditions Apply", + "langeng": "No Conditions Apply", + "link": "http://inspire.ec.europa.eu/registry/metadata-codelist/ConditionsApplyingToAccessAndUse/noConditionsApply" + }, + { + "default": "blah", + "langeng": "blah" + } + ], + "geom": [ + { + "type": "Polygon", + "coordinates": [ + [ + [ + -180, + -90 + ], + [ + 180, + -90 + ], + [ + 180, + 90 + ], + [ + -180, + 90 + ], + [ + -180, + -90 + ] + ] + ] + } + ], + "location": "0,0", + "serviceType": "other", + "serviceTypeVersion": "1.1.1", + "coordinateSystem": [ + "http://www.opengis.net/def/crs/OGC/1.3/CRS84" + ], + "crsDetails": [ + { + "code": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "codeSpace": "", + "name": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", + "url": "" + } + ], + "specificationConformance": [ + { + "title": "invocable", + "date": "2014-12-11", + "link": "http://inspire.ec.europa.eu/metadata-codelist/Category/invocable", + "explanation": "Conformant to the INSPIRE SDS specifications.", + "pass": "true" + }, + { + "title": "Description of technical specification", + "date": "2014-12-11", + "link": "http://link,to/the.technical.specification", + "explanation": "Conformant to the cited specifications.", + "pass": "true" + } + ], + "conformTo_invocable": "true", + "conformTo_Descriptionoftechnicalspecification": "true", + "recordGroup": "9bac358b-11ec-4293-aeef-5a077b778412", + "recordOwner": "admin admin", + "uuid": "9bac358b-11ec-4293-aeef-5a077b778412", + "displayOrder": "0", + "groupPublishedId": [ + "2", + "1", + "0" + ], + "popularity": 27, + "userinfo": "admin|admin|admin|Administrator", + "groupPublished": [ + "sample", + "all", + "intranet" + ], + "isPublishedToAll": "true", + "record": "record", + "draft": "n", + "changeDate": "2024-09-16T17:07:51.673194Z", + "id": "117", + "createDate": "2024-09-10T19:10:58.536961Z", + "isPublishedToIntranet": "true", + "owner": "1", + "groupOwner": "2", + "logo": "/images/logos/9a8e760d-08cc-4406-b120-bb3f7d02c94b.png", + "hasxlinks": "false", + "featureOfRecord": "record", + "isPublishedToGuest": "false", + "extra": "null", + "documentStandard": "iso19139", + "valid": "-1", + "isTemplate": "n", + "feedbackCount": "0", + "rating": "0", + "isHarvested": "false", + "userSavedCount": "0", + "sourceCatalogue": "9a8e760d-08cc-4406-b120-bb3f7d02c94b", + "overview": [ + {} + ] + }, + "edit": false, + "owner": false, + "isPublishedToAll": true, + "view": true, + "notify": false, + "download": true, + "dynamic": true, + "featured": false, + "selected": false + } + ] + } +} \ No newline at end of file