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