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