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

Reply via email to