Couldn't you do the JDBC Wrapper style interface and have a generic method
like:

<T> T unwrap(Class<T> cls);

Or make more specific unwrap methods like:

<T extends Statement> T unwrap(Class<T> cls);

If this is for implementation-specific casts and such.

On 12 September 2016 at 19:56, Stian Soiland-Reyes <st...@apache.org> wrote:

> [[ Cross-post - prefer replies to dev@commons ]]
>
> Each of the Common RDF implementations come with a RDFTermFatory
>
> http://stain.github.io/incubator-commonsrdf/integration/org/apache/
> commons/rdf/api/RDFTermFactory.html
>
> On a classical flat classloader the implementations of this factory
> can be discovered with java.util.ServiceLoader
>
>
> So if you have say a JsonLdRDFTermFactory you can call .createTriple()
> etc - and it would be backed by that implementation. As mentioned the
> marker interfaces will allow you to later on get hold of the wrapped
> object, e.g. to do some RDFS reasoning on a Jena Model or to parse it
> to a serializer.
>
>
> But what if you already have a 'native' object, e.g. a
> org.eclipse.rdf4j.model.Statement - and you want to convert it/adapt
> it to the corresponding Commons RDF API Triple?
>
> Obviously there would not be a general interface for this (without
> using ?-generics) as each backend implementation would have different
> (so far unrelated) types - but we can at least agree on the common
> style?
>
> In
>
> http://stain.github.io/incubator-commonsrdf/integration/org/apache/
> commons/rdf/rdf4j/RDF4JTermFactory.html
>
> I suggests as*() adapter methods like:
>
>
> RDF4JQuad asQuad(org.eclipse.rdf4j.model.Statement
>
> RDF4JTriple asTriple(org.eclipse.rdf4j.model.Statement statement)
>
> RDF4JTerm asRDFTerm(org.eclipse.rdf4j.model.Value value)
>
> RDF4JDataset asRDFTermDataset(org.eclipse.rdf4j.repository.Repository
> repository)
>
> RDF4JGraph  asRDFTermGraph(org.eclipse.rdf4j.model.Model model)
>
> RDF4JGraph  asRDFTermGraph(org.eclipse.rdf4j.repository.Repository
> repository)
>
>
> but also the inverse converters:
>
> org.eclipse.rdf4j.model.Value  asValue(RDFTerm term)
>
> org.eclipse.rdf4j.model.Statement
> asStatement(TripleLike<BlankNodeOrIRI,IRI,RDFTerm> tripleLike)
>
>
> (These will unpack the wrapped value if it's an RDF4JTerm - or create
> a new RDF4J native instance if it's a "foreign" class)
>
>
> Questions:
>
>
> a) Do these adapter methods belong in the RDFTermFactory or should
> there be a new family of 'adaptor factories'? (e.g. the Jena Factory
>
>
> b) What should we call these methods?  Is as*() appropriate or should
> they more closely match the createTriple() etc methods from
> RDFTermFactory?
>
> With asSomething() I wanted to hint of adaptation - rather than
> 'convert' or 'create' - but without having to commit to adaptation
> with adapt() or wrap().
>
>
> Now sometimes the implementations use the same class name as Commons
> RDF (e.g. Quad or Graph). Code-wise this is not too hard to deal with
> (avoid importing either), but it means it can get more confusing for
> downstream API users who do auto-complete and then don't know what
> direction they are adapting.
>
>
> c) Should the adapter methods have short names (e.g. asGraph()) -
> distinguished by type polymorphism and javadocs - or more verbose to
> show which particular return-type you get? (e.g. asJenaGraph() and
> asCommonsRDFGraph()) )
>
>
> d) Do we need to rename RDFTermFactory to RDFFactory (or just RDF) ?
>
>
>
> --
> Stian Soiland-Reyes
> http://orcid.org/0000-0001-9842-9718
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>


-- 
Matt Sicker <boa...@gmail.com>

Reply via email to