// BridgeDb, // An abstraction layer for identifier mapping services, both local and online. // // Copyright 2006-2009 BridgeDb developers // Copyright 2012-2013 Christian Y. A. Brenninkmeijer // Copyright 2012-2013 OpenPhacts // // 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.bridgedb.sql.predicate; import org.bridgedb.rdf.constants.OWLConstants; import org.bridgedb.rdf.constants.OboConstants; import org.bridgedb.rdf.constants.RdfSchemaConstants; import org.bridgedb.rdf.constants.SkosConstants; import org.bridgedb.utils.BridgeDBException; /** * * @author Christian */ public class LoosePredicateMaker implements PredicateMaker{ //Broaawed + narrow = error private static final LoosePredicateMaker instance = new LoosePredicateMaker(); private LoosePredicateMaker(){ } public static LoosePredicateMaker getInstance(){ return instance; } public static void init() throws BridgeDBException{ //Currently does nothing but this is where you would read a proerties file. } @Override public String combine(String left, String right) throws BridgeDBException { String result = possibleCombine(left, right); if (result == null){ throw new BridgeDBException("unable to combine " + left + " with " + right); } else { return result; } } @Override public String possibleCombine(String left, String right) { if (left.equals(right)){ return left; } left = cleanup(left); right = cleanup(right); if (left.equals(right)){ return left; } if (left.equals(RdfSchemaConstants.SEE_ALSO)) { return RdfSchemaConstants.SEE_ALSO; } if (right.equals(RdfSchemaConstants.SEE_ALSO)) { return RdfSchemaConstants.SEE_ALSO; } if (left.equals(OWLConstants.SAME_AS)) { if (right.equals(OWLConstants.EQUIVALENT_CLASS)) return OWLConstants.EQUIVALENT_CLASS; if (right.equals(SkosConstants.EXACT_MATCH)) return SkosConstants.EXACT_MATCH; if (right.equals(SkosConstants.CLOSE_MATCH)) return SkosConstants.CLOSE_MATCH; if (right.equals(SkosConstants.MAPPING_RELATION)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.RELATED_MATCH)) return SkosConstants.RELATED_MATCH; if (right.equals(SkosConstants.NARROW_MATCH)) return SkosConstants.NARROW_MATCH; if (right.equals(SkosConstants.BROAD_MATCH)) return SkosConstants.BROAD_MATCH; if (right.equals(OboConstants.HAS_PART)) return OboConstants.HAS_PART; } if (left.equals(OWLConstants.EQUIVALENT_CLASS)) { if (right.equals(OWLConstants.SAME_AS)) return OWLConstants.EQUIVALENT_CLASS; if (right.equals(SkosConstants.EXACT_MATCH)) return SkosConstants.EXACT_MATCH; if (right.equals(SkosConstants.CLOSE_MATCH)) return SkosConstants.CLOSE_MATCH; if (right.equals(SkosConstants.MAPPING_RELATION)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.RELATED_MATCH)) return SkosConstants.RELATED_MATCH; if (right.equals(SkosConstants.NARROW_MATCH)) return SkosConstants.NARROW_MATCH; if (right.equals(SkosConstants.BROAD_MATCH)) return SkosConstants.BROAD_MATCH; if (right.equals(OboConstants.HAS_PART)) return OboConstants.HAS_PART; } if (left.equals(SkosConstants.EXACT_MATCH)) { //TODO keep other if (right.equals(OWLConstants.EQUIVALENT_CLASS)) return SkosConstants.EXACT_MATCH; if (right.equals(OWLConstants.SAME_AS)) return SkosConstants.EXACT_MATCH; if (right.equals(SkosConstants.CLOSE_MATCH)) return SkosConstants.CLOSE_MATCH; if (right.equals(SkosConstants.MAPPING_RELATION)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.RELATED_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.NARROW_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.BROAD_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(OboConstants.HAS_PART)) return OboConstants.HAS_PART; } if (left.equals(SkosConstants.CLOSE_MATCH)) { if (right.equals(OWLConstants.EQUIVALENT_CLASS)) return SkosConstants.CLOSE_MATCH; if (right.equals(OWLConstants.SAME_AS)) return SkosConstants.CLOSE_MATCH; if (right.equals(SkosConstants.EXACT_MATCH)) return SkosConstants.CLOSE_MATCH; if (right.equals(SkosConstants.MAPPING_RELATION)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.RELATED_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.NARROW_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.BROAD_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(OboConstants.HAS_PART)) return OboConstants.HAS_PART; } if (left.equals(SkosConstants.MAPPING_RELATION)) { if (right.equals(OWLConstants.EQUIVALENT_CLASS)) return SkosConstants.MAPPING_RELATION; if (right.equals(OWLConstants.SAME_AS)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.EXACT_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.CLOSE_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.RELATED_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.NARROW_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.BROAD_MATCH)) return SkosConstants.MAPPING_RELATION; } //Left != Right as that has been handled above //So Borad, Narrow and mapping relation all go up to mapping Relation if (left.equals(SkosConstants.RELATED_MATCH) || left.equals(SkosConstants.BROAD_MATCH) || left.equals(SkosConstants.NARROW_MATCH)) { if (right.equals(OWLConstants.EQUIVALENT_CLASS)) return left; if (right.equals(OWLConstants.SAME_AS)) return left; if (right.equals(SkosConstants.EXACT_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.CLOSE_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.MAPPING_RELATION)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.RELATED_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.NARROW_MATCH)) return SkosConstants.MAPPING_RELATION; if (right.equals(SkosConstants.BROAD_MATCH)) return SkosConstants.MAPPING_RELATION; } if (left.equals(OboConstants.HAS_PART)) { if (right.equals(OWLConstants.EQUIVALENT_CLASS)) return OboConstants.HAS_PART; if (right.equals(OWLConstants.SAME_AS)) return OboConstants.HAS_PART; if (right.equals(SkosConstants.EXACT_MATCH)) return OboConstants.HAS_PART; if (right.equals(SkosConstants.CLOSE_MATCH)) return OboConstants.HAS_PART; } return null; } private static String cleanup(String predicate){ if (predicate.equals(SkosConstants.BROADER)){ return SkosConstants.BROAD_MATCH; } if (predicate.equals(SkosConstants.NARROWER)){ return SkosConstants.NARROW_MATCH; } if (predicate.equals(SkosConstants.RELATED)){ return SkosConstants.RELATED_MATCH; } return predicate; } }