As Rob pointed out, SPARQL is a good alternative. And using SPARQL CONSTRUCT is an alternative to produce new triples.
> Thanks Rob, do you really think this will solve my problem.? I have score > values for three subjects stored in owl file. > > I need to point out the maximum score plus the subject(Semantic web, > Robots) in which he got maximum score. And finally assign the maximum > scored subject to the object property "favoriteSubject" > > Student1 favoriteSubject Semantic web (for example). > > Regards > > > On Tue, Sep 27, 2016 at 6:39 AM, Rob Vesse <[email protected]> wrote: > >> Rules are primarily intended for making logical inferences. What are you >> appear to be trying to do is ask questions of the data for which a query >> language like SPARQL is much better suited e.g. >> >> PREFIX std: <http://yourdomain.com/ns#> >> SELECT ?student ?subject ?bestScore >> WHERE >> { >> { >> SELECT ?student MAX(?score) AS ?bestScore >> WHERE >> { >> ?student a std:Student ; >> std:hasResult ?result . >> ?result std:hasScore ?score >> } GROUP BY ?student >> } >> ?student std:hasResult ?result . >> ?result std:inSubject ?subject >> } >> >> I would suggest reading a tutorial such as https://www. >> cambridgesemantics.com/semantic-university/sparql-by-example >> >> This is just one such possible query and it makes assumptions about the >> structure of the data. But you should be able to create a query that works >> your datamodel. >> >> Failing that you can just use the Model/OntModel APIs directly to extract >> the relevant data and compute the calculation in Java. Sometimes people >> forget that they are working in a programming language and expect a library >> to magically do everything for them when what they actually needed to do is >> write some code for themselves! >> >> Rob >> >> On 27/09/2016 12:22, "javed khan" <[email protected]> wrote: >> >> Lorenz, any alternative way? I mean if there is any other rule where >> we can >> accomplish things like this? >> >> >> On Tue, Sep 27, 2016 at 2:56 AM, Lorenz B. < >> [email protected]> wrote: >> >> > >> > >> > > If we want to get the maximum score student got among three >> subjects >> > > (Robotics, Semantic Web, Research Methods) using Jena rules. >> > > >> > > ?x rdf:type std:Student + ?x std:RoboticsScore ?Rscore + ?x >> > > std:SemanticWebScore ?SMscore + ?x ResearchMethodScore ?RMscore >> > > + max(Rscore,SMscore,RMscore,maximun) THEN ???? >> > > >> > > I have two questions here: >> > > >> > > 1) Is the max(Rscore,SMscore,RMscore,maximun) calculate max and >> assign >> > it >> > > to the (fourth)maximum variable? >> > Documentation is here: >> > https://jena.apache.org/documentation/inference/#builtin-primitives >> > >> > max(?a, ?b, ?c) takes two arguments ?a,?b and assigns the value to ?c >> > > 2) How would the THEN part be? *If these values give me max, then >> how >> > can I >> > > know that this maximum value belongs to Robotic, Semantic web or >> Research >> > > methods?* >> > Not possible, as max only assigns the maximum value to the variable >> as >> > you already know. >> > > *I want to determine "Favorite subject" of student so if a student >> got >> > max >> > > score in a subject, that will be his/her favorite subject. * >> > > >> > -- >> > Lorenz Bühmann >> > AKSW group, University of Leipzig >> > Group: http://aksw.org - semantic web research center >> > >> > >> >> >> >> >> >> -- Lorenz Bühmann AKSW group, University of Leipzig Group: http://aksw.org - semantic web research center
