RdfBase.java :  » UnTagged » stevie » de » unikoblenz » west » csxpoi » server » Android Open Source

Android Open Source » UnTagged » stevie 
stevie » de » unikoblenz » west » csxpoi » server » RdfBase.java
package de.unikoblenz.west.csxpoi.server;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.openrdf.query.BindingSet;
import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.http.HTTPRepository;

/**
 * HTTP URI dereferencing for base ontology resources.
 */
public class RdfBase extends HttpServlet {
  
  private static final long serialVersionUID = 1L;

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    
    PrintWriter writer = ServletHelper.utf8Writer(response);
    RdfWriter.setN3ContentType(response);
    
    try {
      Repository repository = new HTTPRepository(Constants.SESAME_SERVER, Constants.REPOSITORY_ID);
      
      try {
        repository.initialize();
        RepositoryConnection connection = repository.getConnection();
      
        try {
          TupleQuery query = connection.prepareTupleQuery(QueryLanguage.SPARQL,
              "PREFIX base: <" + Constants.NS_BASE + "> " +
              "PREFIX rdf: <" + Constants.NS_RDF + "> " +
              "PREFIX rdfs: <" + Constants.NS_RDFS + "> " +
              "SELECT ?s ?p ?o WHERE {" +
              " ?s ?p ?o ." +
              " FILTER (regex(str(?s), \"^" + Constants.NS_BASE + "\") ||" +
              "  regex(str(?o), \"^" + Constants.NS_BASE + "\"))" +
              " FILTER (?s != ?o)" + // no self-subclasses/subproperties
              " FILTER (?p != rdf:type || ?o != base:Poi)" + // no POIs
              " FILTER (?p != rdfs:subClassOf || ?o != base:Poi)" + // no categories
              " FILTER (?p != rdf:type || ?o != base:Category)" + // no categories
              " OPTIONAL {" +
              "  ?contribution rdfs:subClassOf base:Contribution ." +
              "  FILTER (?o = ?contribution)" +
              " }" +
              " FILTER (?p != rdf:type || !bound(?contribution))" + // no contributions
              " FILTER (?p != rdf:type || ?o != base:User)" + // no users
              " FILTER (?o != rdfs:Resource)" +
              "} ORDER BY ASC(str(?s))");
          TupleQueryResult result = query.evaluate();
          try {
            while (result.hasNext()) {
              BindingSet bindingSet = result.next();
              RdfWriter.writeNTriple(writer,
                  bindingSet.getValue("s"),
                  bindingSet.getValue("p"),
                  bindingSet.getValue("o"));
            }
          } finally {
            result.close();
          }
          
        } finally {
          connection.close();
        }
      } catch (RepositoryException e) {
        throw new ServerException();
      } catch (MalformedQueryException e) {
        throw new ServerException();
      } catch (QueryEvaluationException e) {
        throw new ServerException();
      }
    } catch (ServerException e) {
      e.printStackTrace();
    }
  }
  
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.