package org.aksw.jena_sparql_api.concept_cache.op; import java.io.IOException; import java.util.Set; import org.jgrapht.Graph; import org.jgrapht.experimental.dag.DirectedAcyclicGraph; //import org.jgrapht.experimental.equivalence.EquivalenceComparator; //import org.jgrapht.experimental.isomorphism.AdaptiveIsomorphismInspectorFactory; //import org.jgrapht.experimental.isomorphism.GraphIsomorphismInspector; //import org.jgrapht.experimental.isomorphism.IsomorphismRelation; import org.jgrapht.graph.DefaultEdge; import com.google.common.base.Function; import org.apache.jena.query.Query; import org.apache.jena.query.QueryFactory; import org.apache.jena.sparql.algebra.Algebra; import org.apache.jena.sparql.algebra.Op; // For each node get a signature // //class PredicateLabelMatch<V, E, L> // implements Predicate<IsomorphismRelation<V, E>> //{ // public PredicateLabelMatch(Graph<V, E> a, Graph<V, E> b) { // // } // // @Override // public boolean apply(IsomorphismRelation<V, E> arg0) { // // test if the labels are equivalent // } // //} class FunctionUtils { public static final Function<Object, String> classNameFn = new Function<Object, String>() { @Override public String apply(Object o) { String result = getClassLabel(o); return result; } }; public static String getClassLabel(Object o) { String result = o == null ? "(null)" : o.getClass().getSimpleName(); return result; } } //class MyEquivalenceComparator<V, E, L> // implements EquivalenceComparator<V, Graph<V, E>> //{ // private Function<? super V, L> labelFn; // // public MyEquivalenceComparator(Function<? super V, L> labelFn) { // this.labelFn = labelFn; // } // // @Override // public boolean equivalenceCompare(V a, V b, Graph<V, E> ga, Graph<V, E> gb) { // L la = labelFn.apply(a); // L lb = labelFn.apply(b); // // boolean result = la.equals(lb); // return result; // } // // @Override // public int equivalenceHashcode(V node, Graph<V, E> graph) { // L l = labelFn.apply(node); // return l.hashCode(); // } // // public static <V, E, L> MyEquivalenceComparator<V, E, L> create(Function<? super V, L> labelFn, Graph<V, E> graph) { // MyEquivalenceComparator<V, E, L> result = new MyEquivalenceComparator<V, E, L>(labelFn); // return result; // } //} public class StructuralMapping { public static void main(String[] args) throws IOException { // String queryString = "Select ?s ?name { ?s a <Person> . Optional { ?s <label> ?name . } }"; // Query query = QueryFactory.create(queryString); // // Op op = Algebra.compile(query); // op = Algebra.toQuadForm(op); // // // // //Iterators.filter(itIso, predicate); // // DirectedAcyclicGraph<Op, DefaultEdge> graph = OpToDirectedGraph.convert(op); // // DirectedAcyclicGraph<Op, DefaultEdge> cacheGraph = graph; // // //EquivalenceIsomorphismInspector<Op, DefaultEdge> itIso = new Equival // EquivalenceComparator<Op, Graph<Op, DefaultEdge>> vertexChecker = // MyEquivalenceComparator.create(FunctionUtils.classNameFn, graph); ////Functions. // GraphIsomorphismInspector<IsomorphismRelation<Op, DefaultEdge>> itIso = // (GraphIsomorphismInspector<IsomorphismRelation<Op, DefaultEdge>>) // AdaptiveIsomorphismInspectorFactory.createIsomorphismInspector(cacheGraph, graph, vertexChecker, null); // // int i = 0; // while(itIso.hasNext()) { // System.out.println("ISO " + i); // System.out.println("==========="); // // IsomorphismRelation<Op, DefaultEdge> iso = itIso.next(); // // for(Op cacheVertex : cacheGraph.vertexSet()) { // Op target = iso.getVertexCorrespondence(cacheVertex, true); // String la = cacheVertex.getName(); // String lb = target.getName(); // System.out.println("correspondence: " + la + " --- " + lb); // // } // // // // ++i; // } // // System.out.println("done"); // //Set<DefaultEdge> edges = graph.outgoingEdgesOf(op); // // Set<DefaultEdge> edges = graph.outgoingEdgesOf(OpUtils.getSubOps(op).get(0)); // // for(DefaultEdge edge : edges) { // System.out.println("child"); // Op target = graph.getEdgeTarget(edge); // System.out.println(target); // } // } }