Hi Dave, thanks a lot it works and I can see BestCategory as object
property.

Now, myIndividual.getPropertyValue() also gets the value of Object
property? Because I could not found something like
 myIndividual.getObjectPropertyValue()

Again thank you.

On Sat, Jan 14, 2017 at 10:00 PM, Sidra shah <[email protected]> wrote:

> Yes you are right. I think the rule is Ok, Jena code is Ok but the problem
> is in the ontology part i-e data property/object property.
>
> Let me choose BestCategory as object property and will make its domain
> User class and range as class Category.
> Category class have three members, that is catPhysics, catChemistry and
> catGeography.
> I will let you know the outcome.
>
> Thanks again Dave,
>
> Kind regards
>
> On Sat, Jan 14, 2017 at 9:29 PM, Dave Reynolds <[email protected]>
> wrote:
>
>> On 14/01/17 18:22, Sidra shah wrote:
>>
>>> Thank you Dave for such a detailed reply. Actually you got my problem,
>>> but
>>> I have taken BestCategory as data property and the problem which bothered
>>> me is I want the user BestCategory as a data or object property.
>>> The main idea behind this is I want the value of this property for
>>> further
>>> processing.
>>> For instance, I want if BestCategory==Physics
>>> Then do something.
>>>
>>> Should I take BestCategory as Object property? Do you suggest it.?
>>>
>>
>> In OWL a property can only be a DatatypeProperty or an ObjectProperty but
>> not both. So you have to choose.
>>
>> In general in OWL modelling it is best to use symbols (i.e. URIs) for
>> concepts like "Physics" and so BestCategory (or bestCategory) should be an
>> ObjectProperty.
>>
>> You are completely free choose a different style and decide you will use
>> strings and so make bestCategory an DatatypeProperty.
>>
>> Just be consistent in how you declare it and how you use it.
>>
>> And none of this has anything to do with Jena or with Jena rules!
>>
>> Dave
>>
>>
>>> Kind regards
>>>
>>> On Sat, Jan 14, 2017 at 9:08 PM, Dave Reynolds <
>>> [email protected]>
>>> wrote:
>>>
>>> Hi Sidra,
>>>>
>>>> You have tried to explain your problem but the example is not minimal
>>>> (it
>>>> has elements in that aren't used) and isn't complete (no data, no
>>>> minimal
>>>> ontology, code doesn't generate any output or test any assertions) and
>>>> it's
>>>> not clear what your problem is.
>>>>
>>>> I'm not clear what you mean by "property not in the data property
>>>> assertion but in the Annotations". I assume are referring to the
>>>> Protege UI
>>>> which in turn suggests that your ontology doesn't match your example
>>>> code.
>>>> If that's the case then you just need to fix your ontology - nothing to
>>>> do
>>>> with jena or jena rules or this list.
>>>>
>>>> In the interests of trying to explain for you and Neha what's needed
>>>> then
>>>> here's your code with some of the unnecessary bits removed and some
>>>> output
>>>> code added. I've also changed the name
>>>> #BestCategory#Physics to #BestCategory_Physics because having a #
>>>> character in your local name is really confusing. But I've not fixed
>>>> any of
>>>> the other style issues with the code or ontology names.
>>>>
>>>>
>>>>>>>  OntModel model
>>>>    = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
>>>>   InputStream in = FileManager.get().open("data/test-ont.ttl");
>>>>   model.read(in, "", "Turtle");
>>>>   String ns="http://www.semanticweb.org/t/ontologies/2016/7/myOWL#";;
>>>>   OntProperty bestcat=model.getOntProperty(ns+ "BestCategory");
>>>>
>>>>   //Then rule
>>>>   String rule ="[rule1: ( ?x http://www.semanticweb.org/t/o
>>>> ntologies/2016/7/myOWL#Physics_Preferred_Category  ?cat1 )" +
>>>>         "( ?x http://www.semanticweb.org/t/o
>>>> ntologies/2016/7/myOWL#Chem_Pr
>>>> eferred_Category  ?cat2 )" +
>>>>         "greaterThan(?cat1,?cat2)" +
>>>>          " -> (?x http://www.semanticweb.org/t/o
>>>> ntologies/2016/7/myOWL#BestCategory http://www.semanticweb.org/t/o
>>>> ntologies/2016/7/myOWL#BestCategory_Physics   )]";
>>>>
>>>>   Reasoner reasoner2 = new GenericRuleReasoner(Rule.parseRules(rule));
>>>>   InfModel infModel = ModelFactory.createInfModel(reasoner2, model);
>>>>   for (StmtIterator i = infModel.listStatements(null,b
>>>> estcat,(RDFNode)null);
>>>> i.hasNext();) {
>>>>      Statement s = i.next();
>>>>      System.out.println( String.format("%s has best category %s",
>>>>           s.getSubject().getLocalName(),
>>>>           s.getObject().asResource().getLocalName()) );
>>>>   }
>>>>   infModel.write(System.out, "Turtle");
>>>> <<<
>>>>
>>>> Now to run this we need an ontology but we only need to include those
>>>> declarations used in the sample code (stripping out the bits your don't
>>>> need is part of creating a minimal example). We also need test data to
>>>> trigger the rule but for a minimal example, that might as well go in the
>>>> ontology. So an example minimal "test-ont.ttl" file might be:
>>>>
>>>>
>>>>>>> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
>>>> @prefix owl: <http://www.w3.org/2002/07/owl#> .
>>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>>>> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
>>>> @prefix ex:  <http://www.semanticweb.org/t/ontologies/2016/7/myOWL#> .
>>>>
>>>> ex:User a owl:Class .
>>>> ex:BestCategory a owl:ObjectProperty .
>>>>
>>>> ex:Category a owl:Class .
>>>> ex:BestCategory_Physics a ex:Category .
>>>>
>>>> ex:Physics_Preferred_Category a owl:DatatypeProperty .
>>>> ex:Chem_Preferred_Category a owl:DatatypeProperty .
>>>>
>>>> ex:fred a ex:User;
>>>>     ex:Physics_Preferred_Category 3 ;minimal
>>>>     ex:Chem_Preferred_Category 1 .
>>>> <<<
>>>>
>>>> That breaks lots of OWL naming conventions but at least it matches your
>>>> code.
>>>>
>>>> If we run the sample code now then we see that rule fires correctly and
>>>> outputs:
>>>>
>>>>     fred has best category BestCategory_Physics
>>>>
>>>> and that the resulting complete model is displayed as
>>>>
>>>>
>>>>>>> @prefix ex:    <http://www.semanticweb.org/t/
>>>> ontologies/2016/7/myOWL#> .
>>>> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>>>> @prefix owl:   <http://www.w3.org/2002/07/owl#> .
>>>> @prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
>>>> @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
>>>>
>>>> ex:fred  a                             ex:User ;
>>>>         ex:BestCategory                ex:BestCategory_Physics ;
>>>>         ex:Chem_Preferred_Category     1 ;
>>>>         ex:Physics_Preferred_Category  3 .
>>>>
>>>> ex:BestCategory  a  owl:ObjectProperty .
>>>>
>>>> ex:BestCategory_Physics
>>>>         a       ex:Category .
>>>>
>>>> ex:Chem_Preferred_Category
>>>>         a       owl:DatatypeProperty .
>>>>
>>>> ex:User  a      owl:Class .
>>>>
>>>> ex:Physics_Preferred_Category
>>>>         a       owl:DatatypeProperty .
>>>>
>>>> ex:Category  a  owl:Class .
>>>>
>>>>>
>>>>>>>
>>>> That looks correct (or at least looks like it does what you say you are
>>>> trying to do). If I load that into protege then I can see the individual
>>>> fred and the ex:BestCategory property is shown as being a property
>>>> assertion not an axiom.
>>>>
>>>> So on the face of it there is nothing wrong.
>>>>
>>>> Now if that's not enough to help you solve your problem then create a
>>>> similarly complete minimal example which does show your problem. I
>>>> expect
>>>> your ontology will be a lot different from my example. However, for the
>>>> sake of debugging your rule most of it won't be relevant so you should
>>>> be
>>>> able to cut it down to something of comparable size to the above, in
>>>> which
>>>> case it is then possible to post it inline in an email message for
>>>> people
>>>> to look at. If you do this please make sure it really is minimal and
>>>> complete. Also for preference use Turtle (not RDF/XML) syntax because
>>>> that
>>>> is so much easier to read and more compact.
>>>>
>>>> Dave
>>>>
>>>>
>>>> On 14/01/17 16:07, Sidra shah wrote:
>>>>
>>>> Hello All, I have a problem, very same to Neha. I was waiting some
>>>>> answer
>>>>> will come and I will get help but I think it did not solve.
>>>>> I have quiz game for three categories(subjects) Physics, Chemistry and
>>>>> Geography. User have to select one category and questions of that
>>>>> category
>>>>> will come.  When user select a category Physics, for instance, 1 will
>>>>> be
>>>>> saved in a property Physics_Preferred_Category. When user select second
>>>>> time Physics when login to the system, 2 will be saved.
>>>>> I have designed a rule, shown below, to see which category user has
>>>>> selected most of the time and will consider that BestCategory for that
>>>>> user. The problem which I have currently is it saved the BestCategory
>>>>> property not in the data property assertion but in the Annotations.
>>>>>
>>>>> I have tried to include possible code but not ontology. If it is
>>>>> allowed I
>>>>> will paste the screen shot of my properties.
>>>>>
>>>>>
>>>>> OntModel model=ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_M
>>>>> EM);
>>>>>  InputStream in =FileManager.get().open("F://final.owl");
>>>>>             if (in==null) {
>>>>>                 throw new IllegalArgumentException( "File: " +  " not
>>>>> found");
>>>>>             }           model.read(in,"");
>>>>>              String ns="http://www.semanticweb.org
>>>>> /t/ontologies/2016/7/myOWL#";
>>>>>  OntClass dil = model.getOntClass(ns + "DiligentUser");
>>>>>              OntClass avgr = model.getOntClass(ns + "AverageUser");
>>>>>  OntProperty bestcat=model.getOntProperty(ns+ "BestCategory");
>>>>>  Individual indiv = user1.createIndividual(ns + name); //name comes
>>>>> from a
>>>>> text field
>>>>> //Then rule
>>>>>
>>>>> String rule ="[rule1: ( ?x http://www.semanticweb.org/t/
>>>>> ontologies/2016/7/myOWL#Physics_Preferred_Category  ?cat1 )" +
>>>>>  "( ?x http://www.semanticweb.org/t/ontologies/2016/7/myOWL#Chem_
>>>>> Preferred_Category  ?cat2 )" +
>>>>>       //   "( ?x http://www.semanticweb.org/t/o
>>>>> ntologies/2016/7/myOWL#Geo_
>>>>> Preferred_Category  ?cat3 )" +
>>>>>       //  "greaterThan(?cat1,?cat2), greaterThan(?cat1,?cat3)"
>>>>>          + " ->  (?x  http://www.semanticweb.org/t/o
>>>>> ntologies/2016/7/myOWL#
>>>>> BestCategory   http://www.semanticweb.org/t/ontologies/2016/7/myOWL#
>>>>> BestCategory#Physics   )]";
>>>>>
>>>>> //in ?cat1, ?cat2 ?cat3 there will be numbers like 1 2 3
>>>>>
>>>>> Reasoner reasoner2 = new GenericRuleReasoner(Rule.parseRules(rule));
>>>>>         InfModel infModel = ModelFactory.createInfModel(reasoner2,
>>>>> model);
>>>>>
>>>>> infModel.listStatements(null,bestcat,(RDFNode)null);
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to