Package org.data2semantics.tools.rdf

Source Code of org.data2semantics.tools.rdf.RDFSingleDataSet

package org.data2semantics.tools.rdf;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.openrdf.model.Literal;
import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.query.GraphQueryResult;
import org.openrdf.query.QueryLanguage;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryResult;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.inferencer.fc.ForwardChainingRDFSInferencer;
import org.openrdf.sail.memory.MemoryStore;

public class RDFSingleDataSet extends RDFDataSet
{
  protected Repository rdfRep;
  private String label;

  public RDFSingleDataSet() {
    try {
      rdfRep = new SailRepository(new ForwardChainingRDFSInferencer(new MemoryStore()));
      rdfRep.initialize();
     
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  public RDFSingleDataSet(String label) {
    this();
    this.label = label;
  }
 
  public RDFSingleDataSet(Repository rdfRep, String label) {
    this.rdfRep = rdfRep;
    this.label = label;
  }

  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getLabel()
   */
  @Override
  public String getLabel() {
    return this.label;
  }
 
 
  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#createStatement(org.openrdf.model.URI, org.openrdf.model.URI, org.openrdf.model.URI)
   */
  @Override
  public Statement createStatement(URI subject, URI predicate, URI object) {
    return rdfRep.getValueFactory().createStatement(subject, predicate, object, null);
  }
 
  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#createURI(java.lang.String)
   */
  @Override
  public URI createURI(String uri) {
    return rdfRep.getValueFactory().createURI(uri);
  }
 
  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#createLiteral(java.lang.String)
   */
  @Override
  public Literal createLiteral(String lit) {
    return rdfRep.getValueFactory().createLiteral(lit);
  }
 
  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#addStatements(java.util.List)
   */
  @Override
  public void addStatements(List<Statement> stmts) {
    try {
      this.rdfRep.getConnection().add(stmts, (Resource) null);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 

  public List<Statement> getFullGraph()
  { 
    return getStatements(null, null, null, true);
  }
 
  public List<Statement> sparqlQuery(String sparqlQuery) {
    List<Statement> graph = new ArrayList<Statement>();

    try {
      RepositoryConnection repCon = rdfRep.getConnection();
      try {
        GraphQueryResult graphResult = repCon.prepareGraphQuery(QueryLanguage.SPARQL, sparqlQuery).evaluate();

        try {
          while (graphResult.hasNext()) {
            graph.add(graphResult.next());
          }         
        } finally {
          graphResult.close();
        }             
      } finally {
        repCon.close();
      }     

    } catch (Exception e) {
      e.printStackTrace();
    }

    return graph;
  }
 
 
  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getStatements(org.openrdf.model.Resource, org.openrdf.model.URI, org.openrdf.model.Value)
   */
  @Override
  public List<Statement> getStatements(Resource subject, URI predicate, Value object) {
    return getStatements(subject, predicate, object, false);
  }

  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getStatements(org.openrdf.model.Resource, org.openrdf.model.URI, org.openrdf.model.Value, boolean)
   */ 
  @Override
  public List<Statement> getStatements(Resource subject, URI predicate, Value object, boolean allowInference) {
    List<Statement> resGraph = new ArrayList<Statement>();

    try {
      RepositoryConnection repCon = rdfRep.getConnection();

      try {
       
       
        RepositoryResult<Statement> statements = repCon.getStatements(subject, predicate, object, allowInference);

        try {
          resGraph.addAll(statements.asList());
        }
        finally {
          statements.close();
        }
      } finally {
        repCon.close();
      }

    } catch (Exception e) {
      e.printStackTrace();
    }

    return resGraph;   
  }




  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getStatementsFromStrings(java.lang.String, java.lang.String, java.lang.String)
   */
  @Override
  public List<Statement> getStatementsFromStrings(String subject, String predicate, String object) {
    return getStatementsFromStrings(subject, predicate, object, false);
  }

  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getStatementsFromStrings(java.lang.String, java.lang.String, java.lang.String, boolean)
   */
  @Override
  public List<Statement> getStatementsFromStrings(String subject, String predicate, String object, boolean allowInference)
  { 
    URI querySub = null;
    URI queryPred = null;
    URI queryObj = null;

    if (subject != null) {
      querySub = rdfRep.getValueFactory().createURI(subject);
    }

    if (predicate != null) {
      queryPred = rdfRep.getValueFactory().createURI(predicate);
    }   

    if (object != null) {
      queryObj = rdfRep.getValueFactory().createURI(object);
    }

    return getStatements(querySub, queryPred, queryObj, allowInference);
  }

 
  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#removeStatementsFromStrings(java.lang.String, java.lang.String, java.lang.String)
   */
  @Override
  public void removeStatementsFromStrings(String subject, String predicate, String object) {
   
    URI querySub = null;
    URI queryPred = null;
    URI queryObj = null;

    if (subject != null) {
      querySub = rdfRep.getValueFactory().createURI(subject);
    }

    if (predicate != null) {
      queryPred = rdfRep.getValueFactory().createURI(predicate);
    }   

    if (object != null) {
      queryObj = rdfRep.getValueFactory().createURI(object);
    }
    removeStatements(querySub, queryPred, queryObj);   
  }
 
 
  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#removeStatements(org.openrdf.model.Resource, org.openrdf.model.URI, org.openrdf.model.Value)
   */
  @Override
  public void removeStatements(Resource subject, URI predicate, Value object) {
    try {
      RepositoryConnection repCon = rdfRep.getConnection();

      try {
        repCon.remove(subject, predicate, object);
      } finally {
        repCon.close();
      }

    } catch (Exception e) {
      e.printStackTrace();
   
  }
 
 

  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getSubGraph(java.lang.String, int, boolean)
   */ 
  @Override
  public List<Statement> getSubGraph(String startNode, int depth, boolean includeInverse) {
    return getSubGraph(rdfRep.getValueFactory().createURI(startNode), depth, includeInverse, false, null);
  }

  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getSubGraph(java.lang.String, int, boolean, boolean, java.util.List)
   */
  @Override
  public List<Statement> getSubGraph(String startNode, int depth, boolean includeInverse, boolean allowInference, List<Statement> bl) {
    return getSubGraph(rdfRep.getValueFactory().createURI(startNode), depth, includeInverse, allowInference, bl);
  }

  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getSubGraph(org.openrdf.model.Resource, int, boolean)
   */
  @Override
  public List<Statement> getSubGraph(Resource startNode, int depth, boolean includeInverse) {
    return getSubGraph(startNode, depth, includeInverse, false, null)
  }

  /* (non-Javadoc)
   * @see org.data2semantics.tools.rdf.RDFDataSet#getSubGraph(org.openrdf.model.Resource, int, boolean, boolean, java.util.List)
   */
  @Override
  public List<Statement> getSubGraph(Resource startNode, int depth, boolean includeInverse, boolean allowInference, List<Statement> bl) {
    Set<Statement> graph = new HashSet<Statement>();
    List<Statement> result;
    List<Resource> queryNodes = new ArrayList<Resource>();
    List<Resource> newQueryNodes; 

    queryNodes.add(startNode);

    for (int i = 0; i < depth; i++) {
      newQueryNodes = new ArrayList<Resource>();

      for (Resource queryNode : queryNodes) {
        result = getStatements(queryNode, null, null, allowInference);
        if (bl != null) {         
          result.removeAll(bl);
        }
        graph.addAll(result);
        newQueryNodes.addAll(getEndNodes(result, false));

        if (includeInverse) {
          result = getStatements(null, null, queryNode, allowInference);
          if (bl != null) {
            result.removeAll(bl);
          }
          graph.addAll(result);
          newQueryNodes.addAll(getEndNodes(result, true));
        }
      }

      newQueryNodes.remove(startNode);
      queryNodes = newQueryNodes;
    }
 
    List<Statement> graphRet = new ArrayList<Statement>();
    graphRet.addAll(graph);
   
    return graphRet;
  }
 
  private List<Resource> getEndNodes(List<Statement> statements, boolean fromObject) {
    List<Resource> newNodes = new ArrayList<Resource>();

    for (Statement statement : statements) {
      if (fromObject) {
        newNodes.add(statement.getSubject());
      } else if (statement.getObject() instanceof Resource) {
        newNodes.add((Resource) statement.getObject());
      }
    }
    return newNodes;   
  }

     
}
TOP

Related Classes of org.data2semantics.tools.rdf.RDFSingleDataSet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.