blob: 0904320c56767f86d99dad5f767c104d19b18656 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.jena.reasoner.test;
import java.io.PrintWriter;
import java.util.*;
import org.apache.jena.rdf.model.* ;
import org.apache.jena.reasoner.* ;
import org.apache.jena.reasoner.ValidityReport.Report ;
import org.apache.jena.reasoner.rulesys.* ;
import org.apache.jena.util.FileManager ;
import org.apache.jena.util.PrintUtil ;
import org.apache.jena.vocabulary.RDFS ;
import org.apache.jena.vocabulary.ReasonerVocabulary ;
/**
* Some code samples from the user manual.
*/
public class ManualExample {
/** Illustrate different ways of finding a reasoner */
public void test1() {
String NS = "urn:x-hp-jena:eg/";
// Build a trivial example data set
Model rdfsExample = ModelFactory.createDefaultModel();
Property p = rdfsExample.createProperty(NS, "p");
Property q = rdfsExample.createProperty(NS, "q");
rdfsExample.add(p, RDFS.subPropertyOf, q);
rdfsExample.createResource(NS+"a")
.addProperty(p, "foo");
// Create an RDFS inference model the easy way
// InfModel inf = ModelFactory.createRDFSModel(rdfsExample);
// Create an RDFS inference model the hard way
Resource config = ModelFactory.createDefaultModel()
.createResource()
.addProperty(ReasonerVocabulary.PROPsetRDFSLevel, "simple");
Reasoner reasoner = RDFSRuleReasonerFactory.theInstance().create(config);
// Set the parameter the easier way
// reasoner.setParameter(ReasonerVocabulary.PROPsetRDFSLevel,
// ReasonerVocabulary.RDFS_SIMPLE);
InfModel inf = ModelFactory.createInfModel(reasoner, rdfsExample);
Resource a = inf.getResource(NS+"a");
Statement s = a.getProperty(q);
System.out.println("Statement: " + s);
}
/** illustrate validation */
public void test2(String fname) {
System.out.println("Testing " + fname);
Model data = FileManager.getInternal().loadModelInternal(fname);
InfModel infmodel = ModelFactory.createRDFSModel(data);
ValidityReport validity = infmodel.validate();
if (validity.isValid()) {
System.out.println("OK");
} else {
System.out.println("Conflicts");
for (Iterator<Report> i = validity.getReports(); i.hasNext(); ) {
ValidityReport.Report report = i.next();
System.out.println(" - " + report);
// System.out.println(" - " + i.next());
}
}
}
/** illustrate generic rules and derivation tracing */
public void test3() {
// Test data
String egNS = PrintUtil.egNS; // Namespace for examples
Model rawData = ModelFactory.createDefaultModel();
Property p = rawData.createProperty(egNS, "p");
Resource A = rawData.createResource(egNS + "A");
Resource B = rawData.createResource(egNS + "B");
Resource C = rawData.createResource(egNS + "C");
Resource D = rawData.createResource(egNS + "D");
A.addProperty(p, B);
B.addProperty(p, C);
C.addProperty(p, D);
// Rule example
String rules = "[rule1: (?a eg:p ?b) (?b eg:p ?c) -> (?a eg:p ?c)]";
Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rules));
reasoner.setDerivationLogging(true);
InfModel inf = ModelFactory.createInfModel(reasoner, rawData);
PrintWriter out = new PrintWriter(System.out);
for (StmtIterator i = inf.listStatements(A, p, D); i.hasNext(); ) {
Statement s = i.nextStatement();
System.out.println("Statement is " + s);
for (Iterator<Derivation> id = inf.getDerivation(s); id.hasNext(); ) {
Derivation deriv = id.next();
deriv.printTrace(out, true);
}
}
out.flush();
}
/** Another generic rules illustration */
public void test4() {
// Test data
String egNS = PrintUtil.egNS; // Namespace for examples
Model rawData = ModelFactory.createDefaultModel();
Property first = rawData.createProperty(egNS, "concatFirst");
Property second = rawData.createProperty(egNS, "concatSecond");
Property p = rawData.createProperty(egNS, "p");
Property q = rawData.createProperty(egNS, "q");
Property r = rawData.createProperty(egNS, "r");
Resource A = rawData.createResource(egNS + "A");
Resource B = rawData.createResource(egNS + "B");
Resource C = rawData.createResource(egNS + "C");
A.addProperty(p, B);
B.addProperty(q, C);
r.addProperty(first, p);
r.addProperty(second, q);
// Rule example for
String rules =
"[r1: (?c eg:concatFirst ?p), (?c eg:concatSecond ?q) -> " + " [r1b: (?x ?c ?y) <- (?x ?p ?z) (?z ?q ?y)] ]"; Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rules));
// reasoner.setParameter(ReasonerVocabulary.PROPtraceOn, Boolean.TRUE);
InfModel inf = ModelFactory.createInfModel(reasoner, rawData);
// System.out.println("OK = " + inf.contains(A, r, C));
Iterator<Statement> list = inf.listStatements(A, null, (RDFNode)null);
System.out.println("A * * =>");
while (list.hasNext()) {
System.out.println(" - " + list.next());
}
}
public static void main(String[] args) {
try {
// new ManualExample().test1();
// new ManualExample().test2("file:testing/reasoners/rdfs/dttest2.nt");
// new ManualExample().test2("file:testing/reasoners/rdfs/dttest3.nt");
// new ManualExample().test3();
new ManualExample().test4();
} catch (Exception e) {
System.out.println("Problem: " + e);
e.printStackTrace();
}
}
}