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