package org.aksw.jena_sparql_api.batch.processor; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import org.aksw.jena_sparql_api.concepts.Concept; import org.aksw.jena_sparql_api.concepts.Path; import org.aksw.jena_sparql_api.concepts.Step; import org.aksw.jena_sparql_api.geo.GeoMapSupplierUtils; import org.aksw.jena_sparql_api.utils.ElementTreeAnalyser; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.Property; import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.sparql.algebra.optimize.Optimize; import org.apache.jena.sparql.expr.ExprTransformCopy; import org.apache.jena.sparql.graph.NodeTransform; import org.apache.jena.sparql.syntax.ElementSubQuery; import org.apache.jena.sparql.syntax.ElementUnion; import org.apache.jena.sparql.syntax.ElementVisitor; import org.apache.jena.sparql.syntax.ElementVisitorBase; import org.apache.jena.update.Update; class ModelUtils { public static Update deleteByConcept(Concept concept) { return null; } public static void clearGeometryWgs(Model model) { Concept c = GeoMapSupplierUtils.conceptWgs84; String wgs = "PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> DELETE WHERE { ?s geo:long ?x ; geo:lat ?y }"; String wgsGeometry = "PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> DELETE WHERE { ?s geo:geometry ?y }"; String geoSparqlLiteral = "PREFIX sp: <http://www.opengis.net/ont/geosparql#> DELETE WHERE { ?s sp:asWKT ?w }"; // TODO Also add a delete statement that removes geometry resources (so not just the literal)??? } /** * Find the set of resources referenced by the path */ public static Set<RDFNode> getNodes(Model model, RDFNode first, Path path) { List<Step> steps = path.getSteps(); Set<RDFNode> starts = Collections.singleton(first); for(Step step : steps) { String propertyName = step.getPropertyName(); boolean isInverse = step.isInverse(); Property property = model.createProperty(propertyName); Set<RDFNode> nodes = new HashSet<RDFNode>(); for(RDFNode start : starts) { Set<RDFNode> tmp; if(!isInverse) { tmp = model.listObjectsOfProperty(start.asResource(), property).toSet(); } else if(start.isResource()) { tmp = new HashSet<RDFNode>(model.listSubjectsWithProperty(property, start).toSet()); } else { tmp = Collections.<RDFNode>emptySet(); } nodes.addAll(tmp); } starts = nodes; } return starts; } } public class PathSpec { private Path path; }