You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by "Iturraspe Barturen, Urtza" <ur...@tecnalia.com> on 2015/11/25 13:24:21 UTC

Jena TDB and JenaRules execution

Hi everybody,

I am trying to execute a Jena Rule using Jena TDB.
I have already expertise using Jena rules in Jena SDB but now I was trying using TBD.

The rule inserts an instance in an ontology. The content of jena.rule file has this rule:

@prefix pi: <http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#>. @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. [AddingPizza: -> (pi:PizzaXXXX rdf:type pi:Pizza) ]



The code that I use is the following. Perhaps is something is wrong,  please anyone can help me ?

Model jenaModel=datasetJena.getDefaultModel();

Reasoner reasoner = new GenericRuleReasoner(Rule.rulesFromURL("file:./src/jena.rule"));

InfModel infModel = ModelFactory.createInfModel(reasoner, jenamodel);

infModel.prepare();

jenamodel.add(infModel);

datasetJena.commit();

TDB.sync(jenamodel);

infmodel.close();

datasetJena.commit();

datasetJena.end();

Best regards,

Urtza


OPTIMA - Optimization Modelling & Analytics Area
ICT - European Software Institute Division
TECNALIA
Parque Tecnológico de Bizkaia, Edificio 700
C/ Geldo. E-48160 Derio- Bizkaia (Spain)
Mobile: 664 00 21 51
Telephone: 902 760 002  /  946 430 850 (International calls)
urtza.iturraspe@tecnalia.com<ma...@tecnalia.com>
www.tecnalia.com<http://www.tecnalia.com/>


Re: Jena TDB and JenaRules execution

Posted by Dave Reynolds <da...@gmail.com>.
Hi Urtza,

Glad you've got it sorted.

Dave

On 26/11/15 09:31, Iturraspe Barturen, Urtza wrote:
> Thanks Dave.
>
> At the end I solve my problem!!,
> I have made some changes in my code, the main changes consist on:
>
> 1.- Rewriting the rule
>
> String rule="[AddingPizza: -> (http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#PizzaXXX rdf:type http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza)]";
>
>
> 2.- Reasoner object
>
>    Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rule));
>
>
> I put you my code if just in case someone has the same problem, it works!!!
>
> public void executeReasoning(){
> 	
>    try{
> 	 datasetJena.begin(ReadWrite.WRITE);
> 	 Model jenaModel=datasetJena.getDefaultModel();		
> 	 String rule="[AddingPizza: -> (http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#PizzaXXX rdf:type http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza)]";
> 	
> 	 Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rule));
> 	 InfModel infModel = ModelFactory.createInfModel(reasoner, jenaModel);
> 	 infModel.prepare();
> 	
> 	//check the infModel
> 		
> 	Model aux=infModel.getDeductionsModel();
> 	 StmtIterator stmIt=aux.listStatements();
> 	if (stmIt.hasNext()){
> 	            StatementImpl stmIterator= (StatementImpl) stmIt.next();
> 	            System.out.println("Sentencia:"+stmIterator.toString());
> 	    	
> 	}
> 		
> 	//end of checking
> 	
> 	//add infModel to JenaModel
> 	jenaModel.add(infModel.getDeductionsModel());
> 	
> 	 datasetJena.commit();
> 	
>
>     }
>      catch(Exception e){
> 	  System.out.println(e.getMessage());
>    }
>    finally{
>    datasetJena.end();
>    }
> 	
>    }
>
> Thanks.
> Urtza
>
>
>
>
>
>
> OPTIMA - Optimization Modelling & Analytics Area
> ICT - European Software Institute Division
> TECNALIA
> Parque Tecnológico de Bizkaia, Edificio 700
> C/ Geldo. E-48160 Derio- Bizkaia (Spain)
> Mobile: 664 00 21 51
> Telephone: 902 760 002  /  946 430 850 (International calls)
> urtza.iturraspe@tecnalia.com
> www.tecnalia.com
>
>
> -----Mensaje original-----
> De: Dave Reynolds [mailto:dave.e.reynolds@gmail.com]
> Enviado el: miércoles, 25 de noviembre de 2015 15:11
> Para: users@jena.apache.org
> Asunto: Re: Jena TDB and JenaRules execution
>
> On 25/11/15 12:24, Iturraspe Barturen, Urtza wrote:
>> Hi everybody,
>>
>> I am trying to execute a Jena Rule using Jena TDB.
>> I have already expertise using Jena rules in Jena SDB but now I was trying using TBD.
>>
>> The rule inserts an instance in an ontology. The content of jena.rule file has this rule:
>>
>> @prefix pi:
>> <http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#>.
>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
>> [AddingPizza: -> (pi:PizzaXXXX rdf:type pi:Pizza) ]
>>
>>
>>
>> The code that I use is the following. Perhaps is something is wrong,  please anyone can help me ?
>
> You haven't said what the problem is.
>
>> Model jenaModel=datasetJena.getDefaultModel();
>>
>> Reasoner reasoner = new
>> GenericRuleReasoner(Rule.rulesFromURL("file:./src/jena.rule"));
>>
>> InfModel infModel = ModelFactory.createInfModel(reasoner, jenamodel);
>>
>> infModel.prepare();
>
> Need to start the transaction:
>
>    datasetJena.begin(ReadWrite.WRITE) ;
>    try {
>
>> jenamodel.add(infModel);
>
> This has different spelling to the above so suggests this is not actually the code you are running.
>
> With correct spelling this should work but causes redundant adds, if you are only using forward rules then better to use:
>
>     jenaModel.add( infModel.getDeductionsModel() );
>
> so as to only add new statements.
>
>> datasetJena.commit();
>
>    } finally {
>      datasetJena.end() ;
>    }
>
>> TDB.sync(jenamodel);
>
> Not necessary if you are using transactions.
>
>> infmodel.close();
>>
>> datasetJena.commit();
>>
>> datasetJena.end();
>
> No need to call these again, you did the commit earlier.
>
> If, with fixed transaction handling, it doesn't work then (a) check what is in the infModel.getDeductionsModel() and (b) try with an in-memory dataset.
>
> Dave
>
>

RE: Jena TDB and JenaRules execution

Posted by "Iturraspe Barturen, Urtza" <ur...@tecnalia.com>.
Thanks Dave.

At the end I solve my problem!!, 
I have made some changes in my code, the main changes consist on:

1.- Rewriting the rule 

String rule="[AddingPizza: -> (http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#PizzaXXX rdf:type http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza)]";


2.- Reasoner object

  Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rule));  


I put you my code if just in case someone has the same problem, it works!!!

public void executeReasoning(){
	  
  try{
	 datasetJena.begin(ReadWrite.WRITE);
	 Model jenaModel=datasetJena.getDefaultModel();		 
	 String rule="[AddingPizza: -> (http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#PizzaXXX rdf:type http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza)]";
	 
	 Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rule));
	 InfModel infModel = ModelFactory.createInfModel(reasoner, jenaModel);
	 infModel.prepare();
	
	//check the infModel 
		 
	Model aux=infModel.getDeductionsModel();
	 StmtIterator stmIt=aux.listStatements();
	if (stmIt.hasNext()){
	            StatementImpl stmIterator= (StatementImpl) stmIt.next();
	            System.out.println("Sentencia:"+stmIterator.toString());
	    	 
	}
		 
	//end of checking
	     
	//add infModel to JenaModel
	jenaModel.add(infModel.getDeductionsModel()); 
	     
	 datasetJena.commit();
	 

   }
    catch(Exception e){
	  System.out.println(e.getMessage());
  }
  finally{
  datasetJena.end();
  }
	 
  }

Thanks.
Urtza






OPTIMA - Optimization Modelling & Analytics Area
ICT - European Software Institute Division 
TECNALIA
Parque Tecnológico de Bizkaia, Edificio 700
C/ Geldo. E-48160 Derio- Bizkaia (Spain)
Mobile: 664 00 21 51
Telephone: 902 760 002  /  946 430 850 (International calls) 
urtza.iturraspe@tecnalia.com 
www.tecnalia.com 


-----Mensaje original-----
De: Dave Reynolds [mailto:dave.e.reynolds@gmail.com] 
Enviado el: miércoles, 25 de noviembre de 2015 15:11
Para: users@jena.apache.org
Asunto: Re: Jena TDB and JenaRules execution

On 25/11/15 12:24, Iturraspe Barturen, Urtza wrote:
> Hi everybody,
>
> I am trying to execute a Jena Rule using Jena TDB.
> I have already expertise using Jena rules in Jena SDB but now I was trying using TBD.
>
> The rule inserts an instance in an ontology. The content of jena.rule file has this rule:
>
> @prefix pi: 
> <http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#>. 
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. 
> [AddingPizza: -> (pi:PizzaXXXX rdf:type pi:Pizza) ]
>
>
>
> The code that I use is the following. Perhaps is something is wrong,  please anyone can help me ?

You haven't said what the problem is.

> Model jenaModel=datasetJena.getDefaultModel();
>
> Reasoner reasoner = new 
> GenericRuleReasoner(Rule.rulesFromURL("file:./src/jena.rule"));
>
> InfModel infModel = ModelFactory.createInfModel(reasoner, jenamodel);
>
> infModel.prepare();

Need to start the transaction:

  datasetJena.begin(ReadWrite.WRITE) ;
  try {

> jenamodel.add(infModel);

This has different spelling to the above so suggests this is not actually the code you are running.

With correct spelling this should work but causes redundant adds, if you are only using forward rules then better to use:

   jenaModel.add( infModel.getDeductionsModel() );

so as to only add new statements.

> datasetJena.commit();

  } finally {
    datasetJena.end() ;
  }

> TDB.sync(jenamodel);

Not necessary if you are using transactions.

> infmodel.close();
>
> datasetJena.commit();
>
> datasetJena.end();

No need to call these again, you did the commit earlier.

If, with fixed transaction handling, it doesn't work then (a) check what is in the infModel.getDeductionsModel() and (b) try with an in-memory dataset.

Dave



Re: Jena TDB and JenaRules execution

Posted by Dave Reynolds <da...@gmail.com>.
On 25/11/15 12:24, Iturraspe Barturen, Urtza wrote:
> Hi everybody,
>
> I am trying to execute a Jena Rule using Jena TDB.
> I have already expertise using Jena rules in Jena SDB but now I was trying using TBD.
>
> The rule inserts an instance in an ontology. The content of jena.rule file has this rule:
>
> @prefix pi: <http://www.co-ode.org/ontologies/pizza/2005/10/18/pizza.owl#>. @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. [AddingPizza: -> (pi:PizzaXXXX rdf:type pi:Pizza) ]
>
>
>
> The code that I use is the following. Perhaps is something is wrong,  please anyone can help me ?

You haven't said what the problem is.

> Model jenaModel=datasetJena.getDefaultModel();
>
> Reasoner reasoner = new GenericRuleReasoner(Rule.rulesFromURL("file:./src/jena.rule"));
>
> InfModel infModel = ModelFactory.createInfModel(reasoner, jenamodel);
>
> infModel.prepare();

Need to start the transaction:

  datasetJena.begin(ReadWrite.WRITE) ;
  try {

> jenamodel.add(infModel);

This has different spelling to the above so suggests this is not 
actually the code you are running.

With correct spelling this should work but causes redundant adds, if you 
are only using forward rules then better to use:

   jenaModel.add( infModel.getDeductionsModel() );

so as to only add new statements.

> datasetJena.commit();

  } finally {
    datasetJena.end() ;
  }

> TDB.sync(jenamodel);

Not necessary if you are using transactions.

> infmodel.close();
>
> datasetJena.commit();
>
> datasetJena.end();

No need to call these again, you did the commit earlier.

If, with fixed transaction handling, it doesn't work then (a) check what 
is in the infModel.getDeductionsModel() and (b) try with an in-memory 
dataset.

Dave