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