package org.aksw.sparqlify.core;
import org.aksw.commons.util.reflect.MultiMethod;
import org.aksw.jena_sparql_api.views.E_RdfTerm;
import org.aksw.jena_sparql_api.views.SparqlifyConstants;
import org.apache.jena.graph.Node;
import org.apache.jena.sparql.expr.E_Function;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.expr.NodeValue;
import com.karneim.util.collection.regex.PatternPro;
public class RdfTermPatternDerivation {
public static RdfTermPattern deriveRegex(Expr expr) {
return MultiMethod.invokeStatic(RdfTermPatternDerivation.class, "_deriveRegex",
expr);
}
public static RdfTermPattern _deriveRegex(NodeValue expr) {
Node node = expr.asNode();
String value = null;
if(node.isLiteral()) {
value = node.getLiteralLexicalForm();
} else if(node.isURI()) {
value = node.getURI();
} else {
throw new RuntimeException("Should not happen");
}
String datatype = null;
if(node.isLiteral()) {
datatype = node.getLiteralDatatypeURI();
}
PatternPro a = value == null ? null : new PatternPro(RegexUtils.escape(value));
PatternPro b = datatype == null ? null : new PatternPro(RegexUtils.escape(datatype));
return new RdfTermPattern(a, b);
}
public static RdfTermPattern _deriveRegex(E_Function expr) {
if(SparqlifyConstants.rdfTermLabel.equals(expr.getFunctionIRI())) {
return new RdfTermPattern(
new PatternPro(RegexDerivation.deriveRegex(expr.getArg(2))));
}
return null;
}
public static RdfTermPattern _deriveRegex(E_RdfTerm expr) {
return new RdfTermPattern(
new PatternPro(RegexDerivation.deriveRegex(expr.getLexicalValue()))
//RegexDerivation.deriveRegex(expr.getDatatype()),
);
}
}