This query is syntactically correct once you add the prefix declaration
in front of the query. I used ex: here but indeed I don't know the
namespace and omitted the prefix declaration for brevity. I don't
understand what you meant with the usage of a comma.
> Hi Lorenz, I am asking about the query you provided to be used in Jena
> syntax like below I used in Jena
>
> SELECT ?student ?topScore WHERE {
> {SELECT (MAX(?score) AS ?topScore) WHERE
> {?student ex:CryptographyScore ?score .
> } }
> ?student ex:CryptographyScore ?topScore .}
>
>
> ___________________________________________________________
>
> String queryString= "PREFIX mo:<http://www.semanticweb.org/t/ont#> "+
> "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
>
> "SELECT ?std " +
> " WHERE { ?std rdf:type std:Student }";
>
> On Sat, Jan 7, 2017 at 3:17 PM, Lorenz B. <
> [email protected]> wrote:
>
>> Which query do you mean and which error do you get? There is no need for
>> a comma when using a nested query
>>
>>> 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
>>>>
>>>>
>> --
>> 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