Thanks Andrea

I'm getting RuleStoreImpl in my bundle using SCM; ie by declaring

@Reference
protected RuleStore m_ruleStore

Is that ok?

(this is later cast to RuleStoreImpl)

I'll try giving the rules different names; and try the toKReSSyntax method
also and get back to you.

Thanks
Steve

> -----Original Message-----
> From: Andrea Giovanni Nuzzolese [mailto:[email protected]] 
> Sent: 09 February 2012 14:18
> To: Stephen Bayliss; [email protected]
> Subject: Re: NPE on refactoring using Java API
> 
> 
> Hi Stephen,
> 
> It may depends on the constructor you use for initializing 
> the RuleStoreImpl. If you used the default constructor 
> RuleStoreImpl(), it is intended to be used by the OSGI 
> environment with Service Component Runtime support (it is 
> suggested in the javadoc). You might use 
> RuleStoreImpl(Dictionary<String, Object>) also with an empty 
> but not null dictionary. About the rule syntax, you should 
> specify different names for each rule. I mean something like 
> the following
> 
>       ...
>       String rule1 = "Rule1[ has(<" + ns + "x" + ">, ?s, ?o) 
> -> has(<" + ns +,     "y" + ">, ?s, ?o)  ] ";
>       String rule2 = "Rule2[ has(<" + ns + "a" + ">, ?s, ?o) 
> -> has(<" + ns +,     "b" + ">, ?s, ?o)  ] ";
>       String rule3 = "Rule3[ has(<" + ns + "c" + ">, ?s, ?o) 
> -> has(<" + ns +,     "d" + ">, ?s, ?o)  ] ";
>       ...
> 
> Finally, in the last System.out.println you used 
> rule.getRule(). I noticed how that method does not return 
> anything and should be removed (I have just opened an issue 
> on Jira [1] about that). Use, instead toKReSSyntax() which 
> returns a string containing the rule in the native syntax.
> 
> Andrea
> 
> 
> [1] https://issues.apache.org/jira/browse/STANBOL-489
> 
> 
> On Feb 9, 2012, at 1:08 PM, Stephen Bayliss wrote:
> 
> > Hi Andrea
> > 
> > I'm still not getting this to work, maybe I'm missing something 
> > obvious...
> > 
> > My test code:
> > 
> > public void rulesAndRecipesTest() throws NoSuchRecipeException {
> >    String ns = "http://www.example.org/dummy/ns#";;
> >    String rule1 = "Rule[ has(<" + ns + "x" + ">, ?s, ?o) -> 
> has(<" + 
> > ns + "y" + ">, ?s, ?o)  ] ";
> >    String rule2 = "Rule[ has(<" + ns + "a" + ">, ?s, ?o) -> 
> has(<" + 
> > ns + "b" + ">, ?s, ?o)  ] ";
> >    String rule3 = "Rule[ has(<" + ns + "c" + ">, ?s, ?o) -> 
> has(<" + 
> > ns + "d" + ">, ?s, ?o)  ] ";
> > 
> >    String recipeID = "http://www.example/org/dummy/recipe";;
> >    IRI recipeIRI = IRI.create(recipeID);
> > 
> >    boolean ok = m_ruleStore.addRecipe(recipeIRI, "example recipe");
> >    if (!ok) System.out.println("Failed to create recipe");
> > 
> >    Recipe recipe = m_ruleStore.addRuleToRecipe(recipeID, rule1);
> >    recipe = m_ruleStore.addRuleToRecipe(recipeID, rule2);
> >    recipe = m_ruleStore.addRuleToRecipe(recipeID, rule3);
> > 
> >    System.out.println("rules in recipe: " + 
> > recipe.getkReSRuleList().size());
> > 
> >    recipe = m_ruleStore.getRecipe(recipeIRI);
> >    for (Rule rule : recipe.getkReSRuleList()) {
> >        System.out.println("rule: " + rule.getRuleName() + ": " + 
> > rule.getRule());
> >    }
> > }
> > 
> > And the output on running this is:
> > 
> > -----
> > rules in recipe: 2
> > rule: http://kres.iks-project.eu/ontology/meta/variables#Rule: null
> > -----
> > 
> > Thanks
> > Steve
> > 
> >> -----Original Message-----
> >> From: Stephen Bayliss [mailto:[email protected]]
> >> Sent: 09 February 2012 10:31
> >> To: [email protected]
> >> Subject: RE: NPE on refactoring using Java API
> >> 
> >> 
> >> Hello Andrea
> >> 
> >> Many thanks for this - I'm re-writing this bit of code to use
> >> the API as you have suggested, I'll let you know how it goes.
> >> 
> >> Out of interest - what is the intended usage of eg AddRule?
> >> Or is that not part of the API and therefore should be ignored...
> >> 
> >> Thanks
> >> Steve
> >> 
> >>> -----Original Message-----
> >>> From: Andrea Giovanni Nuzzolese [mailto:[email protected]]
> >>> Sent: 09 February 2012 10:01
> >>> To: Stephen Bayliss; [email protected]
> >>> Subject: Re: NPE on refactoring using Java API
> >>> 
> >>> 
> >>> I Stephen,
> >>> 
> >>> do not directly use methods of the classes AddRule and AddRecipe. 
> >>> Instead, use methods of the RuleStore. You can create a 
> recipe with 
> >>> the method addRecipe(IRI, String), where the first 
> argument is the 
> >>> recipe ID and the second is a description of the recipe.
> >>> Then you can  add rules to the recipe created with the method 
> >>> addRuleToRecipe(String, String), where the first argument is 
> >>> the ID of the recipe to which you want to add the rule and 
> >>> the second argument is the rule itself.
> >>> 
> >>> I hope it helps.
> >>> 
> >>> Best.
> >>> Andrea
> >>> 
> >>> On Feb 8, 2012, at 5:43 PM, Stephen Bayliss wrote:
> >>> 
> >>>> Hi
> >>>> 
> >>>> I'm getting an NPE when refactoring using the Java API:
> >>>> 
> >>>> java.lang.NullPointerException
> >>>>      at
> >>>> 
> >>> 
> >> 
> org.apache.stanbol.rules.refactor.impl.RefactorerImpl.ontologyRefacto
> >> r
> >>>> ing(Re
> >>>> factorerImpl.java:284)
> >>>> 
> >>>> This is something that used to work with an old svn
> >>> revision, current
> >>>> rev is 1236695.
> >>>> 
> >>>> I'm creating a Recipe with some rules, following the code
> >>> in the REST
> >>>> API as an example.
> >>>> 
> >>>> My Bundle is getting the rule store with
> >>>> 
> >>>> @Reference
> >>>> protected RuleStore m_ruleStore;
> >>>> 
> >>>> I'm adding rules to the store with:
> >>>> 
> >>>> AddRule adder = new AddRule(m_ruleStore);
> >>> adder.addRule(ruleIRI, rule,
> >>>> description);
> >>>> 
> >>>> (which is returning true)
> >>>> 
> >>>> I'm adding the recipe by creating a Vector<IRI> ruleIris and 
> >>>> populating with the rule IRIs, then
> >>>> 
> >>>> AddRecipe recipeAdder = new AddRecipe(m_ruleStore); 
> >>>> recipeAdder.addRecipe(recipeIri, ruleIris, "my rule");
> >>>> 
> >>>> (returns true)
> >>>> 
> >>>> and
> >>>> m_ruleStore.saveOntology().
> >>>> 
> >>>> I can query for the recipe and list the rules fine using a 
> >>>> GetRecipe#getAllRecipes();
> >>>> 
> >>>> However, on refactoring with a Refactorer, got in my 
> bundle using:
> >>>> 
> >>>> @Reference
> >>>> Refactorer m_refactorer;
> >>>> 
> >>>> Then
> >>>> 
> >>>> m_refactorer.ontologyRefactoring(outputIri, inputIri, recipeIri)
> >>>> 
> >>>> But this is throwing the NPE above.
> >>>> 
> >>>> (I notice it is using
> >>>> RuleStore#getRecipe  and then Recipe#getkReSRuleList
> >>>> And if I try to get the recipes using m_ruleStore.listRecipes(); 
> >>>> this returns Null, which is odd...)
> >>>> 
> >>>> So how do I get this working?  There seem to be "two APIs"
> >>> in a sense,
> >>>> the AddRule/GetRule etc stuff and the methods directly on the 
> >>>> RuleStore.
> >>>> 
> >>>> Thanks
> >>>> Steve
> >>> 
> >>> 
> >>> 
> >> 
> >> 
> > 
> 
> --
> Andrea Giovanni Nuzzolese
> Semantic Technology Laboratory (STLab)
> Institute for Cognitive Science and Technology (ISTC)
> National Research Council  (CNR)
> Via Nomentana 56, Roma - Italy
> 
> 
> 
> 
> 
> 
> 
> 

Reply via email to