You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/10/30 19:57:36 UTC
svn commit: r1195219 - in /incubator/jena/Experimental/JenaPerf/trunk:
Benchmarks/LUBM/manifest.ttl
src/main/scala/org/apache/jena/perf/TemplatedQuery.scala
Author: andy
Date: Sun Oct 30 18:57:36 2011
New Revision: 1195219
URL: http://svn.apache.org/viewvc?rev=1195219&view=rev
Log: (empty)
Added:
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala
Modified:
incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/manifest.ttl
Modified: incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/manifest.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/manifest.ttl?rev=1195219&r1=1195218&r2=1195219&view=diff
==============================================================================
Binary files - no diff available.
Added: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala?rev=1195219&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala Sun Oct 30 18:57:36 2011
@@ -0,0 +1,74 @@
+package org.apache.jena.perf
+import java.util.regex.Pattern
+
+import scala.collection._
+import scala.collection.mutable.{Map => MMap, Set => MSet}
+
+
+object TemplatedQuery {
+ def main(args: Array[String]): Unit = {
+
+ val template =
+ """
+SELECT *
+{ ?s :p %X% ;
+ :q <uri> ;
+ :r ?o
+ FILTER ( ?o < %Z% )
+}
+"""
+
+ val qt = new TemplatedQuery(template)
+ val map = Map("%X%" -> "<XYZ>", "%Z%" -> "123" )
+ val s = qt.subst(x => map.getOrElse(x, "UNDEF"))
+ println(s)
+
+ val x = qt.generator()
+ println(x._1)
+ println(x._2)
+ }
+}
+
+// , options:Map[String, Array[String]]
+class TemplatedQuery(template:String) {
+ import scala.util.matching.Regex
+ import scala.util.matching.Regex.Match
+
+ private val regex = new Regex("%[^%\n]*%")
+
+ private val vars = MSet[String]()
+ regex.findAllIn(template).foreach( x => vars += x )
+
+ def subst(func: String=>String) : String = {
+ regex.replaceAllIn(template, m => func(m.matched))
+ }
+
+ // Not perfect - might be in a FILTER
+ def generator():(String, List[String]) = {
+ var tvars = MMap[String, String]()
+ var count = 0
+ vars.foreach(p => { count += 1 ; tvars.put(p , "?V"+count)})
+ val qs1 = subst( p => tvars.getOrElse(p, p))
+
+ val selectVars = tvars.values.foldLeft[String]("")((p,v) => " "+v)
+ val qs = new Regex("(?i:SELECT)[^\\{]*\\{").replaceFirstIn(qs1, "SELECT"+selectVars+"\n{")
+ (qs, tvars.values.toList)
+ }
+
+ //private def foreach(f: String => String): Unit
+
+ private def _vars(string:String):Set[String] = {
+ val pattern = Pattern.compile("%[^%\n]*%")
+ val matcher = pattern.matcher(template)
+ val vars = MSet[String]()
+ matcher.reset()
+ while(matcher.find())
+ {
+ val s = matcher.start()
+ val t = matcher.end()
+ val x = template.substring(s,t)
+ vars += x
+ }
+ vars
+ }
+}
\ No newline at end of file