Thanks a lot Lorenz, yes the query you provided perfectly works. Kindly one last cooperation, I have never tried nested queries in Jena code and it gives me error, so if you provide the correct syntax i-e where to use the commas and where not?
Thanks again. Regards On Fri, Jan 6, 2017 at 5:23 PM, Lorenz B. < [email protected]> wrote: > > > > This query now display both student and highscore > > > > select ?subject ?student ?highScore where { > > {select ?subject (max(?score) as ?highScore) { ?student ont:Englishsscore > > ?score > > } > > group by ?subject > > } > > ?student ont:Englishscore ?highScore > > } > Doesn't make sense. Don't copy answers from Stackoverflow if the data > doesn't match the suggested solution by Joshua Taylor! You're grouping > by a variable ?subject that is nowhere assigned in the query. > > I already gave you the alternative query yesterday in one of my > responses. Would be good if you read them carefully and also try to > understand what's happening there. > > > > On Fri, Jan 6, 2017 at 4:39 PM, javed khan <[email protected]> > wrote: > > > >> Hi Lorenz, I uses this > >> > >> SELECT (max(?score) as ?highScore) > >> WHERE { ?std ont:Englishscore ?score } > >> > >> And it gives me the highscore of subject English as 77 > >> > >> When I use this > >> > >> SELECT ?std (max(?score) as ?highScore) > >> WHERE { ?std ont:Englishscore ?score } GROUP BY ?std > >> > >> It gives me all the students with the scores like: > >> Jim 60 > >> Kane 77 > >> Smith 57 etc > >> > >> I want result like *Kane 77* > >> > >> > >> > >> On Fri, Jan 6, 2017 at 1:45 PM, Lorenz B. <[email protected] > >> leipzig.de> wrote: > >> > >>> 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 > >>> > >>> > -- > Lorenz Bühmann > AKSW group, University of Leipzig > Group: http://aksw.org - semantic web research center > >
