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.?

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/ontologies/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,bestcat,(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_MEM);
>>  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