commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stian Soiland-Reyes <st...@apache.org>
Subject [RDF] Implementation class name style?
Date Tue, 13 Sep 2016 00:32:34 GMT
[[ I've copied both lists, prefer replies to dev@commons.apache.org ]]

What style should we use for packages and class names for the Commons
RDF Term implementations?


To give an example:

http://stain.github.io/incubator-commonsrdf/integration/org/apache/commons/rdf/api/IRI.html

(org.apache.commons.rdf.api.* is pretty-much locked down and agreed by
the incubator project - but I'm thinking of what to call the
implementations here now)


That is the Commons RDF API interface:

org.apache.commons.rdf.api.IRI


is extended by "marker" interfaces per implementation:

org.apache.commons.rdf.jena.JenaIRI
org.apache.commons.rdf.jsonldjava.JsonLdIRI
org.apache.commons.rdf.rdf4j.RDF4JIRI

(adds methods like asJenaNode() to reveal the underlying 'native'
implementations)


and the corresponding implementations which actually wrap the
underlying library's classes:

org.apache.commons.rdf.simple.IRIImpl
org.apache.commons.rdf.jena.impl.IRIImpl
org.apache.commons.rdf.rdf4j.impl.IRIImpl
org.apache.commons.rdf.jsonldjava.JsonLdIRI.JsonLdIRIImpl




for Graph there are quite a few more implementations:

org.apache.commons.rdf.simple.GraphImpl
org.apache.commons.rdf.simple.DatasetGraphView
org.apache.commons.rdf.jsonldjava.JsonLdGraph
org.apache.commons.rdf.jsonldjava.JsonLdUnionGraph
org.apache.commons.rdf.rdf4j.impl.ModelGraphImpl
org.apache.commons.rdf.rdf4j.impl.RepositoryGraphImpl
org.apache.commons.rdf.jena.impl.GraphImpl


but I only made marker interfaces:

org.apache.commons.rdf.jena.JenaGraph
org.apache.commons.rdf.rdf4j.RDF4JGraph



Questions:

a) Should we keep the marker interfaces for RDFTerms (e.g.
jena.JenaIRI) or just have the implementations directly (e.g. as in
simple.IRIImpl)

a2)  Should simple also have a marker interface?  (..they don't have
anything 'inner' to expose)


b) Should we have marker interfaces for the Graph/Dataset
implementations? Here getting access to the underlying model is
probably more important.


c) What style for the implementation class name? E.g. should they all
have the same name like "IRIImpl" (perhaps confusing if you have more
than one module on classpath), or better with prefix, e.g.
"JsonLdIRIImpl"?

d) Where should the implementation live?  sub-package like
org.apache.commons.rdf.jena.impl, or same package as marker interfaces
 -- or as inner class of the marker interface?

(I know - the last sounds nasty - but it's actually quite tidy if we
decide to not make the implementation package-protected, particularly
as most of these marker interfaces are pretty empty :

https://github.com/apache/incubator-commonsrdf/blob/jsonld-java/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuad.java
)


e)  How visible should the implementations be, package or public classes?

f) package or public constructors?  They should mostly be possible to
create through the corresponding RDFTermFactory - and 'package' would
mean we could update it in a minor or patch version.

g) - if implementation classes are public - should the implementations
be marked 'final'?

h) how do we construct a package-protected class from the factory
(which is not in .impl)? Jena adds a impl.JenaFactory for this purpose
- but it seems to duplicate most of JenaRDFTermFactory.

https://github.com/apache/incubator-commonsrdf/blob/jena/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaFactory.java
https://github.com/apache/incubator-commonsrdf/blob/jena/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTermFactory.java




Thanks for any suggestions!



-- 
Stian Soiland-Reyes
http://orcid.org/0000-0001-9842-9718

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message