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

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_r81662340
  
    --- Diff: 
rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/experimental/RDF4JParser.java 
---
    @@ -0,0 +1,206 @@
    +/**
    + * 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.experimental;
    +
    +import java.io.IOException;
    +import java.io.InputStream;
    +import java.net.MalformedURLException;
    +import java.net.URL;
    +import java.nio.file.Files;
    +import java.nio.file.Path;
    +import java.util.Optional;
    +import java.util.function.Consumer;
    +import java.util.stream.Stream;
    +
    +import org.apache.commons.rdf.api.IRI;
    +import org.apache.commons.rdf.api.Quad;
    +import org.apache.commons.rdf.api.RDFSyntax;
    +import org.apache.commons.rdf.experimental.RDFParser;
    +import org.apache.commons.rdf.rdf4j.RDF4JBlankNodeOrIRI;
    +import org.apache.commons.rdf.rdf4j.RDF4JDataset;
    +import org.apache.commons.rdf.rdf4j.RDF4JGraph;
    +import org.apache.commons.rdf.rdf4j.RDF4JTermFactory;
    +import org.apache.commons.rdf.simple.experimental.AbstractRDFParser;
    +import org.eclipse.rdf4j.model.Model;
    +import org.eclipse.rdf4j.model.Resource;
    +import org.eclipse.rdf4j.repository.util.RDFInserter;
    +import org.eclipse.rdf4j.repository.util.RDFLoader;
    +import org.eclipse.rdf4j.rio.ParserConfig;
    +import org.eclipse.rdf4j.rio.RDFFormat;
    +import org.eclipse.rdf4j.rio.RDFHandler;
    +import org.eclipse.rdf4j.rio.RDFHandlerException;
    +import org.eclipse.rdf4j.rio.Rio;
    +import org.eclipse.rdf4j.rio.helpers.AbstractRDFHandler;
    +
    +/**
    + * RDF4J-based parser.
    + * <p>
    + * This can handle the RDF syntaxes {@link RDFSyntax#JSONLD},
    + * {@link RDFSyntax#NQUADS}, {@link RDFSyntax#NTRIPLES},
    + * {@link RDFSyntax#RDFXML}, {@link RDFSyntax#TRIG} and {@link 
RDFSyntax#TURTLE}
    + * - additional syntaxes can be supported by including the corresponding
    + * <em>rdf4j-rio-*</em> module on the classpath.
    + *
    + */
    +public class RDF4JParser extends AbstractRDFParser<RDF4JParser> implements 
RDFParser {
    +
    +   private final class AddToQuadConsumer extends AbstractRDFHandler {
    +           private final Consumer<Quad> quadTarget;
    +
    +           private AddToQuadConsumer(Consumer<Quad> quadTarget) {
    +                   this.quadTarget = quadTarget;
    +           }
    +
    +           public void handleStatement(org.eclipse.rdf4j.model.Statement 
st)
    +                           throws 
org.eclipse.rdf4j.rio.RDFHandlerException {
    +                   // TODO: if getRdfTermFactory() is a non-rdf4j factory, 
should
    +                   // we use factory.createQuad() instead?
    +                   // Unsure what is the promise of setting 
getRdfTermFactory() --
    +                   // does it go all the way down to creating BlankNode, 
IRI and
    +                   // Literal?
    +                   quadTarget.accept(rdf4jTermFactory.asQuad(st));
    +                   // Performance note:
    +                   // Graph/Quad.add should pick up again our
    +                   // RDF4JGraphLike.asStatement()
    +                   // and avoid double conversion.
    +                   // Additionally the RDF4JQuad and RDF4JTriple 
implementations
    +                   // are lazily converting subj/obj/pred/graph.s
    +           }
    +   }
    +
    +   private final static class AddToModel extends AbstractRDFHandler {
    +           private final Model model;
    +
    +           public AddToModel(Model model) {
    +                   this.model = model;
    +           }
    +
    +           public void handleStatement(org.eclipse.rdf4j.model.Statement 
st)
    +                           throws 
org.eclipse.rdf4j.rio.RDFHandlerException {
    +                   model.add(st);
    +           }
    +
    +           @Override
    +           public void handleNamespace(String prefix, String uri) throws 
RDFHandlerException {
    +                   model.setNamespace(prefix, uri);
    +           }
    +   }
    +
    +   private RDF4JTermFactory rdf4jTermFactory;
    +
    +   @Override
    +   protected RDF4JTermFactory createRDFTermFactory() {
    +           return new RDF4JTermFactory();
    +   }
    +
    +   @Override
    +   protected RDF4JParser prepareForParsing() throws IOException, 
IllegalStateException {
    +           RDF4JParser c = prepareForParsing();
    +           // Ensure we have an RDF4JTermFactory for conversion.
    +           // We'll make a new one if user has provided a non-RDF4J factory
    +           c.rdf4jTermFactory = (RDF4JTermFactory) 
getRdfTermFactory().filter(RDF4JTermFactory.class::isInstance)
    +                           .orElseGet(c::createRDFTermFactory);
    +           return c;
    +   }
    +
    +   @Override
    +   protected void parseSynchronusly() throws IOException {         
    --- End diff --
    
    Note that RDF4J has an internal implementation of parseAsynchronously using 
a Queue that takes an RDFParser and an InputStream as its main inputs, if there 
are other possible implementations here that are async:
    
    
https://github.com/eclipse/rdf4j/blob/master/core/http/client/src/main/java/org/eclipse/rdf4j/http/client/BackgroundGraphResult.java
    
    Note that it is currently in the http-client module, but it has no reliance 
on a particular InputStream implementation so we could move it out of that 
package into rio-api if necessary to support it easily here.


> 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