Stian Soiland-Reyes created COMMONSRDF-42:
---------------------------------------------

             Summary: Add GeneralizedTriple/Quad interfaces to api (and avoid 
TripleLike)?
                 Key: COMMONSRDF-42
                 URL: https://issues.apache.org/jira/browse/COMMONSRDF-42
             Project: Apache Commons RDF
          Issue Type: Wish
          Components: api
            Reporter: Stian Soiland-Reyes


Peter Ansell 
[commented|https://github.com/apache/incubator-commonsrdf/pull/24#discussion_r82316729]
 on COMMONSRDF-35:

{quote}
How about adding the following interfaces to Commons RDF API, rather than 
experimenting inside of the integration modules that is unhelpful in the long 
term for reuse of similar patterns. (Note that the appropriate generics type 
declarations such as "T extends RDFTerm" have not been added to the signatures 
below but they would be necessary in practice):

* GeneralisedTriple<RDFTerm, RDFTerm, RDFTerm>
* GeneralisedQuad<BlankNodeOrIRI, RDFTerm, RDFTerm, RDFTerm> implements 
GeneralisedTriple<RDFTerm, RDFTerm, RDFTerm>
* Triple implements GeneralisedTriple<BlankNodeOrIRI, IRI, RDFTerm>
* Quad implements Triple, GeneralisedQuad<BlankNodeOrIRI, BlankNodeOrIRI, IRI, 
RDFTerm>
* GeneralisedGraph<GeneralisedTriple, RDFTerm, RDFTerm, RDFTerm> (need the 
copied generic types for methods that don't just accept GeneralisedTriple)
* GeneralisedDataset<GeneralisedQuad, BlankNodeOrIRI, RDFTerm, RDFTerm, RDFTerm>
* Graph implements GeneralisedGraph<Triple, BlankNodeOrIRI, IRI, RDFTerm>
* Dataset implements GeneralisedDataset<Quad, BlankNodeOrIRI, BlankNodeOrIRI, 
IRI, RDFTerm>

The key is that the commonly reused interfaces Triple/Quad/Graph/Dataset now do 
not have the confusing "Like" suffix, and they have no generics arguments to 
remove an extra barrier to reuse. All implementations of Triple will be 
specialised subsets of GeneralisedTriple, so it doesn't seem to be an issue to 
uptake to represent the APIs this way.

Inheriting Quad from Triple and other similar instances isn't a design issue 
IMO, as correct code should be written to check instanceof Quad before it 
checks instanceof Triple if the user wants to preserve the dataset reference.

Even though Quad is not defined in terms of RDF-1.1, there will be no simple 
way to integrate with RDF4J without some version of it. It is also a commonly 
used term in the community, even if it didn't make it into the RDF-1.1 
specification so it doesn't introduce new issues for understandability.

Implementing a Triple-level integration for RDF4J would not be a useful pursuit 
IMO given the background of the RDF4J Statement interface always having had a 
getContext method. I would prefer if this integration went just for 
Quad<->Statement translation in its initial versions to get it completed sooner 
rather than later.
{quote}



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

Reply via email to