package org.aksw.sparqlify.core; import java.util.List; import org.aksw.commons.util.reflect.MultiMethod; import org.aksw.jena_sparql_api.exprs_ext.E_StrConcatPermissive; import org.apache.jena.sparql.expr.E_StrConcat; import org.apache.jena.sparql.expr.Expr; import org.apache.jena.sparql.expr.ExprVar; import org.apache.jena.sparql.expr.NodeValue; public class RegexDerivation { public static String deriveRegex(Expr expr) { return MultiMethod.invokeStatic(RegexDerivation.class, "_deriveRegex", expr); } public static String concatPatterns(List<Expr> exprs) { String result = ""; for (Expr expr : exprs) { result += deriveRegex(expr); } return result; } public static String _deriveRegex(E_StrConcat expr) { return concatPatterns(expr.getArgs()); } public static String _deriveRegex(E_StrConcatPermissive expr) { return concatPatterns(expr.getArgs()); } /* * public static String regexEscape(String str) { String result = ""; * * for(int i = 0; i < str.length(); ++i) { char c = str.charAt(i); * if(Character.isLetterOrDigit(c)) { result += c; } else { result += "\\" + * c; } * * } * * return result; } */ public static String _deriveRegex(NodeValue expr) { // return Pattern.quote(expr.asUnquotedString()); return RegexUtils.escape(expr.asUnquotedString()); } // Fallback: Allow anything public static String _deriveRegex(Expr var) { return ".*"; } public static String _deriveRegex(ExprVar var) { // TODO Use metadata about the var to return a more restrictive pattern return ".*"; } }