Yes, that would be the easiest solution. > Hello Lorenz, thanks a lot for kind cooperation. > > It means I will have three queries for NetworkingScore, Cryptographyscore > and SEscore? > > On Thu, Jan 5, 2017 at 1:27 PM, Lorenz B. < > [email protected]> wrote: > >> The query I showed returns the highest value for one subject as I said. >> Executing three SPARQL queries should therefore be rather simple. >> >> PREFIX ex: <http://example.com/ns/> >> SELECT (MAX(?score) AS ?topScore) >> WHERE >> { >> ?student ex:CryptographyScore ?score . >> } >> >> So what's wrong with this query? If you also want to have the student(s) >> with this score, try >> >> PREFIX ex: <http://example.com/ns/> >> SELECT ?student ?topScore WHERE { >> >> #-- Find the high score in the subject >> { >> >> SELECT (MAX(?score) AS ?topScore) WHERE >> { >> ?student ex:CryptographyScore ?score . >> } >> >> } >> >> #-- Then find the student(s) that had that high score in the subject >> ?student ex:CryptographyScore ?topScore . >> >> } >> >> Or you can use SPARQL 1.1 aggregate function SAMPLE. >> >> Otherwise you can also use a single SPARQL query and put, but it looks >> like you have to learn SPARQL and we're doing your homework - this is >> obviously the wrong direction when you want to lean something about >> Semantic Web... >> >> By the way, I wouldn't create a data property for each subject but >> attach the subject to the score. But that's how I would do it and out of >> scope here. >> >> >> >> >>> Let me explain : There are 4 students, having scores of three subjects >>> (1) Bob: Cryptographyscore 50, SE score 58, *Networking score 70* >>> (2) Jim: *Cryptographyscore 86*, SEscore 55, Networkingscore 48 >>> (3) Smith: Cryptographyscore 78, *SEscore 79*, Networkingscore 60 >>> (4) David: Cryptographyscore 50, SEscore 66, Networkingscore 55 >>> >>> I want the highest score of each category any user has scored, like in >>> cryptography the highest score is 86 scored by Jim, in SE highest score >> is >>> 79 scored by Smith and so on. >>> >>> So I want the maximum score in each of the three categories, which are >> our >>> data properties in the rdf file and this is why I thought we should use >>> three variables for Max. >>> >>> Lorenz still I achieve this with the query you and Rob have suggested? >>> >>> Thank you >>> >>> >>> On Wed, Jan 4, 2017 at 6:38 PM, Lorenz Buehmann < >>> [email protected]> wrote: >>> >>>>> Hello Rob, >>>>> >>>>> We are in a group and we discussed it. >>>>> >>>>> We have three data properties , CryptographyScore, SoftwareEngineering >>>>> score and NetworkingScore and we need the maximum of these three scores >>>> for >>>>> a student. >>>>> >>>>> Can we do it like this >>>>> >>>>> SELECT ?student (MAX(?score1, ?score2, ?score3) AS ?topScore) >>>>> >>>> No, Rob almost showed the solution. It's not allowed and I also don't >>>> see why you want to use 3 variables in the MAX function. >>>> >>>> Again, we assume that you want to get the maximum score among all >>>> students for a particular subject! >>>> >>>> That means, the query would be (for CryptographyScore here only) >>>> >>>> PREFIX ex: <http://example.com/ns/> >>>> SELECT (MAX(?score) AS ?topScore) >>>> WHERE >>>> { >>>> ?student ex:CryptographyScore ?score . >>>> } >>>> >>>> >>>> >>>> You asked the same question on Stackoverflow by the way and I told you >>>> there to use SPARQL qith aggregate functions. I assume that you're a >>>> group of CS students, so you should know about SQL which also supports >>>> GROUP BY + aggregate functions. The principle is the same. >>>>> On Wed, Jan 4, 2017 at 5:05 PM, Rob Vesse <[email protected]> >> wrote: >>>>>> Most likely not >>>>>> >>>>>> You seem to be running into the XY problem a lot ( >> http://xyproblem.info >>>> ) >>>>>> You keep asking how to do things with rules for which rules are not >>>> really >>>>>> designed. And from some of your responses it sounds like the problems >>>>>> you’re trying to solve don’t actually need rules at all. >>>>>> >>>>>> For example finding the top score for a student would be much more >>>> easily >>>>>> done with a SPARQL query although from what little I have seen of your >>>> data >>>>>> model it looks like it would make it even that quite awkward. But in >>>>>> general terms something like the following would work: >>>>>> >>>>>> PREFIX ex: <http://example.com/ns/> >>>>>> SELECT ?student (MAX(?score) AS ?topScore) >>>>>> WHERE >>>>>> { >>>>>> ?student ex:score ?score . >>>>>> } >>>>>> GROUP BY ?student >>>>>> >>>>>> Rob >>>>>> >>>>>> On 04/01/2017 13:25, "javed khan" <[email protected]> wrote: >>>>>> >>>>>> Thanks Dave and Lorenz for your response. >>>>>> >>>>>> What if we have entered the score for a student in Cryptography >> and >>>>>> SoftwareEngineering and did not entered for Networking subject and >>>>>> stored >>>>>> something like this in our owl file: >>>>>> >>>>>> Student1 >>>>>> >>>>>> Name: Bob >>>>>> CryptographyScore: 60 >>>>>> SoftwareEngineeringScore: 80 >>>>>> //NetworkingScore, not mentioned here >>>>>> >>>>>> Then will the above rule fires? >>>>>> >>>>>> >>>>>> >>>>>> On Wed, Jan 4, 2017 at 11:35 AM, Lorenz B. < >>>>>> [email protected]> wrote: >>>>>> >>>>>> > Inline comments: >>>>>> > > I have three subjects marks for a student. >>>>>> > > Cryptography, Networking, Software Engineering with different >>>>>> marks for >>>>>> > > each student. >>>>>> > > I want to calculate in which subject a student got maximum >> marks >>>>>> using >>>>>> > Jena >>>>>> > > rule and will set that subject as HighScoreSubject of the >>>> student ( >>>>>> > > HighScoreSubject is data propety) whose values will be one of >>>>>> these three >>>>>> > > subjects. >>>>>> > > >>>>>> > > Is this rule correct to get the required result ( I am asking >>>> this >>>>>> > because >>>>>> > > I am not getting the result required) >>>>>> > Without seeing the data, it's always difficult to say if >>>> something is >>>>>> > correct or not. Sample data makes things easier. >>>>>> > And without knowing how you apply the rules (in a correct >> syntax) >>>>>> it's >>>>>> > even harder. That means, it's always good to show the relevant >>>> code. >>>>>> > > >>>>>> > > ?x rdf:type std:Student + ?x std:CryptographyScore ?score1 + >> ?x >>>>>> > > std:NetworkingScore ?score2 + ?x std:SEScore ?score3 + >>>>>> > > greaterThan(?score1,?score2), greaterThan(?score1, ?score3) >> --> >>>>>> > > ?x std:HighScoreSubject std:Cryptography >>>>>> > > >>>>>> > This rule covers only the case when the score for Cryptography >> is >>>> the >>>>>> > highest. If your data doesn't contain a student that matches the >>>>>> rule, >>>>>> > nothing will happen. >>>>>> > >>>>>> > >>>>>> > Cheers, >>>>>> > Lorenz >>>>>> > >>>>>> > -- >>>>>> > 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 >> >> -- Lorenz Bühmann AKSW group, University of Leipzig Group: http://aksw.org - semantic web research center
