[ 
https://issues.apache.org/jira/browse/COMMONSRDF-15?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15365916#comment-15365916
 ] 

Stian Soiland-Reyes commented on COMMONSRDF-15:
-----------------------------------------------

I wonder if we can Close this jira without specifying this. The assumed 
semantics of graph.contains() and graph.remove() would be to use the 
Triple.equals() IRI.equals() Literal.equals() and BlankNode.equals() - and thus 
the answer is "Yes, normally".

It is however not stated explicitly that a triple added with graph.add() can 
later be retrieved in an ".equals()" compatible form - in fact concurrency and 
reasoning might break this, and I think it should be allowed for a graph store 
to NOT preserve the blankNode.uniqueReference() - e.g. it should be allowed to 
return triples with "substituted" BlankNodes with other uniqueReference()s. 

However it would be reasonable for Graph to do such mapping consistently, e.g. 
for g.add(bnode1, p1, iri1);   g.add(bnode1, p2, iri2);   should then (assuming 
no other changes) return two Triples with predicate  p1 and p2  and a 
getSubject() that is equal across the two. Once the graph has a consistent 
mapping then I don't see a big reason why it can't also do .contains(bnode1, 
p1, iri1) - however if g.stream(bnode1, p1, iri1);  also does mapping it might 
return a Triple which .getSubject() is not equal to bnode1 - and that I think 
should be allowed (even if weird).


If we do NOT want to support this, then g.add() should return the new (possibly 
transformed) Triple. That might be a less ambigious solution.

> Can foreign BlankNode impls be used with .contains() and .getTriples()?
> -----------------------------------------------------------------------
>
>                 Key: COMMONSRDF-15
>                 URL: https://issues.apache.org/jira/browse/COMMONSRDF-15
>             Project: Apache Commons RDF
>          Issue Type: Improvement
>            Reporter: Stian Soiland-Reyes (old)
>            Priority: Minor
>             Fix For: 0.3.0
>
>
> What happens if I add a 'foreign' `BlankNode` to a Graph (either directly 
> with `Graph.add(s,t,o)` or within a foreign `Triple` to `Graph.add()` -- will 
> I be able to match using that original blank node object "later" in other 
> calls like `.contains()` and `.getTriples()`?
> This is of course straight-forward for IRI and Literal, but trickier for 
> BlankNode.
> e.g. pseudocode:
> {code}
> impl1 = new Impl1TermFactory();
> b1 = impl1.createBlankNode();
> knows = impl1.createIRI("http://xmlns.com/foaf/0.1/knows";);
> alice = impl1.createIRI("http://example.com/alice";);
> impl2 = new Impl2TermFactory();
> g2 = impl2.createGraph();
> g2.add(b1, knows, alice);
> assertTrue(g2.contains(b1, knows, alice));
> {code}
> As discussed under COMMONSRDF-8 and pull request 7 
> https://github.com/apache/incubator-commonsrdf/pull/7



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to