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