From: <jen...@us...> - 2010-02-02 09:37:13
|
Revision: 1989 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1989&view=rev Author: jenslehmann Date: 2010-02-02 09:36:55 +0000 (Tue, 02 Feb 2010) Log Message: ----------- hasValue support for datatypes, which are amongst the most general data properties Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/core/owl/StringValueRestriction.java trunk/src/dl-learner/org/dllearner/reasoning/OWLAPIReasoner.java trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java Modified: trunk/src/dl-learner/org/dllearner/core/owl/StringValueRestriction.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/StringValueRestriction.java 2010-02-02 09:16:38 UTC (rev 1988) +++ trunk/src/dl-learner/org/dllearner/core/owl/StringValueRestriction.java 2010-02-02 09:36:55 UTC (rev 1989) @@ -28,8 +28,12 @@ */ public class StringValueRestriction extends DatatypeValueRestriction { + private String stringValue; + public StringValueRestriction(DatatypeProperty restrictedPropertyExpression, String value) { + // TODO: we pass it as typed property, although it could be untyped super(restrictedPropertyExpression, new TypedConstant(value.toString(), Datatype.STRING)); + stringValue = value.toString(); } private static final long serialVersionUID = 5651982376457935975L; @@ -39,4 +43,8 @@ return 3; } + public String getStringValue() { + return stringValue; + } + } Modified: trunk/src/dl-learner/org/dllearner/reasoning/OWLAPIReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/OWLAPIReasoner.java 2010-02-02 09:16:38 UTC (rev 1988) +++ trunk/src/dl-learner/org/dllearner/reasoning/OWLAPIReasoner.java 2010-02-02 09:36:55 UTC (rev 1989) @@ -381,8 +381,10 @@ else if(uri.equals(Datatype.INT.getURI())) intDatatypeProperties.add(dtp); else if(uri.equals(Datatype.STRING.getURI())) - intDatatypeProperties.add(dtp); + stringDatatypeProperties.add(dtp); } + } else { + stringDatatypeProperties.add(dtp); } datatypeProperties.add(dtp); } @@ -390,8 +392,6 @@ individuals.add(new Individual(owlIndividual.getURI().toString())); } - - } /* (non-Javadoc) Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2010-02-02 09:16:38 UTC (rev 1988) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2010-02-02 09:36:55 UTC (rev 1989) @@ -147,6 +147,7 @@ private Map<NamedClass,Set<ObjectProperty>> mgr = new TreeMap<NamedClass,Set<ObjectProperty>>(); private Map<NamedClass,Set<DatatypeProperty>> mgbd = new TreeMap<NamedClass,Set<DatatypeProperty>>(); private Map<NamedClass,Set<DatatypeProperty>> mgdd = new TreeMap<NamedClass,Set<DatatypeProperty>>(); + private Map<NamedClass,Set<DatatypeProperty>> mgsd = new TreeMap<NamedClass,Set<DatatypeProperty>>(); // concept comparator private ConceptComparator conceptComparator = new ConceptComparator(); @@ -643,6 +644,13 @@ refinements.add(newDSR); } } + } else if (description instanceof StringValueRestriction) { + StringValueRestriction svr = (StringValueRestriction) description; + DatatypeProperty dp = svr.getRestrictedPropertyExpresssion(); + Set<DatatypeProperty> subDPs = rs.getSubProperties(dp); + for(DatatypeProperty subDP : subDPs) { + refinements.add(new StringValueRestriction(subDP, svr.getStringValue())); + } } // if a refinement is not Bottom, Top, ALL r.Bottom a refinement of top can be appended @@ -1083,6 +1091,17 @@ } } + if(useDataHasValueConstructor) { + Set<DatatypeProperty> stringDPs = mgsd.get(nc); + for(DatatypeProperty dp : stringDPs) { + // loop over frequent values + Set<Constant> freqValues = frequentDataValues.get(dp); + for(Constant c : freqValues) { + m3.add(new StringValueRestriction(dp, c.getLiteral())); + } + } + } + mA.get(nc).put(3,m3); SortedSet<Description> m4 = new TreeSet<Description>(conceptComparator); @@ -1106,10 +1125,11 @@ if(appOP.get(domain) == null) computeApp(domain); - // initialise mgr, mgbd, mgdd + // initialise mgr, mgbd, mgdd, mgsd mgr.put(domain, new TreeSet<ObjectProperty>()); mgbd.put(domain, new TreeSet<DatatypeProperty>()); mgdd.put(domain, new TreeSet<DatatypeProperty>()); + mgsd.put(domain, new TreeSet<DatatypeProperty>()); SortedSet<ObjectProperty> mostGeneral = rs.getMostGeneralProperties(); computeMgrRecursive(domain, mostGeneral, mgr.get(domain)); @@ -1118,8 +1138,10 @@ // datatype properties have the same type (e.g. boolean, integer, double) Set<DatatypeProperty> mostGeneralBDP = Helper.intersection(mostGeneralDP, rs.getBooleanDatatypeProperties()); Set<DatatypeProperty> mostGeneralDDP = Helper.intersection(mostGeneralDP, rs.getDoubleDatatypeProperties()); + Set<DatatypeProperty> mostGeneralSDP = Helper.intersection(mostGeneralDP, rs.getStringDatatypeProperties()); computeMgbdRecursive(domain, mostGeneralBDP, mgbd.get(domain)); computeMgddRecursive(domain, mostGeneralDDP, mgdd.get(domain)); + computeMgsdRecursive(domain, mostGeneralSDP, mgsd.get(domain)); } private void computeMgrRecursive(NamedClass domain, Set<ObjectProperty> currProperties, Set<ObjectProperty> mgrTmp) { @@ -1149,6 +1171,15 @@ } } + private void computeMgsdRecursive(NamedClass domain, Set<DatatypeProperty> currProperties, Set<DatatypeProperty> mgsdTmp) { + for(DatatypeProperty prop : currProperties) { + if(appDD.get(domain).contains(prop)) + mgsdTmp.add(prop); + else + computeMgsdRecursive(domain, rs.getSubProperties(prop), mgsdTmp); + } + } + // computes the set of applicable properties for a given class private void computeApp(NamedClass domain) { // object properties This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |