Thank you Lorenz, Best regards
On Sun, Jan 15, 2017 at 7:57 PM, Lorenz B. < [email protected]> wrote: > > > > 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() > Trying it out is not possible for you? > > The method getPropertyValue does exactly what is written in the Javadoc > [1], nothing more nothing less. > That means, it returns the value for the given property and any object > property is indeed a property. Again, Javadoc is the first entry point > for developers [2] > > [1] > https://jena.apache.org/documentation/javadoc/jena/ > org/apache/jena/ontology/OntResource.html#getPropertyValue-org.apache. > jena.rdf.model.Property- > [2] > https://jena.apache.org/documentation/javadoc/jena/ > org/apache/jena/ontology/ObjectProperty.html > > > > 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); > >>>>>> } > >>>>>> > >>>>>> > >>>>>> > -- > Lorenz Bühmann > AKSW group, University of Leipzig > Group: http://aksw.org - semantic web research center > >
