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

ASF GitHub Bot commented on COMMONSRDF-35:
------------------------------------------

Github user ansell commented on a diff in the pull request:

    https://github.com/apache/incubator-commonsrdf/pull/24#discussion_r82313012
  
    --- Diff: 
rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4JTermFactory.java ---
    @@ -0,0 +1,603 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements. See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership. The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +package org.apache.commons.rdf.rdf4j;
    +
    +import java.util.Objects;
    +import java.util.Set;
    +import java.util.UUID;
    +
    +// To avoid confusion, avoid importing
    +// classes that are in both
    +// commons.rdf and openrdf.model (e.g. IRI, Literal)
    +import org.apache.commons.rdf.api.BlankNode;
    +import org.apache.commons.rdf.api.BlankNodeOrIRI;
    +import org.apache.commons.rdf.api.Dataset;
    +import org.apache.commons.rdf.api.Graph;
    +import org.apache.commons.rdf.api.Quad;
    +import org.apache.commons.rdf.api.RDFTerm;
    +import org.apache.commons.rdf.api.RDFTermFactory;
    +import org.apache.commons.rdf.api.Triple;
    +import org.apache.commons.rdf.api.TripleLike;
    +import org.apache.commons.rdf.rdf4j.impl.InternalRDF4JFactory;
    +import org.eclipse.rdf4j.model.BNode;
    +import org.eclipse.rdf4j.model.Model;
    +import org.eclipse.rdf4j.model.Resource;
    +import org.eclipse.rdf4j.model.Statement;
    +import org.eclipse.rdf4j.model.Value;
    +import org.eclipse.rdf4j.model.ValueFactory;
    +import org.eclipse.rdf4j.model.impl.LinkedHashModel;
    +import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
    +import org.eclipse.rdf4j.repository.Repository;
    +import org.eclipse.rdf4j.repository.RepositoryConnection;
    +import org.eclipse.rdf4j.repository.sail.SailRepository;
    +import org.eclipse.rdf4j.sail.Sail;
    +import org.eclipse.rdf4j.sail.memory.MemoryStore;
    +
    +/**
    + * RDF4J implementation of RDFTermFactory.
    + * <p>
    + * The {@link #RDF4JTermFactory()} constructor uses a {@link 
SimpleValueFactory}
    + * to create corresponding RDF4J {@link Value} instances. Alternatively, 
this
    + * factory can be constructed with a different {@link ValueFactory} using
    + * {@link #RDF4JTermFactory(ValueFactory)}.
    + * <p>
    + * {@link #asRDFTerm(Value)} can be used to convert any RDF4J {@link 
Value} to
    + * an RDFTerm. Note that adapted {@link BNode}s are considered equal if 
they are
    + * converted with the same {@link RDF4JTermFactory} instance and have the 
same
    + * {@link BNode#getID()}.
    + * <p>
    + * {@link #createGraph()} creates a new Graph backed by {@link 
LinkedHashModel}.
    + * To use other models, see {@link #asRDFTermGraph(Model)}.
    + * <p>
    + * To adapt a RDF4J {@link Repository} as a {@link Dataset} or {@link 
Graph},
    + * use {@link #asRDFTermDataset(Repository)} or
    + * {@link #asRDFTermGraph(Repository)}.
    + * <p>
    + * {@link #asTriple(Statement)} can be used to convert a RDF4J {@link 
Statement}
    + * to a Commons RDF {@link Triple}, and equivalent {@link 
#asQuad(Statement)} to
    + * convert a {@link Quad}.
    + * <p>
    + * To convert any {@link Triple} or {@link Quad} to to RDF4J {@link 
Statement},
    + * use {@link #asStatement(TripleLike)}. This recognises previously 
converted
    + * {@link RDF4JTriple}s and {@link RDF4JQuad}s without re-converting their
    + * {@link RDF4JTripleLike#asStatement()}.
    + * <p>
    + * Likewise, {@link #asValue(RDFTerm)} can be used to convert any Commons 
RDF
    + * {@link RDFTerm} to a corresponding RDF4J {@link Value}. This recognises
    + * previously converted {@link RDF4JTerm}s without re-converting their
    + * {@link RDF4JTerm#asValue()}.
    + * <p>
    + * For the purpose of {@link BlankNode} equivalence, this factory contains 
an
    + * internal {@link UUID} salt that is used by adapter methods like
    + * {@link #asQuad(Statement)}, {@link #asTriple(Statement)},
    + * {@link #asRDFTerm(Value)} as well as {@link #createBlankNode(String)}. 
As
    + * RDF4J {@link BNode} instances from multiple repositories or models may 
have
    + * the same {@link BNode#getID()}, converting them with the above methods 
might
    + * cause accidental {@link BlankNode} equivalence. Note that the {@link 
Graph}
    + * and {@link Dataset} adapter methods like
    + * {@link #asRDFTermDataset(Repository)} and {@link #asRDFTermGraph(Model)}
    + * therefore uses a unique {@link RDF4JTermFactory} internally.
    + *
    + */
    +public final class RDF4JTermFactory implements RDFTermFactory {
    +
    +   /**
    +    * InternalRDF4JFactory is deliberately abstract
    +    */
    +   private static InternalRDF4JFactory rdf4j = new InternalRDF4JFactory() {
    +   };
    +
    +   /**
    +    * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}.
    +    * <p>
    +    * The value will be of the same kind as the term, e.g. a
    +    * {@link org.eclipse.rdf4j.model.BNode} is converted to a
    +    * {@link org.apache.commons.rdf.api.BlankNode}, a
    +    * {@link org.eclipse.rdf4j.model.IRI} is converted to a
    +    * {@link org.apache.commons.rdf.api.IRI} and a
    +    * {@link org.eclipse.rdf4j.model.Literal}. is converted to a
    +    * {@link org.apache.commons.rdf.api.Literal}
    +    *
    +    * @param value
    +    *            The RDF4J {@link Value} to convert.
    +    * @param salt
    +    *            A {@link UUID} salt to use for uniquely mapping any
    +    *            {@link BNode}s. The salt should typically be the same for
    --- End diff --
    
    I would change this to "MUST" be the same for all statements from the same 
Repository or Model or Rio RDFParser. There is no other rational way to perform 
the transformation and retain peoples sanity.


> rdf4j integration
> -----------------
>
>                 Key: COMMONSRDF-35
>                 URL: https://issues.apache.org/jira/browse/COMMONSRDF-35
>             Project: Apache Commons RDF
>          Issue Type: New Feature
>            Reporter: Stian Soiland-Reyes
>            Assignee: Stian Soiland-Reyes
>              Labels: integration, rdf4j, sesame
>             Fix For: 0.3.0
>
>
> Add a new rdf4j module with implementation for Eclipse rdf4j
> See https://github.com/apache/incubator-commonsrdf/tree/rdf4j/rdf4j
> A legacy sesame branch could then be added by mainly copy/paste and change 
> the import



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

Reply via email to