/* * 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.rulesys.test; import java.util.List; import junit.framework.TestSuite; import org.apache.jena.graph.* ; import org.apache.jena.graph.test.* ; import org.apache.jena.rdf.model.* ; import org.apache.jena.reasoner.* ; import org.apache.jena.reasoner.rulesys.* ; import org.apache.jena.reasoner.test.TestUtil ; import org.apache.jena.util.PrintUtil ; public class TestInferenceReification extends AbstractTestReifier { /** * Boilerplate for junit */ public TestInferenceReification( String name ) { super( name ); } /** * Boilerplate for junit. * This is its own test suite */ public static TestSuite suite() { return new TestSuite( TestInferenceReification.class ); } @Override public Graph getGraph() { return makeInfGraph( "", "" ); } /** * Case 1: Rules construct a reified statement, is that * visible as reified statement in the InfGraph? */ public void testSimpleReification() { String rules = "[r1: (?x eh:p ?o) -> (?o rdf:type rdf:Statement) (?o rdf:subject ?x)" + " (?o rdf:predicate eh:q) (?o rdf:object 42)]"; Model m = makeInfModel( rules, "r1 p r" ); TestUtil.assertIteratorLength( m.listReifiedStatements(), 1 ); } private Reasoner ruleBaseReasoner() { return new FBRuleReasoner( Rule.parseRules( "" ) ); } public void testConstructingModelDoesntForcePreparation() { Model m = makeInfModel( "", "" ); if (((BaseInfGraph) m.getGraph()).isPrepared()) fail(); } /** * Case 1: Rules complete an exisiting partially reified statement. */ public void SUPPRESStestReificationCompletion() { String rules = "[r1: (?x rdf:subject ?s) (?x rdf:predicate ?p) -> (?x rdf:object eh:bar)]"; Model m = makeInfModel(rules, "r1 rdf:type rdf:Statement; r1 rdf:subject foo; r1 rdf:predicate p" ); RSIterator i = m.listReifiedStatements(); assertTrue(i.hasNext()); assertEquals( triple("foo p bar"), i.nextRS().getStatement().asTriple()); assertFalse(i.hasNext()); } /** * Internal helper: create an InfGraph with given rule set and base data. * The base data is encoded in kers-special RDF syntax. */ private InfGraph makeInfGraph(String rules, String data) { PrintUtil.registerPrefix("eh", "eh:/"); Graph base = graphWith( data ); List<Rule> ruleList = Rule.parseRules(rules); return new FBRuleReasoner(ruleList).bind( base ); } /** * Internal helper: create a Model which wraps an InfGraph with given rule set and base data. * The base data is encoded in kers-special RDF syntax. */ private Model makeInfModel( String rules, String data ) { return ModelFactory.createModelForGraph( makeInfGraph(rules, data ) ); } }