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

org.aksw.jena_sparql_api.views.PatternUtils Maven / Gradle / Ivy

The newest version!
package org.aksw.jena_sparql_api.views;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.aksw.jena_sparql_api.utils.QuadUtils;
import org.apache.jena.graph.Node;
import org.apache.jena.sparql.algebra.Op;
import org.apache.jena.sparql.algebra.op.OpFilter;
import org.apache.jena.sparql.algebra.op.OpJoin;
import org.apache.jena.sparql.algebra.op.OpLeftJoin;
import org.apache.jena.sparql.algebra.op.OpQuadPattern;
import org.apache.jena.sparql.algebra.op.OpSequence;
import org.apache.jena.sparql.algebra.op.OpUnion;
import org.apache.jena.sparql.core.Quad;

public class PatternUtils
{

	public static Collection collectQuads(Op op) {
		return collectQuads(op, new HashSet());
	}

	public static Collection collectQuads(Op op, Collection result) {
		if(op instanceof OpLeftJoin) {
			OpLeftJoin x = (OpLeftJoin)op;
			collectQuads(x.getLeft(), result);
			collectQuads(x.getRight(), result);
		} else if(op instanceof OpFilter) {
			OpFilter x = (OpFilter)op;
			collectQuads(x.getSubOp(), result);
		} else if(op instanceof OpJoin) {
			OpJoin x = (OpJoin)op;
			
			collectQuads(x.getLeft(), result);
			collectQuads(x.getRight(), result);
		} else if(op instanceof OpUnion) {
			System.out.println("Warning: Collecting expressions from unions. Since the same vars may appear within different (parts of) unions, it may be ambiguous to which part the expression refers.");
	
			OpUnion x = (OpUnion)op;
	
			collectQuads(x.getLeft(), result);
			collectQuads(x.getRight(), result);
		} else if(op instanceof OpQuadPattern) {
			OpQuadPattern x = (OpQuadPattern)op;
			result.addAll(x.getPattern().getList());			
		} else if(op instanceof OpSequence) {
			OpSequence x = (OpSequence)op;
			for(Op element : x.getElements()) {
				collectQuads(element, result);
			}			
		} else {
			throw new UnsupportedOperationException("Encountered class: " + op);
		}
		
		return result;
	}


	
	// Replaced by getVarsMentioned
	@Deprecated
	public static Set getVariables(Iterable nodes)
	{
		Set result = new HashSet();
		for (Node node : nodes) {
			if (node.isVariable()) {
				result.add(node);
			}
		}
	
		return result;
	}

	// Replaced by getVarsMentioned
	@Deprecated
	public static Set getVariables(Quad quad)
	{
		return getVariables(QuadUtils.quadToList(quad));
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy