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 >>