Ehm, no - why? It's a local ontology.

On 07.06.2017 15:04, Aya Hamdy wrote:
> Does the ontology have to be posted online for instance? I found on
> StackOverflow that the URI I assign to the prefix does not have to be a
> real one. Therefore the URI for the PREFIX cv:
> "PREFIX cv:<
> http://www.semanticweb.org/toshiba/ontologies/2017/3/untitled-ontology-6#>"
>   is the one generated by Protege. Did I misunderstand what I read and the
> ontology needs to be posted publically online?
>
> It is just that I think that the problem may be that in the queries the
> PREFIX called cv may be perceived as empty by the code or something.
>
> On Wed, Jun 7, 2017 at 12:58 PM, Aya Hamdy <[email protected]> wrote:
>
>> Sorry about the x, It was a stupid mistake. But it is nit the cause of the
>> null. When I fixed it, the results of even the simplest queries are still
>> nulls.
>>
>> The code is not generating errors though, it is not generating the proper
>> results ...
>>
>> On Tue, Jun 6, 2017 at 9:13 AM, Andy Seaborne <[email protected]> wrote:
>>
>>>
>>> On 06/06/17 00:26, Aya Hamdy wrote:
>>>
>>>> Ok. That sounds reasonable so I will work on breaking down my chain of
>>>> thought into smaller pieces. Thank you so much.
>>>>
>>>> I saw an example online where the query syntax is written as a string on
>>>> Jena. so my query now looks like this:
>>>>
>>> Use
>>>
>>> String.join("\n"
>>>    , "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
>>>    , "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
>>>    , "INSERT {",
>>> ...
>>>    , "}"
>>>    );
>>>
>>> then you will have newlines in the string and parser errors will have
>>> line+column numbers that are useful.
>>>
>>>     Andy
>>>
>>>
>>>
>>>> String queryString=
>>>> "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
>>>> "PREFIX cv:<
>>>> http://www.semanticweb.org/toshiba/ontologies/2017/3/untitle
>>>> d-ontology-6#>"+
>>>> "insert {"+
>>>>     " ?ass cv:recorded_speed ?avg"+
>>>>    "}"+
>>>> "WHERE {"+
>>>>    "SELECT (AVG(?speed) AS ?avg) "+
>>>> "where{"+
>>>>       " ?v rdf:type cv:Vehicle ;"+
>>>>           "cv:vehicleSpeed ?speed;"+
>>>>           " cv:Vehicle_Road ?r;"+
>>>>           "{"+
>>>>
>>>>           "SELECT ?r"+
>>>>           "where{"+
>>>>
>>>>        "?ass rdf:type cv:Avg_Speed_Sensor;"+
>>>>        " cv:avgSpeedSensor_Infrastructure ?r"+
>>>>        "}"+
>>>>    "}"+
>>>>
>>>>
>>>>
>>>>        "}"+"GROUP By ?ass ?avg ?r"+
>>>> "}";
>>>>
>>>> Then, also based on my research, I feed the query string into the parser
>>>> and output the model.
>>>> UpdateAction.parseExecute( queryString, ontologyModel );
>>>> ontologyModel.write( System.out, "TTL" );
>>>> I encountered many errors but managed to get rid of them all. However,
>>>>   based on the output, nothing has changed. speedSensor1 and
>>>> speedSensor2 do
>>>> not have the recorded_speed property added.
>>>>
>>>> Of course, I tried debugging, but I could not get any understanding of
>>>> the
>>>> problem.
>>>>
>>>>
>>>> I tried breaking the query down to smaller bits right down to doing a
>>>> simple select on vehicles:
>>>>
>>>> String query1=
>>>> "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
>>>> "PREFIX cv:<
>>>> http://www.semanticweb.org/toshiba/ontologies/2017/3/untitle
>>>> d-ontology-6#>"+
>>>>
>>>> "Select ?v"+
>>>> "where {"+
>>>> "?v cv:vehicleSpeed ?speed."+
>>>> "}";
>>>>
>>>> Query query = QueryFactory.create(query1);
>>>> QueryExecution qexec= QueryExecutionFactory.create(query,
>>>> ontologyModel);
>>>> try{
>>>> ResultSet results=qexec.execSelect();
>>>> while(results.hasNext()){
>>>> QuerySolution soln=results.nextSolution();
>>>> org.apache.jena.rdf.model.Literal name = soln.getLiteral("x");
>>>> System.out.println(name);
>>>> }
>>>> }finally{
>>>> qexec.close();
>>>> }
>>>> But everything I have tried yields in the result "null".
>>>>
>>>> Can you give me pointers on how I should go about trying to figure out
>>>> the
>>>> problem with the insert function?
>>>> Sorry if my questions are too naive, but I am trying to grasp the
>>>> concepts
>>>> as much as possible.
>>>>
>>>> Best Regards,
>>>> Aya
>>>>
>>>>
>>>>
>>>>
>>>> On Mon, Jun 5, 2017 at 8:32 PM, Andy Seaborne <[email protected]> wrote:
>>>>
>>>> Then find the sensor of interest, and all cars on that given road.
>>>>> GROUP BY the speed sensor, and the AVG is that of calls on that given
>>>>> road.
>>>>>
>>>>> The way to develop complex queris is to write simple parts, then combine
>>>>> them.
>>>>>
>>>>>          Andy
>>>>>
>>>>>
>>>>> On 05/06/17 16:46, Aya Hamdy wrote:
>>>>>
>>>>> The goal is not to calculate the avg speed of a car. It is rather to
>>>>>> compute the avg speed of all the cars on a given road and assign that
>>>>>> computed average as the reading of the average speed sensot attached to
>>>>>> that road.
>>>>>>
>>>>>> Sorry if my wording is causing confusion.
>>>>>>
>>>>>> On Jun 5, 2017 5:12 PM, "Lorenz Buehmann" <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>> No, why do you think so? ?v is the variable that gets assigned a
>>>>>> vehicle
>>>>>>
>>>>>>> for which you compute the avg speed.
>>>>>>>
>>>>>>> <Instance> should be ?v, i.e. you have to group by it and select it
>>>>>>>
>>>>>>> INSERT {
>>>>>>>
>>>>>>> ?v :avgSpeed ?avg
>>>>>>>
>>>>>>> } WHERE {
>>>>>>>
>>>>>>> SELECT ?v (AVG(?speed) AS ?avg) {
>>>>>>>
>>>>>>> ....
>>>>>>>
>>>>>>> } GROUP BY ?v
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> On 05.06.2017 17:03, Aya Hamdy wrote:
>>>>>>>
>>>>>>> Hello,
>>>>>>>> I will try to explain with examples. I have generated my ontology
>>>>>>>> from
>>>>>>>> Protege and converted it to turtle syntax via an online tool.
>>>>>>>>
>>>>>>>> *I have a class for average speed sensors:*
>>>>>>>>
>>>>>>>>    ###
>>>>>>>> http://www.semanticweb.org/toshiba/ontologies/2017/3/
>>>>>>>>
>>>>>>>> untitled-ontology-6#Avg_Speed_Sensor
>>>>>>>
>>>>>>>> untitled-ontology-6:Avg_Speed_Sensor rdf:type owl:Class ;
>>>>>>>>
>>>>>>>>                                        rdfs:subClassOf
>>>>>>>> untitled-ontology-6:Sensor ,
>>>>>>>>
>>>>>>>>    untitled-ontology-6:Speed_Sensor .
>>>>>>>>
>>>>>>>> *and a class for vehicles:*
>>>>>>>> ###
>>>>>>>> http://www.semanticweb.org/toshiba/ontologies/2017/3/
>>>>>>>>
>>>>>>>> untitled-ontology-6#Vehicle
>>>>>>>
>>>>>>>> untitled-ontology-6:Vehicle rdf:type owl:Class .
>>>>>>>>
>>>>>>>> *The vehicle class has a property called vehicleSpeed:*
>>>>>>>> ###
>>>>>>>> http://www.semanticweb.org/toshiba/ontologies/2017/3/
>>>>>>>>
>>>>>>>> untitled-ontology-6#vehicleSpeed
>>>>>>>
>>>>>>>> untitled-ontology-6:vehicleSpeed rdf:type owl:DatatypeProperty ;
>>>>>>>>
>>>>>>>>                                    rdfs:domain
>>>>>>>> untitled-ontology-6:Vehicle
>>>>>>>>
>>>>>>>> ;
>>>>>>>
>>>>>>>>                                    rdfs:range xsd:integer .
>>>>>>>>
>>>>>>>> *The avg speed sensor class has  a property called recorded_speed:*
>>>>>>>>
>>>>>>>> ###
>>>>>>>> http://www.semanticweb.org/toshiba/ontologies/2017/3/
>>>>>>>>
>>>>>>>> untitled-ontology-6#recorded_speed
>>>>>>>
>>>>>>>> untitled-ontology-6:recorded_speed rdf:type owl:DatatypeProperty ;
>>>>>>>>
>>>>>>>>                                      rdfs:domain
>>>>>>>>
>>>>>>>> untitled-ontology-6:Sensor ,
>>>>>>>
>>>>>>>>    untitled-ontology-6:Speed_Sensor ;
>>>>>>>>
>>>>>>>>                                      rdfs:range xsd:integer .
>>>>>>>>
>>>>>>>> The recorded speed by the avg speed sensor allocated to a specific
>>>>>>>> road
>>>>>>>>
>>>>>>>> is
>>>>>>> the average of the vehicleSpeeds of the vehicles on that specific
>>>>>>>> road,
>>>>>>>> where the avg speed sensor class has a property called
>>>>>>>> avgSpeedSensor_Infrastructure and the vehicle has a property called
>>>>>>>> Vehicle_Road.
>>>>>>>>
>>>>>>>> I have two vehicle instances: Vehicle1 and Vehicle2; and two sensor
>>>>>>>> instances: SpeedSensor1 and SpeedSensor2.
>>>>>>>>
>>>>>>>> Is it clearer now or just confusing?
>>>>>>>>
>>>>>>>> so I am guessing following your guide it would be something like:
>>>>>>>>
>>>>>>>> INSERT {
>>>>>>>>        <instance> :avgSpeed ?avg
>>>>>>>>      }
>>>>>>>> WHERE {
>>>>>>>>      SELECT (AVG(?speed) AS ?avg) {
>>>>>>>>          ?v rdf:type :Vehicle ;
>>>>>>>>             :vehicleSpeed ?speed;
>>>>>>>>             : Vehicle_Road ?r;
>>>>>>>>          ?avs rdf:type :Avg_Speed_Sensor;
>>>>>>>>                 :avgSpeedSensor_Infrastructure ?r
>>>>>>>>
>>>>>>>>      }
>>>>>>>> }
>>>>>>>>
>>>>>>>> But  the value of the  <instance> should come from reading the file,
>>>>>>>>
>>>>>>>> right?
>>>>>>>
>>>>>>>> On Sun, Jun 4, 2017 at 9:04 PM, Andy Seaborne <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 04/06/17 18:47, Aya Hamdy wrote:
>>>>>>>>> Hello,
>>>>>>>>>
>>>>>>>>>> I wanted to add a property called avgSpeed to an instance of a
>>>>>>>>>> class
>>>>>>>>>> called
>>>>>>>>>> FlowSensor. This property should be the average of the values of
>>>>>>>>>> the
>>>>>>>>>> property vehicleSpeed attached to instances of the class Vehicle.
>>>>>>>>>>
>>>>>>>>>> I read that SPARQL update allows doing this. However, I cannot
>>>>>>>>>> reach
>>>>>>>>>>
>>>>>>>>>> the
>>>>>>> syntax for doing the* averaging of values* or for building the *SPARQL
>>>>>>>>> Update *query using jena with eclipse on the jena website.
>>>>>>>>>> If Jena indeed supports doing what I intend to do then can someone
>>>>>>>>>>
>>>>>>>>>> point
>>>>>>> out some sources to guide me in my attempt?
>>>>>>>>>> Best Regards,
>>>>>>>>>> Aya
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Calculate the average in a nested select so somethign like (you'll
>>>>>>>>>>
>>>>>>>>> have
>>>>>>>>>
>>>>>>>>> to
>>>>>>> fix this up):
>>>>>>>>> INSERT {
>>>>>>>>>        <instance> :avgSpeed ?avg
>>>>>>>>>      }
>>>>>>>>> WHERE {
>>>>>>>>>      SELECT (AVG(?speed) AS ?avg) {
>>>>>>>>>          ?v rdf:type :Vehicle ;
>>>>>>>>>             :vehicleSpeed ?speed
>>>>>>>>>      }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> By the way - it is better to more concrete in your description -
>>>>>>>>> actual
>>>>>>>>> data for example.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>

Reply via email to