Re: Trace back RDF containers in SPARQL

2015-05-08 Thread Laurent Rucquoy
Hi Andy,

Thank you for your response.

1) Which version of Jena are you running?
The used version of Jena is 2.10.1 (I will upgrade soon...)


2) How are you storing the data and how big is it?
TDBFactory.createDataset(directory)
COUNT(*) - 1 224 103
350MB on disk
Do you need other details ?


3) You say the query returns good results - what sort of query causes the
system to freeze?
This is the query returning good results appended with 3 more statements in
the WHERE clause:

PREFIX : http://www.telemis.com/
PREFIX xsd: http://www.w3.org/2001/XMLSchema#
PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema#

SELECT ?calculationResultCollection
WHERE {
?calculationData a :CalculationData ;
:value 0^^xsd:string .
?seqCalculationDataCollection ?seqCalculationDataCollectionIndex
?calculationData .
?calculationDataCollection a :CalculationDataCollection ;
:listCalculationData ?seqCalculationDataCollection .
?calculationResult a :CalculationResult ;
:calculationDataCollection ?calculationDataCollection .
?seqCalculationResultCollection ?seqCalculationResultCollectionIndex
?calculationResult .
?calculationResultCollection :listCalculationResult
?seqCalculationResultCollection ;
a :CalculationResultCollection .
}





On 7 May 2015 at 15:59, Andy Seaborne a...@apache.org wrote:

 Hi Laurent,

 Which version of Jena are you running?  How are you storing the data and
 how big is it?

 You say the query returns good results - what sort of query causes the
 system to freeze?

 Andy


 On 06/05/15 15:17, Laurent Rucquoy wrote:

 Hello,

 I have container resources which I want to retrieve from one of their
 elements.
 Here is an RDF/XML part of my data:


 rdf:Description rdf:about=

 http://www.telemis.com/CalculationResult/9e892a88-7257-4af3-881d-2eb304437546
 
 rdf:type rdf:resource=http://www.telemis.com/CalculationResult/
 TM:uid rdf:datatype=http://www.w3.org/2001/XMLSchema#string
 9e892a88-7257-4af3-881d-2eb304437546/TM:uid
 ...
 /rdf:Description

 rdf:Description rdf:nodeID=A525
 rdf:type rdf:resource=http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq/
 rdf:_1 rdf:resource=

 http://www.telemis.com/CalculationResult/9e892a88-7257-4af3-881d-2eb304437546
 /
 rdf:_2 rdf:resource=

 http://www.telemis.com/CalculationResult/9e892a88-7257-4af3-881d-45208e34af13
 /
 /rdf:Description

 rdf:Description rdf:about=

 http://www.telemis.com/CalculationResultCollection/a7d808d7-7689-4dfb-82c4-b0763f0dcd34
 
 rdf:type rdf:resource=
 http://www.telemis.com/CalculationResultCollection
 /
 TM:uid rdf:datatype=http://www.w3.org/2001/XMLSchema#string
 a7d808d7-7689-4dfb-82c4-b0763f0dcd34/TM:uid
 TM:listCalculationResult rdf:nodeID=A525/
 /rdf:Description


 The representation of this context could be:

 (CalculationResultCollection)
 --listCalculationResult--
 (seq-blank-node)
 +--(rdf:_1)--(CalculationResult1)
 +--(rdf:_2)--(CalculationResult2)
 +--...

 I've a SPARQL query which gives me a set of CalculationResult nodes.
 My question is: by which SPARQL query can I trace back to the
 CalculationResultCollection containing resource(s) ?

 Here is the SPARQL query which gives me a set of CalculationResult nodes:

 PREFIX : http://www.telemis.com/
 PREFIX xsd: http://www.w3.org/2001/XMLSchema#
 PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
 PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema#

 SELECT ?calculationResult
 WHERE {
 ?calculationData a :CalculationData ;
 :value 0^^xsd:string .
 ?seqCalculationDataCollection ?seqCalculationDataCollectionIndex
 ?calculationData .
 ?calculationDataCollection a :CalculationDataCollection ;
 :listCalculationData ?seqCalculationDataCollection .
 ?calculationResult a :CalculationResult ;
 :calculationDataCollection ?calculationDataCollection .
 }

 I tried to complete my WHERE clause with statements like I did to trace
 back to ?calculationDataCollection from ?calculationData but I cannot get
 the wanted result because the system freezes. Note that the SPARQL query
 here above returns good results.

 Is there a better practice to do that with acceptable performances ?

 Thank you in advance for your help.







-- 
*Laurent Rucquoy*
RD Engineer

laurent.rucq...@telemis.com
Tel: +32 (0) 10 48 00 27
Fax: +32 (0) 10 48 00 20

Telemis
Avenue Athéna 2
1348 Louvain-la-Neuve
Belgium
www.telemis.com
*Extending Human Life*

Au delà du Pacs...Découvrez le Macs
https://drive.google.com/a/telemis.com/file/d/0B8xEcRPFLfNdRmFRMlRSZ0k5djA/view?usp=sharing
 sur le stand Telemis #118 du 4. - 6 Juin - Centre des congrès de Bâle !


Re: Trace back RDF containers in SPARQL

2015-05-08 Thread Andy Seaborne

On 08/05/15 09:43, Laurent Rucquoy wrote:

Hi Andy,

Thank you for your response.

1) Which version of Jena are you running?
The used version of Jena is 2.10.1 (I will upgrade soon...)


Try with 2.13.0 because the area of BGP optimizations has been improved.




2) How are you storing the data and how big is it?
TDBFactory.createDataset(directory)
COUNT(*) - 1 224 103
350MB on disk
Do you need other details ?


3) You say the query returns good results - what sort of query causes the
system to freeze?
This is the query returning good results appended with 3 more statements in
the WHERE clause:


So the bad query is the good query with the last 3 triple patterns added?

It's hard to read but

?seqCalculationResultCollection
  ?seqCalculationResultCollectionIndex ?calculationResult .
?calculationResultCollection
   :listCalculationResult  ?seqCalculationResultCollection .
?calculationResultCollection rdf:type :CalculationResultCollection

is connected to the good part by ?calculationResult; all the other 
variables are just fanning out from that point without anything like the 
:value 0^^xsd:string in the good part.  From what I understand of your 
data, that can be a huge number of results.


Do you get no results, or that some results appear but then the query 
does not finish?


Andy




PREFIX : http://www.telemis.com/
PREFIX xsd: http://www.w3.org/2001/XMLSchema#
PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema#

SELECT ?calculationResultCollection
WHERE {
?calculationData a :CalculationData ;
:value 0^^xsd:string .
?seqCalculationDataCollection ?seqCalculationDataCollectionIndex
?calculationData .
?calculationDataCollection a :CalculationDataCollection ;
:listCalculationData ?seqCalculationDataCollection .
?calculationResult a :CalculationResult ;
:calculationDataCollection ?calculationDataCollection .
?seqCalculationResultCollection ?seqCalculationResultCollectionIndex
?calculationResult .
?calculationResultCollection :listCalculationResult
?seqCalculationResultCollection ;
a :CalculationResultCollection .
}





On 7 May 2015 at 15:59, Andy Seaborne a...@apache.org wrote:


Hi Laurent,

Which version of Jena are you running?  How are you storing the data and
how big is it?

You say the query returns good results - what sort of query causes the
system to freeze?

 Andy


On 06/05/15 15:17, Laurent Rucquoy wrote:


Hello,

I have container resources which I want to retrieve from one of their
elements.
Here is an RDF/XML part of my data:


rdf:Description rdf:about=

http://www.telemis.com/CalculationResult/9e892a88-7257-4af3-881d-2eb304437546

rdf:type rdf:resource=http://www.telemis.com/CalculationResult/
TM:uid rdf:datatype=http://www.w3.org/2001/XMLSchema#string
9e892a88-7257-4af3-881d-2eb304437546/TM:uid
...
/rdf:Description

rdf:Description rdf:nodeID=A525
rdf:type rdf:resource=http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq/
rdf:_1 rdf:resource=

http://www.telemis.com/CalculationResult/9e892a88-7257-4af3-881d-2eb304437546
/
rdf:_2 rdf:resource=

http://www.telemis.com/CalculationResult/9e892a88-7257-4af3-881d-45208e34af13
/
/rdf:Description

rdf:Description rdf:about=

http://www.telemis.com/CalculationResultCollection/a7d808d7-7689-4dfb-82c4-b0763f0dcd34

rdf:type rdf:resource=
http://www.telemis.com/CalculationResultCollection
/
TM:uid rdf:datatype=http://www.w3.org/2001/XMLSchema#string
a7d808d7-7689-4dfb-82c4-b0763f0dcd34/TM:uid
TM:listCalculationResult rdf:nodeID=A525/
/rdf:Description


The representation of this context could be:

(CalculationResultCollection)
--listCalculationResult--
(seq-blank-node)
+--(rdf:_1)--(CalculationResult1)
+--(rdf:_2)--(CalculationResult2)
+--...

I've a SPARQL query which gives me a set of CalculationResult nodes.
My question is: by which SPARQL query can I trace back to the
CalculationResultCollection containing resource(s) ?

Here is the SPARQL query which gives me a set of CalculationResult nodes:

PREFIX : http://www.telemis.com/
PREFIX xsd: http://www.w3.org/2001/XMLSchema#
PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema#

SELECT ?calculationResult
WHERE {
?calculationData a :CalculationData ;
:value 0^^xsd:string .
?seqCalculationDataCollection ?seqCalculationDataCollectionIndex
?calculationData .
?calculationDataCollection a :CalculationDataCollection ;
:listCalculationData ?seqCalculationDataCollection .
?calculationResult a :CalculationResult ;
:calculationDataCollection ?calculationDataCollection .
}

I tried to complete my WHERE clause with statements like I did to trace
back to ?calculationDataCollection from ?calculationData but I cannot get
the wanted result because the system freezes. Note that the SPARQL query
here above returns good results.

Is there a better practice to do that with acceptable performances ?

Thank you in advance for your help.