Hi Stephen,

firstly, thanks a lot for your effort and your suggestions.
My comments are in the lines.

Andrea

> a) as there seems to be a uniqueness requirement on rule identifiers,
> wouldn't it make sense that adding a rule with the same identifier as an
> existing rule should throw an exception?

It makes a lot of sense. I will add that. 

> b) Recipe identity is by IRI (and also ID which is the string form); Rules
> seem to use string identifiers (specified in the rule itself) with generated
> IRIs (eg http://kres.iks-project.eu/ontology/meta/variables#Rule3 for
> Rule3). Given the uniqueness constraint I think overall management of these
> would be easier if IRIs could be specified as the identifiers directly
> (maybe this is possible already?)

No, it is not possible yet. I think that we could manage identifiers with two 
addRule methods:
- addRule(IRI, String), where the first parameter is the ID to associate to the 
rule and the second parameter is
the plain rule, e.g., "[body -> head]";
- addRule(String), where the parameter should provide both the ID and the rule 
in the classic way, e.g. "rule[body -> head]"

I am wondering if it could be useful in the second case to accept also plain 
rules without IDs and associate them blank nodes.

> c) I tested removing a rule using the .removeRule(Rule) method (works fine)
> - for consistency would it make sense also to have methods that remove rules
> based on identifiers/IRIs?  (No specific need for this though; just a
> suggestion)

Yes, I will add it.

> I also tested the RuleStore methods .listRecipes() and .listIRIRecipes() -
> both of these are returning null after creating the recipe with the three
> rules.

I am going to investigate those issues.

> Now that adding recipes and rules is working fine, I'm proceeding to test
> our existing refactoring code; I'll let you know how I get on.
> 
> Thanks for your assistance with this
> Steve
> 
> 
>> -----Original Message-----
>> From: Andrea Giovanni Nuzzolese [mailto:[email protected]] 
>> Sent: 09 February 2012 15:06
>> To: Stephen Bayliss; [email protected]
>> Subject: Re: NPE on refactoring using Java API
>> 
>> 
>> Hi Stephen,
>> 
>> yes, the reference to the RuleStore you did in your bundle is ok. 
>> Sorry, I missed that in previous emails.
>> 
>> I am here for any further developments.
>> 
>> Andrea
>> 
>> On Feb 9, 2012, at 3:57 PM, Stephen Bayliss wrote:
>> 
>>> 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