All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.uniroma2.art.maple.sparql.GraphPattern Maven / Gradle / Ivy

package it.uniroma2.art.maple.sparql;

import java.util.Collection;
import java.util.Collections;
import java.util.Set;

import org.eclipse.rdf4j.model.Namespace;
import org.eclipse.rdf4j.query.BooleanQuery;
import org.eclipse.rdf4j.query.Query;
import org.eclipse.rdf4j.query.TupleQuery;
import org.eclipse.rdf4j.repository.RepositoryConnection;

/**
 * A SPARQL graph pattern with additional metadata easing its composition into another query.
 * 
 * @author Manuel Fiorelli
 */
public class GraphPattern {
	private final Collection inputVariables;
	private final String outputVariable;
	private final Set namespaces;
	private final String graphPattern;

	public GraphPattern(Collection inputVariables, String outputVariable, Set namespaces,
			String graphPattern) {
		this.inputVariables = Collections.unmodifiableCollection(inputVariables);
		this.outputVariable = outputVariable;
		this.graphPattern = graphPattern;
		this.namespaces = Collections.unmodifiableSet(namespaces);
	}

	public String getGraphPattern() {
		return graphPattern;
	}

	public Collection getInputVariables() {
		return inputVariables;
	}

	public String getOutputVariable() {
		return outputVariable;
	}

	public Set getNamespaces() {
		return namespaces;
	}
	
	public BooleanQuery prepareBooleanQuery(RepositoryConnection conn) {
		return (BooleanQuery) prepareQuery(conn);
	}

	public TupleQuery prepareTupleQuery(RepositoryConnection conn) {
		return (TupleQuery) prepareQuery(conn);
	}

	public Query prepareQuery(RepositoryConnection conn) {
		StringBuilder sb = new StringBuilder();
		for (Namespace ns : namespaces) {
			sb.append("prefix ").append(ns.getPrefix()).append(": <").append(ns.getName()).append(">\n");
		}
		if (outputVariable != null) {
			sb.append("select distinct ?");
			sb.append(outputVariable);
		} else {
			sb.append("ask");
		}
		sb.append(" {\n");
		sb.append(graphPattern);
		sb.append("}\n");

		Query query = conn.prepareQuery(sb.toString());
		query.setIncludeInferred(true);
		return query;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy