/* * Constellation - An open source and standard compliant SDI * http://www.constellation-sdi.org * * Copyright 2014 Geomatys. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.constellation.metadata; import javax.xml.namespace.QName; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * A container for list of queryable elements in different schemas used in CSW. * * @author Guilhem Legal */ public final class CSWQueryable { public static final String INSPIRE = "http://www.inspire.org"; public static final String INSPIRE_PREFIX = "ins"; public static final QName DEGREE_QNAME = new QName(INSPIRE, "Degree", INSPIRE_PREFIX); public static final QName ACCESS_CONSTRAINTS_QNAME = new QName(INSPIRE, "AccessConstraints", INSPIRE_PREFIX); public static final QName OTHER_CONSTRAINTS_QNAME = new QName(INSPIRE, "OtherConstraints", INSPIRE_PREFIX); public static final QName INS_CLASSIFICATION_QNAME = new QName(INSPIRE, "Classification", INSPIRE_PREFIX); public static final QName CONDITION_APPLYING_TO_ACCESS_AND_USE_QNAME = new QName(INSPIRE, "ConditionApplyingToAccessAndUse", INSPIRE_PREFIX); public static final QName METADATA_POINT_OF_CONTACT_QNAME = new QName(INSPIRE, "MetadataPointOfContact", INSPIRE_PREFIX); public static final QName LINEAGE_QNAME = new QName(INSPIRE, "Lineage", INSPIRE_PREFIX); public static final QName SPECIFICATION_TITLE_QNAME = new QName(INSPIRE, "SpecificationTitle", INSPIRE_PREFIX); public static final QName SPECIFICATION_DATE_QNAME = new QName(INSPIRE, "SpecificationDate", INSPIRE_PREFIX); public static final QName SPECIFICATION_DATETYPE_QNAME = new QName(INSPIRE, "SpecificationDateType", INSPIRE_PREFIX); private CSWQueryable() {} /** * The queryable element from ISO 19110 and their path id. */ public static final Map<String, List<String>> ISO_FC_QUERYABLE = new HashMap<>(); static { List<String> paths; /* * The core queryable of ISO 19115 */ paths = new ArrayList<>(); paths.add("/gfc:FC_FeatureCatalogue/gfc:featureType/gfc:FC_FeatureType/gfc:carrierOfCharacteristics/gfc:FC_FeatureAttribute/gfc:memberName/gco:LocalName"); ISO_FC_QUERYABLE.put("attributeName", paths); } /** * The queryable element from ISO 19115 and their path id. */ public static final Map<String, List<String>> ISO_QUERYABLE = new HashMap<>(); static { List<String> paths; /* * The core queryable of ISO 19115 */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gmx:Anchor"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:topicCategory/gmd:MD_TopicCategoryCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:topicCategory/gmd:MD_TopicCategoryCode"); ISO_QUERYABLE.put("Subject", paths); //MANDATORY paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gmx:Anchor"); ISO_QUERYABLE.put("Title", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:abstract/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:abstract/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:abstract/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:abstract/gmx:Anchor"); ISO_QUERYABLE.put("Abstract", paths); /*MANDATORY paths = new ArrayList<>(); ISO_QUERYABLE.put("AnyText", paths);*/ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gmx:Anchor"); ISO_QUERYABLE.put("Format", paths); //MANDATORY paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:fileIdentifier/gco:CharacterString"); ISO_QUERYABLE.put("Identifier", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:dateStamp/gco:DateTime"); paths.add("/gmd:MD_Metadata/gmd:dateStamp/gco:Date"); paths.add("/gmi:MI_Metadata/gmd:dateStamp/gco:DateTime"); paths.add("/gmi:MI_Metadata/gmd:dateStamp/gco:Date"); ISO_QUERYABLE.put("Modified", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:hierarchyLevel/gmd:MD_ScopeCode/@codeListValue"); paths.add("/gmi:MI_Metadata/gmd:hierarchyLevel/gmd:MD_ScopeCode/@codeListValue"); ISO_QUERYABLE.put("Type", paths); /* * Bounding box */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal"); ISO_QUERYABLE.put("WestBoundLongitude", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal"); ISO_QUERYABLE.put("EastBoundLongitude", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:northBoundLatitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:northBoundLatitude/gco:Decimal"); ISO_QUERYABLE.put("NorthBoundLatitude", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:southBoundLatitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:southBoundLatitude/gco:Decimal"); ISO_QUERYABLE.put("SouthBoundLatitude", paths); /* * CRS */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:codeSpace/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:codeSpace/gco:CharacterString"); ISO_QUERYABLE.put("Authority", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code/gco:CharacterString"); ISO_QUERYABLE.put("ID", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:version/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:version/gco:CharacterString"); ISO_QUERYABLE.put("Version", paths); /* * Additional queryable Element */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:alternateTitle/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:alternateTitle/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:alternateTitle/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:alternateTitle/gmx:Anchor"); ISO_QUERYABLE.put("AlternateTitle", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=revision/gmd:date/gco:Date"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=revision/gmd:date/gco:DateTime"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=revision/gmd:date/gco:Date"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=revision/gmd:date/gco:DateTime"); ISO_QUERYABLE.put("RevisionDate", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=creation/gmd:date/gco:Date"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=creation/gmd:date/gco:DateTime"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=creation/gmd:date/gco:Date"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=creation/gmd:date/gco:DateTime"); ISO_QUERYABLE.put("CreationDate", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=publication/gmd:date/gco:Date"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=publication/gmd:date/gco:DateTime"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=publication/gmd:date/gco:Date"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date#gmd:dateType/gmd:CI_DateTypeCode/@codeListValue=publication/gmd:date/gco:DateTime"); ISO_QUERYABLE.put("PublicationDate", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); // TODO remove the following path are not normalized paths.add("/gmd:MD_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); paths.add("/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); // TODO remove the following path are not normalized paths.add("/gmi:MI_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); ISO_QUERYABLE.put("OrganisationName", paths); //TODO If an instance of the class MD_SecurityConstraint exists for a resource, the “HasSecurityConstraints” is “true”, otherwise “false” //paths = new ArrayList<>(); //ISO_QUERYABLE.put("HasSecurityConstraints", paths); //TODO MD_FeatureCatalogueDescription paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:language/gmd:LanguageCode/@codeListValue"); paths.add("/gmi:MI_Metadata/gmd:language/gmd:LanguageCode/@codeListValue"); ISO_QUERYABLE.put("Language", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString"); ISO_QUERYABLE.put("ResourceIdentifier", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:parentIdentifier/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:parentIdentifier/gco:CharacterString"); ISO_QUERYABLE.put("ParentIdentifier", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:type/gmd:MD_KeywordTypeCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:type/gmd:MD_KeywordTypeCode"); ISO_QUERYABLE.put("KeywordType", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:topicCategory/gmd:MD_TopicCategoryCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:topicCategory/gmd:MD_TopicCategoryCode"); ISO_QUERYABLE.put("TopicCategory", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:language/gmd:LanguageCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:language/gmd:LanguageCode"); ISO_QUERYABLE.put("ResourceLanguage", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicDescription/gmd:geographicIdentifier/gmd:RS_Identifier/gmd:code/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicDescription/gmd:geographicIdentifier/gmd:RS_Identifier/gmd:code/gco:CharacterString"); ISO_QUERYABLE.put("GeographicDescriptionCode", paths); /* * spatial resolution */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:spatialResolution/gmd:MD_Resolution/gmd:equivalentScale/gmd:MD_RepresentativeFraction/gmd:denominator/gco:Integer"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:spatialResolution/gmd:MD_Resolution/gmd:equivalentScale/gmd:MD_RepresentativeFraction/gmd:denominator/gco:Integer"); ISO_QUERYABLE.put("Denominator", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance"); ISO_QUERYABLE.put("DistanceValue", paths); //TODO not existing path in MDWeb or geotoolkit (Distance is treated as a primitive type) paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance@uom"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance@uom"); ISO_QUERYABLE.put("DistanceUOM", paths); /* * Temporal Extent */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition/gmx:Anchor"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimeInstant/gml:position"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimeInstant/gml:position"); ISO_QUERYABLE.put("TempExtent_begin", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition/gmx:Anchor"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimeInstant/gml:position"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimeInstant/gml:position"); ISO_QUERYABLE.put("TempExtent_end", paths); /* * cloud cover percentage */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:contentInfo/gmd:MD_ImageDescription/gmd:cloudCoverPercentage/gco:Real"); paths.add("/gmi:MI_Metadata/gmd:contentInfo/gmd:MD_ImageDescription/gmd:cloudCoverPercentage/gco:Real"); ISO_QUERYABLE.put("CloudCover", paths); /* * illuminationElevationAngle */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:contentInfo/gmd:MD_ImageDescription/gmd:illuminationElevationAngle/gco:Real"); paths.add("/gmi:MI_Metadata/gmd:contentInfo/gmd:MD_ImageDescription/gmd:illuminationElevationAngle/gco:Real"); ISO_QUERYABLE.put("IlluminationElevation", paths); /* * processing level */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:contentInfo/gmd:MD_ImageDescription/gmd:processingLevelCode/gmd:RS_Identifier/gmd:code/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:contentInfo/gmd:MD_ImageDescription/gmd:processingLevelCode/gmd:RS_Identifier/gmd:code/gco:CharacterString"); ISO_QUERYABLE.put("ProcessingLevel", paths); /** * ISO 19119 specific queryable */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceType/gco:LocalName"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceType/gco:LocalName"); ISO_QUERYABLE.put("ServiceType", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:couplingType/srv:SV_CouplingType"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:couplingType/srv:SV_CouplingType"); ISO_QUERYABLE.put("CouplingType", paths); //TODO the following element are described in Service part of ISO 19139 not yet used. paths = new ArrayList<>(); ISO_QUERYABLE.put("ServiceTypeVersion", paths); ISO_QUERYABLE.put("OperatesOn", paths); ISO_QUERYABLE.put("OperatesOnIdentifier", paths); ISO_QUERYABLE.put("OperatesOnWithOpName", paths); /** * ISO 19115-2 specific queryable */ paths = new ArrayList<>(); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:platform/gmi:MI_Platform/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:instrument/gmi:MI_Instrument/gmi:mountedOn/gmi:MI_Platform/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:platform/gmi:MI_Platform/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:parentOperation/gmi:MI_Operation/gmi:platform/gmi:MI_Platform/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:childOperation/gmi:MI_Operation/gmi:platform/gmi:MI_Platform/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); ISO_QUERYABLE.put("Platform", paths); paths = new ArrayList<>(); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:instrument/gmi:MI_Instrument/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:platform/gmi:MI_Platform/gmi:instrument/gmi:MI_Instrument/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:platform/gmi:MI_Platform/gmi:instrument/gmi:MI_Instrument/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:parentOperation/gmi:MI_Operation/gmi:platform/gmi:MI_Platform/gmi:instrument/gmi:MI_Instrument/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:childOperation/gmi:MI_Operation/gmi:platform/gmi:MI_Platform/gmi:instrument/gmi:MI_Instrument/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); ISO_QUERYABLE.put("Instrument", paths); paths = new ArrayList<>(); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:childOperation/gmi:MI_Operation/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:acquisitionInformation/gmi:MI_AcquisitionInformation/gmi:operation/gmi:MI_Operation/gmi:parentOperation/gmi:MI_Operation/gmi:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); ISO_QUERYABLE.put("Operation", paths); } /** * The queryable element from DublinCore and their path id. */ public static final Map<String, List<String>> DUBLIN_CORE_QUERYABLE = new HashMap<>(); static { List<String> paths; /* * The core queryable of DublinCore */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title/gmx:Anchor"); paths.add("/csw:Record/dc:title"); paths.add("/eb3:*/eb3:Name/eb3:LocalizedString/@value"); paths.add("/eb2:*/eb2:Name/eb2:LocalizedString/@value"); DUBLIN_CORE_QUERYABLE.put("title", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=originator/gmd:organisationName/gmx:Anchor"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=originator/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=originator/gmd:organisationName/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=originator/gmd:organisationName/gco:CharacterString"); paths.add("/csw:Record/dc:creator"); DUBLIN_CORE_QUERYABLE.put("creator", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gmx:Anchor"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:topicCategory/gmd:MD_TopicCategoryCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:topicCategory/gmd:MD_TopicCategoryCode"); paths.add("/csw:Record/dc:subject"); //TODO @name = “http://purl.org/dc/elements/1.1/subject” paths.add("/eb3:*/eb3:slot/eb3:valueList/eb3:Value"); paths.add("/eb2:*/eb2:slot/eb2:valueList/eb2:Value"); DUBLIN_CORE_QUERYABLE.put("description", paths); DUBLIN_CORE_QUERYABLE.put("subject", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:abstract/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:abstract/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:abstract/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:abstract/gmx:Anchor"); paths.add("/csw:Record/gmd:abstract"); paths.add("/eb3:*/eb3:Description/eb3:LocalizedString/@value"); paths.add("/eb2:*/eb2:Description/eb2:LocalizedString/@value"); DUBLIN_CORE_QUERYABLE.put("abstract", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=publisher/gmd:organisationName/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=publisher/gmd:organisationName/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=publisher/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=publisher/gmd:organisationName/gmx:Anchor"); paths.add("/csw:Record/dc:publisher"); DUBLIN_CORE_QUERYABLE.put("publisher", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=author/gmd:organisationName/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=author/gmd:organisationName/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=author/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:pointOfContact/gmd:CI_ResponsibleParty#gmd:role/gmd:CI_RoleCode/@codeListValue=author/gmd:organisationName/gmx:Anchor"); paths.add("/csw:Record/dc:contributor"); DUBLIN_CORE_QUERYABLE.put("contributor", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:dateStamp/gco:DateTime"); paths.add("/gmd:MD_Metadata/gmd:dateStamp/gco:Date"); paths.add("/gmi:MI_Metadata/gmd:dateStamp/gco:DateTime"); paths.add("/gmi:MI_Metadata/gmd:dateStamp/gco:Date"); paths.add("/csw:Record/dc:date"); DUBLIN_CORE_QUERYABLE.put("date", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:hierarchyLevel/gmd:MD_ScopeCode"); paths.add("/gmi:MI_Metadata/gmd:hierarchyLevel/gmd:MD_ScopeCode"); paths.add("/csw:Record/dc:type"); paths.add("/eb3:*/@objectType"); paths.add("/eb2:*/@objectType"); DUBLIN_CORE_QUERYABLE.put("type", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format/gmd:name/gmx:Anchor"); paths.add("/csw:Record/dc:format"); paths.add("/eb3:*/@mimeType"); paths.add("/eb2:*/@mimeType"); DUBLIN_CORE_QUERYABLE.put("format", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:fileIdentifier/gco:CharacterString"); paths.add("/csw:Record/dc:identifier"); paths.add("/gfc:FC_FeatureCatalogue/@id"); paths.add("/eb3:*/@id"); paths.add("/wrs:ExtrinsicObject/@id"); paths.add("/eb2:*/@id"); paths.add("/wr:*/@id"); DUBLIN_CORE_QUERYABLE.put("identifier", paths); paths = new ArrayList<>(); paths.add("/csw:Record/dc:source"); DUBLIN_CORE_QUERYABLE.put("source", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:language/gmd:LanguageCode"); paths.add("/gmi:MI_Metadata/gmd:language/gmd:LanguageCode"); paths.add("/csw:Record/dc:language"); DUBLIN_CORE_QUERYABLE.put("language", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:aggregationInfo/gmd:MD_AggregateInformation/gmd:aggregateDataSetName/gmd:CI_Citation/gmd:title/gmx:Anchor"); paths.add("/csw:Record/dc:relation"); DUBLIN_CORE_QUERYABLE.put("relation", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:accessConstraints/gmd:MD_RestrictionCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:accessConstraints/gmd:MD_RestrictionCode"); paths.add("/csw:Record/dc:rights"); DUBLIN_CORE_QUERYABLE.put("rights", paths); /* * Bounding box */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal"); paths.add("/csw:Record/ows:BoundingBox/ows:LowerCorner[0]"); DUBLIN_CORE_QUERYABLE.put("WestBoundLongitude", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal"); paths.add("/csw:Record/ows:BoundingBox/ows:UpperCorner[0]"); DUBLIN_CORE_QUERYABLE.put("EastBoundLongitude", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:northBoundLatitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:northBoundLatitude/gco:Decimal"); paths.add("/csw:Record/ows:BoundingBox/ows:UpperCorner[1]"); DUBLIN_CORE_QUERYABLE.put("NorthBoundLatitude", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:southBoundLatitude/gco:Decimal"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:southBoundLatitude/gco:Decimal"); paths.add("/csw:Record/ows:BoundingBox/ows:LowerCorner[1]"); DUBLIN_CORE_QUERYABLE.put("SouthBoundLatitude", paths); paths = new ArrayList<>(); paths.add("/csw:Record/ows:BoundingBox/@crs"); DUBLIN_CORE_QUERYABLE.put("CRS", paths); } /** * The queryable element from ebrim and their path id. * @deprecated */ @Deprecated public static final Map<String, List<String>> EBRIM_QUERYABLE = new HashMap<>(); static { List<String> paths; /* * The core queryable of DublinCore */ paths = new ArrayList<>(); paths.add("/eb3:RegistryObject/eb3:Name/eb3:LocalizedString/@value"); paths.add("/eb3:RegistryPackage/eb3:Name/eb3:LocalizedString/@value"); EBRIM_QUERYABLE.put("name", paths); //TODO verify codelist=originator paths = new ArrayList<>(); EBRIM_QUERYABLE.put("creator", paths); paths = new ArrayList<>(); //TODO @name = “http://purl.org/dc/elements/1.1/subject” paths.add("/eb3:RegistryObject/eb3:slot/eb3:valueList/eb3:Value"); paths.add("/eb3:RegistryPackage/eb3:slot/eb3:valueList/eb3:Value"); EBRIM_QUERYABLE.put("description", paths); EBRIM_QUERYABLE.put("subject", paths); paths = new ArrayList<>(); paths.add("/eb3:RegistryObject/eb3:Description/eb3:LocalizedString/@value"); paths.add("/eb3:RegistryPackage/eb3:Description/eb3:LocalizedString/@value"); EBRIM_QUERYABLE.put("abstract", paths); //TODO verify codelist=publisher paths = new ArrayList<>(); EBRIM_QUERYABLE.put("publisher", paths); //TODO verify codelist=contributor paths = new ArrayList<>(); EBRIM_QUERYABLE.put("contributor", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("date", paths); paths = new ArrayList<>(); paths.add("/eb3:RegistryObject/@objectType"); paths.add("/eb3:RegistryPackage/@objectType"); EBRIM_QUERYABLE.put("type", paths); paths = new ArrayList<>(); paths.add("/eb3:ExtrinsicObject/@mimeType"); EBRIM_QUERYABLE.put("format", paths); paths = new ArrayList<>(); paths.add("/eb3:RegistryObject/@id"); paths.add("/eb3:RegistryPackage/@id"); EBRIM_QUERYABLE.put("identifier", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("source", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("language", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("relation", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("rigths", paths); /* * Bounding box */ paths = new ArrayList<>(); EBRIM_QUERYABLE.put("WestBoundLongitude", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("EastBoundLongitude", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("NorthBoundLatitude", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("SouthBoundLatitude", paths); paths = new ArrayList<>(); EBRIM_QUERYABLE.put("CRS", paths); } /** * The queryable element from DublinCore and their path id. */ public static final Map<String, List<String>> INSPIRE_QUERYABLE = new HashMap<>(); static { List<String> paths; /* * The core queryable of DublinCore */ paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:pass/gco:Boolean"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:pass/gco:Boolean"); INSPIRE_QUERYABLE.put("Degree", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:accessConstraints/gmd:MD_RestrictionCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:accessConstraints/gmd:MD_RestrictionCode"); INSPIRE_QUERYABLE.put("AccessConstraints", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:otherConstraints/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:otherConstraints/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:otherConstraints/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:otherConstraints/gmx:Anchor"); INSPIRE_QUERYABLE.put("OtherConstraints", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:classification/gmd:MD_ClassificationCode"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:classification/gmd:MD_ClassificationCode"); INSPIRE_QUERYABLE.put("Classification", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:useLimitation/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:useLimitation/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:useLimitation/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:identificationInfo/*/gmd:resourceConstraints/*/gmd:useLimitation/gmx:Anchor"); INSPIRE_QUERYABLE.put("ConditionApplyingToAccessAndUse", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gmx:Anchor"); INSPIRE_QUERYABLE.put("MetadataPointOfContact", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/*/gmd:statement/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/*/gmd:statement/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/*/gmd:statement/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/*/gmd:statement/gmx:Anchor"); INSPIRE_QUERYABLE.put("Lineage", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:title/gmx:Anchor"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:title/gco:CharacterString"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:title/gmx:Anchor"); INSPIRE_QUERYABLE.put("SpecificationTitle", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:date/gco:Date"); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:date/gco:DateTime"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:date/gco:Date"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:date/gco:DateTime"); INSPIRE_QUERYABLE.put("SpecificationDate", paths); paths = new ArrayList<>(); paths.add("/gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:dateType/gmd:CI_DateTypeCode"); paths.add("/gmi:MI_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/*/gmd:result/*/gmd:specification/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:dateType/gmd:CI_DateTypeCode"); INSPIRE_QUERYABLE.put("SpecificationDateType", paths); } }