[caboto] r547 commited - Allow inferencing over annotations. Not safe for private graphs, I sus...

0 views
Skip to first unread message

codesite...@google.com

unread,
Jul 28, 2009, 8:47:59 AM7/28/09
to cabot...@googlegroups.com
Revision: 547
Author: pl...@mac.com
Date: Tue Jul 28 05:46:54 2009
Log: Allow inferencing over annotations. Not safe for private graphs, I
suspect.
http://code.google.com/p/caboto/source/detail?r=547

Modified:

/branches/multi_valued/database/src/main/java/org/caboto/jena/db/AbstractDatabase.java

/branches/multi_valued/database/src/main/java/org/caboto/jena/db/Database.java

/branches/multi_valued/database/src/main/java/org/caboto/jena/db/impl/LarqIndexedDatabase.java

/branches/multi_valued/database/src/test/java/org/caboto/jena/db/impl/LarqIndexedDatabaseTest.java

=======================================
---
/branches/multi_valued/database/src/main/java/org/caboto/jena/db/AbstractDatabase.java
Wed Mar 25 06:25:30 2009
+++
/branches/multi_valued/database/src/main/java/org/caboto/jena/db/AbstractDatabase.java
Tue Jul 28 05:46:54 2009
@@ -40,14 +40,28 @@
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
+import com.hp.hpl.jena.rdf.model.InfModel;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
+import com.hp.hpl.jena.reasoner.rulesys.GenericRuleReasoner;
+import com.hp.hpl.jena.reasoner.rulesys.Rule;
+import com.hp.hpl.jena.reasoner.rulesys.Rule.Parser;
import com.hp.hpl.jena.sparql.util.Context;
import com.hp.hpl.jena.sparql.util.Symbol;
+import com.hp.hpl.jena.util.FileManager;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;

/**
* A useful database abstraction that implements the details of the
queries,
@@ -58,9 +72,12 @@
*/
public abstract class AbstractDatabase implements Database {

+ final static Log log = LogFactory.getLog(AbstractDatabase.class);
+
private Context context;
-
- /**
+ private GenericRuleReasoner reasoner;
+
+ /**
* Gets the data object of the database for querying
*
* @return The data object
@@ -142,10 +159,12 @@
*/
public boolean addModel(String uri, Model model) {
try {
+ log.info("Adding data to model: " + uri + " " + reasoner);
Data data = getData();
Model m = data.getModel(uri);
m.withDefaultMappings(model);
m.add(model);
+ if (reasoner != null) redoInferred(uri, m, false);
m.close();
data.close();
return true;
@@ -161,10 +180,12 @@
*/
public boolean deleteModel(String uri, Model model) {
try {
+ log.info("Deleteing data in model: " + uri + " " + reasoner);
Data data = getData();
Model m = data.getModel(uri);
m.withDefaultMappings(model);
m.remove(model);
+ if (reasoner != null) redoInferred(uri, m, true);
m.close();
data.close();
return true;
@@ -176,9 +197,11 @@

public boolean deleteAll(String uri) {
try {
+ log.info("Deleting model: " + uri + " " + reasoner);
Data data = getData();
Model m = data.getModel(uri);
m.removeAll();
+ if (reasoner != null) redoInferred(uri, m, true);
m.close();
data.close();
return true;
@@ -198,6 +221,7 @@
public boolean updateProperty(String uri, String resourceUri,
Property property, RDFNode value) {
try {
+ log.info("Updting property in model: " + uri + " " + reasoner);
Data data = getData();
Model m = data.getModel(uri);
if (!m.containsResource(
@@ -230,4 +254,28 @@
}

public Context getQueryContext() { return this.context; }
-}
+
+ public void setRules(String rulesFile) {
+ try {
+ log.info("Trying to load rule file: " + rulesFile);
+ InputStream rulesStream = FileManager.get().open(rulesFile);
+ Parser rules = Rule.rulesParserFromReader(
+ new BufferedReader(
+ new InputStreamReader(rulesStream, "UTF-8")));
+ reasoner = new GenericRuleReasoner(Rule.parseRules(rules));
+ log.info("Loaded!");
+ } catch (Throwable ex) {
+ log.error("Problem loading rules <" + rulesFile + ">", ex);
+ }
+ }
+
+ public void redoInferred(String uri, Model m, boolean nonMon) throws
DataException {
+ log.info("Running inferences on " + uri);
+ Data data = getData();
+ Model infData = data.getModel(uri + "-inferred");
+ if (nonMon) infData.removeAll(); // Truth maintenance grossly
simplified
+ InfModel inf = ModelFactory.createInfModel(reasoner, m);
+ infData.add(inf.getDeductionsModel());
+ log.info("Inferencing done");
+ }
+}
=======================================
---
/branches/multi_valued/database/src/main/java/org/caboto/jena/db/Database.java
Wed Mar 25 06:25:30 2009
+++
/branches/multi_valued/database/src/main/java/org/caboto/jena/db/Database.java
Tue Jul 28 05:46:54 2009
@@ -144,4 +144,11 @@
* @return
*/
Context getQueryContext();
-}
+
+ /**
+ * Set rules to be run over database
+ *
+ * @param rulesFile Rules file to load
+ */
+ void setRules(String rulesFile);
+}
=======================================
---
/branches/multi_valued/database/src/main/java/org/caboto/jena/db/impl/LarqIndexedDatabase.java
Fri Mar 20 03:55:59 2009
+++
/branches/multi_valued/database/src/main/java/org/caboto/jena/db/impl/LarqIndexedDatabase.java
Tue Jul 28 05:46:54 2009
@@ -217,6 +217,10 @@
private void setIndex(IndexLARQ index) {
database.setQueryContext(LARQ.indexKey, cacheIfRequired(index));
}
+
+ public void setRules(String rulesFile) {
+ database.setRules(rulesFile);
+ }

static class IndexLARQCacher extends IndexLARQ {

=======================================
---
/branches/multi_valued/database/src/test/java/org/caboto/jena/db/impl/LarqIndexedDatabaseTest.java
Fri Mar 20 03:55:59 2009
+++
/branches/multi_valued/database/src/test/java/org/caboto/jena/db/impl/LarqIndexedDatabaseTest.java
Tue Jul 28 05:46:54 2009
@@ -230,6 +230,10 @@
public Context getQueryContext() {
return context;
}
+
+ public void setRules(String rulesFile) {
+ throw new UnsupportedOperationException("Not supported
yet.");
+ }

}
}

Reply all
Reply to author
Forward
0 new messages