Hello Lorenz, usually we use " " signs and + sign inside our query in Jena syntax
"SELECT ?student " + " WHERE { ?student rdf:type std:Student}"; //In simple query But that query has two select statements and where clause, I am confused where to put the " " and + signs in the query. I have tried this but it gives me syntax error, * "SELECT ?student ?topScore " +* * " WHERE { {select (max(?score) as ?highScore)" + "WHERE { ?student std:Englishscore ?score + "* *" }" +* *" } " +* * "?student std:Englishscore ?highScore" * * "}";* On Sat, Jan 7, 2017 at 5:30 PM, Lorenz B. < buehm...@informatik.uni-leipzig.de> wrote: > 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. < > > buehm...@informatik.uni-leipzig.de> 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. < > >>> buehm...@informatik.uni-leipzig.de> 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 <javedbtk...@gmail.com> > >>>> 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. <buehm...@informatik.uni- > >>>>>> 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. < > >>>>>>>> buehm...@informatik.uni-leipzig.de> 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 < > >>>>>>>>>> buehm...@informatik.uni-leipzig.de> 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 < > rve...@dotnetrdf.org > >>>>>>>>> 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" <javedbtk...@gmail.com> > >> 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. < > >>>>>>>>>>>>> buehm...@informatik.uni-leipzig.de> 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 > >