/* * 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.index; import org.constellation.util.XpathUtils; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.constellation.metadata.CSWQueryable.DUBLIN_CORE_QUERYABLE; import static org.constellation.metadata.CSWQueryable.EBRIM_QUERYABLE; import static org.constellation.metadata.CSWQueryable.INSPIRE_QUERYABLE; import static org.constellation.metadata.CSWQueryable.ISO_FC_QUERYABLE; import static org.constellation.metadata.CSWQueryable.ISO_QUERYABLE; import static org.junit.Assert.assertEquals; /** * * @author Guilhem Legal (Geomatys) */ public class XpathTransformationTest { @Test public void gfcQueryableTest() throws Exception { List<String> expResult = new ArrayList<>(); expResult.add("ISO 19110:FC_FeatureCatalogue:featureType:carrierOfCharacteristics:memberName"); List<String> result = XpathUtils.xpathToMDPath(ISO_FC_QUERYABLE.get("attributeName")); assertEquals(expResult, result); } @Test public void isoQueryableTest() throws Exception { /* * The core queryable of ISO 19115 */ List<String> expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:descriptiveKeywords:keyword"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:descriptiveKeywords:keyword:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:descriptiveKeywords:keyword"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:descriptiveKeywords:keyword:value"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:topicCategory"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:topicCategory"); List<String> result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Subject")); assertEquals(expResult, result); //MANDATORY expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:title"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:title:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:title:value"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Title")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:abstract"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:abstract:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:abstract"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:abstract:value"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Abstract")); assertEquals(expResult, result); /*MANDATORY paths = new ArrayList<>(); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("AnyText", paths);*/ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:distributionInfo:distributionFormat:name"); expResult.add("ISO 19115:MD_Metadata:distributionInfo:distributionFormat:name:value"); expResult.add("ISO 19115-2:MI_Metadata:distributionInfo:distributionFormat:name"); expResult.add("ISO 19115-2:MI_Metadata:distributionInfo:distributionFormat:name:value"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Format")); assertEquals(expResult, result); //MANDATORY expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:fileIdentifier"); expResult.add("ISO 19115-2:MI_Metadata:fileIdentifier"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Identifier")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:dateStamp"); expResult.add("ISO 19115-2:MI_Metadata:dateStamp"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Modified")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:hierarchyLevel"); expResult.add("ISO 19115-2:MI_Metadata:hierarchyLevel"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Type")); assertEquals(expResult, result); /* * Bounding box */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:westBoundLongitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:westBoundLongitude"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("WestBoundLongitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:eastBoundLongitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:eastBoundLongitude"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("EastBoundLongitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:northBoundLatitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:northBoundLatitude"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("NorthBoundLatitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:southBoundLatitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:southBoundLatitude"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("SouthBoundLatitude")); assertEquals(expResult, result); /* * CRS */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:referenceSystemInfo:referenceSystemIdentifier:codeSpace"); expResult.add("ISO 19115-2:MI_Metadata:referenceSystemInfo:referenceSystemIdentifier:codeSpace"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Authority")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:referenceSystemInfo:referenceSystemIdentifier:code"); expResult.add("ISO 19115-2:MI_Metadata:referenceSystemInfo:referenceSystemIdentifier:code"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("ID")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:referenceSystemInfo:referenceSystemIdentifier:version"); expResult.add("ISO 19115-2:MI_Metadata:referenceSystemInfo:referenceSystemIdentifier:version"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Version")); assertEquals(expResult, result); /* * Additional queryable Element */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:alternateTitle"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:alternateTitle:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:alternateTitle"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:alternateTitle:value"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("AlternateTitle")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:date#dateType=revision:date"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:date#dateType=revision:date"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("RevisionDate")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:date#dateType=creation:date"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:date#dateType=creation:date"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("CreationDate")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:date#dateType=publication:date"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:date#dateType=publication:date"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("PublicationDate")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact:organisationName"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact:organisationName:value"); // TODO remove the following path are not normalized expResult.add("ISO 19115:MD_Metadata:contact:organisationName"); expResult.add("ISO 19115:MD_Metadata:contact:organisationName:value"); expResult.add("ISO 19115:MD_Metadata:distributionInfo:distributor:distributorContact:organisationName"); expResult.add("ISO 19115:MD_Metadata:distributionInfo:distributor:distributorContact:organisationName:value"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:citedResponsibleParty:organisationName"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:citedResponsibleParty:organisationName:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact:organisationName:value"); // TODO remove the following path are not normalized expResult.add("ISO 19115-2:MI_Metadata:contact:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:contact:organisationName:value"); expResult.add("ISO 19115-2:MI_Metadata:distributionInfo:distributor:distributorContact:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:distributionInfo:distributor:distributorContact:organisationName:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:citedResponsibleParty:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:citedResponsibleParty:organisationName:value"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("OrganisationName")); assertEquals(expResult, result); //TODO If an instance of the class MD_SecurityConstraint exists for a resource, the “HasSecurityConstraints” is “true”, otherwise “false” //paths = new ArrayList<>(); //result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("HasSecurityConstraints", paths); //TODO MD_FeatureCatalogueDescription expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:language"); expResult.add("ISO 19115-2:MI_Metadata:language"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Language")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:identifier:code"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:identifier:code"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("ResourceIdentifier")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:parentIdentifier"); expResult.add("ISO 19115-2:MI_Metadata:parentIdentifier"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("ParentIdentifier")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:descriptiveKeywords:type"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:descriptiveKeywords:type"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("KeywordType")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:topicCategory"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:topicCategory"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("TopicCategory")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:language"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:language"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("ResourceLanguage")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement3:geographicIdentifier:code"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement3:geographicIdentifier:code"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("GeographicDescriptionCode")); assertEquals(expResult, result); /* * spatial resolution */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:spatialResolution:equivalentScale:denominator"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:spatialResolution:equivalentScale:denominator"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Denominator")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:spatialResolution:distance"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:spatialResolution:distance"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("DistanceValue")); assertEquals(expResult, result); //TODO not existing path in MDWeb or geotoolkit (Distance is treated as a primitive type) //expResult = new ArrayList<>(); //paths.add("ISO 19115:MD_Metadata:identificationInfo:spatialResolution:distance:uom"); //result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("DistanceUOM", paths); /* * Temporal Extent */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:temporalElement:extent:beginPosition:value"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:temporalElement:extent:beginPosition"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:temporalElement:extent:position"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:temporalElement:extent:beginPosition:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:temporalElement:extent:beginPosition"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:temporalElement:extent:position"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("TempExtent_begin")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:temporalElement:extent:endPosition:value"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:temporalElement:extent:endPosition"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:temporalElement:extent:position"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:temporalElement:extent:endPosition:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:temporalElement:extent:endPosition"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:temporalElement:extent:position"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("TempExtent_end")); assertEquals(expResult, result); /* * cloud cover percentage */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:contentInfo:cloudCoverPercentage"); expResult.add("ISO 19115-2:MI_Metadata:contentInfo:cloudCoverPercentage"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("CloudCover")); assertEquals(expResult, result); /* * illuminationElevationAngle */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:contentInfo:illuminationElevationAngle"); expResult.add("ISO 19115-2:MI_Metadata:contentInfo:illuminationElevationAngle"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("IlluminationElevation")); assertEquals(expResult, result); /* * processing level */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:contentInfo:processingLevelCode:code"); expResult.add("ISO 19115-2:MI_Metadata:contentInfo:processingLevelCode:code"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("ProcessingLevel")); assertEquals(expResult, result); /** * ISO 19119 specific queryable */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:serviceType"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:serviceType"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("ServiceType")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:couplingType"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:couplingType"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("CouplingType")); assertEquals(expResult, result); //TODO the following element are described in Service part of ISO 19139 not yet used. expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("ServiceTypeVersion")); assertEquals(expResult, result); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("OperatesOn")); assertEquals(expResult, result); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("OperatesOnIdentifier")); assertEquals(expResult, result); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("OperatesOnWithOpName")); assertEquals(expResult, result); /** * ISO 19115-2 specific queryable */ expResult = new ArrayList<>(); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:platform:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:instrument:mountedOn:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:platform:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:parentOperation:platform:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:childOperation:platform:citation:title"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Platform")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:instrument:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:platform:instrument:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:platform:instrument:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:parentOperation:platform:instrument:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:childOperation:platform:instrument:citation:title"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Instrument")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:childOperation:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:acquisitionInformation:operation:parentOperation:citation:title"); result = XpathUtils.xpathToMDPath(ISO_QUERYABLE.get("Operation")); assertEquals(expResult, result); } @Test public void dcQueryableTest() throws Exception { /* * The core queryable of DublinCore */ List<String> expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:title"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:citation:title:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:title"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:citation:title:value"); expResult.add("Catalog Web Service:Record:title:content"); expResult.add("Ebrim v3.0:*:Name:LocalizedString:value"); expResult.add("Ebrim v2.5:*:Name:LocalizedString:value"); List<String> result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("title")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact#role=originator:organisationName:value"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact#role=originator:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact#role=originator:organisationName:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact#role=originator:organisationName"); expResult.add("Catalog Web Service:Record:creator:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("creator")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:descriptiveKeywords:keyword"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:descriptiveKeywords:keyword:value"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:topicCategory"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:descriptiveKeywords:keyword"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:descriptiveKeywords:keyword:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:topicCategory"); expResult.add("Catalog Web Service:Record:subject:content"); //TODO @name = “http://purl.org/dc/elements/1.1/subject” expResult.add("Ebrim v3.0:*:slot:valueList:Value"); expResult.add("Ebrim v2.5:*:slot:valueList:Value"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("description")); assertEquals(expResult, result); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("subject")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:abstract"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:abstract:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:abstract"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:abstract:value"); expResult.add("Catalog Web Service:Record:abstract:content"); expResult.add("Ebrim v3.0:*:Description:LocalizedString:value"); expResult.add("Ebrim v2.5:*:Description:LocalizedString:value"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("abstract")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact#role=publisher:organisationName"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact#role=publisher:organisationName:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact#role=publisher:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact#role=publisher:organisationName:value"); expResult.add("Catalog Web Service:Record:publisher:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("publisher")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact#role=author:organisationName"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:pointOfContact#role=author:organisationName:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact#role=author:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:pointOfContact#role=author:organisationName:value"); expResult.add("Catalog Web Service:Record:contributor:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("contributor")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:dateStamp"); expResult.add("ISO 19115-2:MI_Metadata:dateStamp"); expResult.add("Catalog Web Service:Record:date:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("date")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:hierarchyLevel"); expResult.add("ISO 19115-2:MI_Metadata:hierarchyLevel"); expResult.add("Catalog Web Service:Record:type:content"); expResult.add("Ebrim v3.0:*:objectType"); expResult.add("Ebrim v2.5:*:objectType"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("type")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:distributionInfo:distributionFormat:name"); expResult.add("ISO 19115:MD_Metadata:distributionInfo:distributionFormat:name:value"); expResult.add("ISO 19115-2:MI_Metadata:distributionInfo:distributionFormat:name"); expResult.add("ISO 19115-2:MI_Metadata:distributionInfo:distributionFormat:name:value"); expResult.add("Catalog Web Service:Record:format:content"); expResult.add("Ebrim v3.0:*:mimeType"); expResult.add("Ebrim v2.5:*:mimeType"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("format")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:fileIdentifier"); expResult.add("ISO 19115-2:MI_Metadata:fileIdentifier"); expResult.add("Catalog Web Service:Record:identifier:content"); expResult.add("ISO 19110:FC_FeatureCatalogue:id"); expResult.add("Ebrim v3.0:*:id"); expResult.add("Web Registry Service v1.0:ExtrinsicObject:id"); expResult.add("Ebrim v2.5:*:id"); expResult.add("Web Registry Service v0.9:*:id"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("identifier")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("Catalog Web Service:Record:source:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("source")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:language"); expResult.add("ISO 19115-2:MI_Metadata:language"); expResult.add("Catalog Web Service:Record:language:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("language")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:aggregationInfo:aggregateDataSetName:title"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:aggregationInfo:aggregateDataSetName:title:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:aggregationInfo:aggregateDataSetName:title"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:aggregationInfo:aggregateDataSetName:title:value"); expResult.add("Catalog Web Service:Record:relation:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("relation")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:resourceConstraints:accessConstraints"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:resourceConstraints:accessConstraints"); expResult.add("Catalog Web Service:Record:rights:content"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("rights")); assertEquals(expResult, result); /* * Bounding box */ expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:westBoundLongitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:westBoundLongitude"); expResult.add("Catalog Web Service:Record:BoundingBox:LowerCorner[0]"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("WestBoundLongitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:eastBoundLongitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:eastBoundLongitude"); expResult.add("Catalog Web Service:Record:BoundingBox:UpperCorner[0]"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("EastBoundLongitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:northBoundLatitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:northBoundLatitude"); expResult.add("Catalog Web Service:Record:BoundingBox:UpperCorner[1]"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("NorthBoundLatitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:extent:geographicElement2:southBoundLatitude"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:extent:geographicElement2:southBoundLatitude"); expResult.add("Catalog Web Service:Record:BoundingBox:LowerCorner[1]"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("SouthBoundLatitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("Catalog Web Service:Record:BoundingBox:crs"); result = XpathUtils.xpathToMDPath(DUBLIN_CORE_QUERYABLE.get("CRS")); assertEquals(expResult, result); } @Test public void ebrimQueryableTest() throws Exception { /* * The core queryable of DublinCore */ List<String> expResult = new ArrayList<>(); expResult.add("Ebrim v3.0:RegistryObject:Name:LocalizedString:value"); expResult.add("Ebrim v3.0:RegistryPackage:Name:LocalizedString:value"); List<String> result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("name")); assertEquals(expResult, result); //TODO verify codelist=originator expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("creator")); assertEquals(expResult, result); expResult = new ArrayList<>(); //TODO @name = “http://purl.org/dc/elements/1.1/subject” expResult.add("Ebrim v3.0:RegistryObject:slot:valueList:Value"); expResult.add("Ebrim v3.0:RegistryPackage:slot:valueList:Value"); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("description")); assertEquals(expResult, result); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("subject")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("Ebrim v3.0:RegistryObject:Description:LocalizedString:value"); expResult.add("Ebrim v3.0:RegistryPackage:Description:LocalizedString:value"); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("abstract")); assertEquals(expResult, result); //TODO verify codelist=publisher expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("publisher")); assertEquals(expResult, result); //TODO verify codelist=contributor expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("contributor")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("date")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("Ebrim v3.0:RegistryObject:objectType"); expResult.add("Ebrim v3.0:RegistryPackage:objectType"); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("type")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("Ebrim v3.0:ExtrinsicObject:mimeType"); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("format")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("Ebrim v3.0:RegistryObject:id"); expResult.add("Ebrim v3.0:RegistryPackage:id"); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("identifier")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("source")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("language")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("relation")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("rigths")); assertEquals(expResult, result); /* * Bounding box */ expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("WestBoundLongitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("EastBoundLongitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("NorthBoundLatitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("SouthBoundLatitude")); assertEquals(expResult, result); expResult = new ArrayList<>(); result = XpathUtils.xpathToMDPath(EBRIM_QUERYABLE.get("CRS")); assertEquals(expResult, result); } @Test public void inspireQueryableTest() throws Exception { /* * The core queryable of DublinCore */ List<String> expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:dataQualityInfo:report:result:pass"); expResult.add("ISO 19115-2:MI_Metadata:dataQualityInfo:report:result:pass"); List<String> result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("Degree")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:resourceConstraints:accessConstraints"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:resourceConstraints:accessConstraints"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("AccessConstraints")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:resourceConstraints:otherConstraints"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:resourceConstraints:otherConstraints:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:resourceConstraints:otherConstraints"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:resourceConstraints:otherConstraints:value"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("OtherConstraints")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:resourceConstraints:classification"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:resourceConstraints:classification"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("Classification")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:identificationInfo:resourceConstraints:useLimitation"); expResult.add("ISO 19115:MD_Metadata:identificationInfo:resourceConstraints:useLimitation:value"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:resourceConstraints:useLimitation"); expResult.add("ISO 19115-2:MI_Metadata:identificationInfo:resourceConstraints:useLimitation:value"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("ConditionApplyingToAccessAndUse")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:contact:organisationName"); expResult.add("ISO 19115:MD_Metadata:contact:organisationName:value"); expResult.add("ISO 19115-2:MI_Metadata:contact:organisationName"); expResult.add("ISO 19115-2:MI_Metadata:contact:organisationName:value"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("MetadataPointOfContact")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:dataQualityInfo:lineage:statement"); expResult.add("ISO 19115:MD_Metadata:dataQualityInfo:lineage:statement:value"); expResult.add("ISO 19115-2:MI_Metadata:dataQualityInfo:lineage:statement"); expResult.add("ISO 19115-2:MI_Metadata:dataQualityInfo:lineage:statement:value"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("Lineage")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:dataQualityInfo:report:result:specification:title"); expResult.add("ISO 19115:MD_Metadata:dataQualityInfo:report:result:specification:title:value"); expResult.add("ISO 19115-2:MI_Metadata:dataQualityInfo:report:result:specification:title"); expResult.add("ISO 19115-2:MI_Metadata:dataQualityInfo:report:result:specification:title:value"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("SpecificationTitle")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:dataQualityInfo:report:result:specification:date:date"); expResult.add("ISO 19115-2:MI_Metadata:dataQualityInfo:report:result:specification:date:date"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("SpecificationDate")); assertEquals(expResult, result); expResult = new ArrayList<>(); expResult.add("ISO 19115:MD_Metadata:dataQualityInfo:report:result:specification:date:dateType"); expResult.add("ISO 19115-2:MI_Metadata:dataQualityInfo:report:result:specification:date:dateType"); result = XpathUtils.xpathToMDPath(INSPIRE_QUERYABLE.get("SpecificationDateType")); assertEquals(expResult, result); } }