Hello Lorena,
I'm thinking about this feature, but it's useless without good
optimization and at the same time the optimization is quite
sophisticated there. So the "request_count/effort" ratio stays low and
the feature is regularly postponed.
As an example of troubles to be solved, consider
select *
from construct { ?s <p1> ?o1 ; <p2> ?o2 ; <p3> ?o1 }
from <g1> where { ?s <p13g1> ?o1; <p2g1> ?o2 }
where
{ { ?s <p1> <o1-sample> }
union
{ ?s <p2> <o2-sample> } }
For { ?s <p1> <o1-sample> }, the optimizer should check all constructor
templates and select templates that can create triples that can match
the pattern. Only { ?s <p1> ?o1 } is selected. Now the body of the
construct should be reduced to the smallest template that will generate
same set of { ?s <p1> ?o1 } triples as the original, but faster. It's
not a trivial thing BTW, and it should compose
from <g1> where { ?s <p13g1> ?o1 . filter exists {?s <p2g1> ?o2} }
Note that ?o1 should be equal to <o1-sample> in order to match the
triple pattern of the main query. So a mixed computation should be
performed to benefit from this knowledge. After this nontrivial
transformation, the constructor body should become
from <g1> where { ?s <p13g1> <o1-sample> . filter exists {?s
<p2g1> ?o2} }
Similarly,
?s <p2> <o2-sample>
should reduce construct template to single { ?s <p2> ?o2 }
and construct body to
from <g1> where { ?s <p2g1> ?o2 . filter exists {?s <p13g1> ?o1} }
and then to
from <g1> where { ?s <p2g1> <o2-sample> . filter exists {?s
<p13g1> ?o1} }
Finally, everything should be turned into single query
select ?s
where
{ { graph <g1> {
?s <p13g1> <o1-sample> . filter exists {?s <p2g1> ?o2} } }
union
{ graph <g1> {
?s <p2g1> <o2-sample> . filter exists {?s <p13g1> ?o2} } }
}
...if it were simpler, we'd rather implemented it years ago :|
Best Regards,
Ivan Mikhailov
OpenLink Software
http://virtuoso.openlinksw.com
On Tue, 2012-01-03 at 17:17 -0200, lorena wrote:
> Hi!
>
> I would like to dynamically populate graphs with the results of a
> query, and be able to store these graphs and reuse them in further
> queries.
> This could be accomplished, for example, If I could store a CONSTRUCT
> query and use a reference to this graph in other queries.
> I do not want to statically store the results of the CONSTRUCT query,
> because I want this new graph to reflect changes in the underlying
> graphs.
>
> Is this possible in Virtuoso?
>
> As far as I know Virtuoso implements something called RDF views, but
> this provides an RDF representation of relational data and is not what
> I need.
>
> Any help will be appreciated
> Thanks in advance
>
>
> --
> Lorena Etcheverry
> ------------------------------------------------------------------------------
> Write once. Port to many.
> Get the SDK and tools to simplify cross-platform app development. Create
> new or port existing apps to sell to consumers worldwide. Explore the
> Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
> http://p.sf.net/sfu/intel-appdev
> _______________________________________________ Virtuoso-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/virtuoso-users