Thanks, Andy! S.
On 10/13/17, 3:40 AM, "Andy Seaborne" <a...@apache.org> wrote: Thanks. The inner SELECT isn't really necessary - it is just hiding ?p so rename that and don't have it in the outer projection: SELECT ?s ?p ?o FROM named_graph:m_p FROM NAMED named_graph:m_p_s WHERE { ?s ?p ?o GRAPH named_graph:m_p_s { ?o ?px w:frnd } } Andy On 13/10/17 11:14, Lorenz Buehmann wrote: > I answered it on StackOverflow. And the formulation of the question was > confusing. He probably meant that the subjects of the second graph are > the object of the first graph. Anything else wouldn't make sense... > > > Here is the data that I used for testing, thus, Andy could also use it: > > Graph named_graph:m_p > > @prefix : <http://ex.org/> . > :p1 :pred1 :mp1 . > :p2 :pred1 :mp1 . > :p3 :pred1 :mp2 . > :p4 :pred1 :mp2 . > :p5 :pred1 :mp3 . > :p6 :pred1 :mp3 . > > > Graph named_graph:m_p_s > > @prefix : <http://ex.org/> . > @prefix w: <http://ex.org/w/> . > > :mp1 :pred2 w:frnd . > :mp1 :pred2 w:fdlfkdl . > :mp2 :pred2 w:kdsjflk . > :mp2 :pred2 w:jflksdlkj . > :mp3 :pred2 w:frnd . > :mp3 :pred2 w:fjksldjfls . > > > Working query: > > PREFIX named_graph: <http://ex.org/graphs/> > PREFIX w: <http://ex.org/w/> > > SELECT * > FROM named_graph:m_p > FROM NAMED named_graph:m_p_s > WHERE > { > ?s ?p ?o > { > SELECT ?o WHERE { > GRAPH named_graph:m_p_s { ?o ?p w:frnd } > } > } > } > > > Cheers, > > Lorenz > > > > On 13.10.2017 10:20, Andy Seaborne wrote: >> >> >> On 13/10/17 02:36, Dimov, Stefan wrote: >>> Hello, >>> >>> I have two graphs: >> >> Which storage system are they in? >> Which version of Jena? >> >>> >>> m_p >>> >>> p1 pred1 mp1 >>> p2 pred1 mp1 >>> p3 pred1 mp2 >>> p4 pred1 mp2 >>> p5 pred1 mp3 >>> p6 pred1 mp3 >>> >>> and m_p_s >>> >>> mp1 pred2 w:frnd >>> mp1 pred2 w:fdlfkdl >>> mp2 pred2 w:kdsjflk >>> mp2 pred2 w:jflksdlkj >>> mp3 pred2 w:frnd >>> mp3 pred2 w:fjksldjfls >> >> Please could you provide complete data such as TriG? >> >> It is a barrier to volunteers who answers questions if the first thing >> you have to do is mangle email, data preparation and disentangle >> partial queries. >> >>> and I want to get all the triples in m_p which objects are predicates >>> in m_p_s and the object of that predicates in m_p_s is w:frnd >>> >>> In other words I want to make query that returns (results with) p1, >>> p2, p5 and p6 from m_p and doesn’t return p3 and p4. >>> >>> I’m trying to do this with nested queries, >> >> You don't need a nested SELECT. >> >> SELECT * { >> GRAPH m_p { ?s ?p ?o } >> GRAPH m_p_s { ?x ?o w:frnd } >> } >> >> (untested) >> >>> but it doesn’t work: E.g. >>> >>> SELECT $subj $pred $pr >> >> $subj and $pred are not set in the query. >> >> This isn't SQL! In SPARQL, variables get bound in graph patterns. >> >>> FROM NAMED named_graph:m_p >> >> The RDF dataset for this query is a single named graph and empty >> default graph. >> >> Did you mean: >> >> FROM NAMED named_graph:m_p >> FROM NAMED named_graph:m_p_s >> >> ? >> >> or indeed no FROM NAMED and use a dataset directly. >> >> >>> WHERE >>> { >>> SELECT $pr >>> WHERE >>> { >>> GRAPH named_graph:m_p_s { $pr $pred0 w:frnd } >> >> the m_p_s graph isn't in the dataset hence this pattern is empty. >> >> GRAPH is for access; FROM NAMED for setting up. >> >>> } >>> } >>> >>> returns empty result. I tried different things, but either I get an >>> error >> >> What is the error? >> >>> or empty result or everything in m_p. >>> >>> I don’t want to use UNION or FILTER for performance reasons. >>> >>> Do you have an idea how I can do it? >>> >>> Regards, >>> Stefan >>> >