Changeset 734:413b712d1ea3


Ignore:
Timestamp:
11/23/12 16:15:15 (5 years ago)
Author:
Panayiotis Smeros <psmeros@…>
Branch:
temporals
Message:

Fixed a bug in queryRewriting.

Location:
runtime/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • runtime/src/main/java/eu/earthobservatory/runtime/generaldb/Strabon.java

    r729 r734  
    288288                try 
    289289                { 
    290  
    291290                        String graphVariable="?g"+(int)(Math.random()*10000); 
    292291                        while (queryString.contains(graphVariable)) 
     
    301300                        Matcher matcher = pattern.matcher(queryString); 
    302301                        String oldQueryString=matcher.replaceAll(""); 
    303                          
    304                         //escape prefixes 
    305                         startIndex=oldQueryString.indexOf('{'); 
    306                         newQueryString+=oldQueryString.substring(0, startIndex); 
    307                         oldQueryString=oldQueryString.substring(startIndex); 
    308                         startIndex=0; 
    309302                                         
    310                         //check whether the query contains quadruples 
    311                         String SPO = "([[a-z][A-Z][?:<\\p{InGreek}]]([\\S])*)"; 
    312                         String C = "((\"\\[.*\\]\"\\^\\^strdf:validTime)|"+SPO+")"; 
    313                         REGEX = "("+SPO+"(\\s)+){3}"+C+"(\\s)*[\\}\\.]"; 
    314          
     303                        //check whether the query contains quadruples    
     304                        String Word="((\\w)|(\\p{InGreek}))+"; 
     305                        String URI="(<([\\S])*>)|("+Word+":"+Word+")"; 
     306                        String Literal="\".*\"(\\^\\^"+URI+")?"; 
     307                        String Variable="\\?"+Word; 
     308                         
     309                        String SPOT="(("+URI+")|("+Literal+")|("+Variable+"))"; 
     310                        REGEX="("+SPOT+"(\\s)+){3}"+SPOT+"(\\s)*[\\}\\.]"; 
     311                         
     312 
    315313                        pattern = Pattern.compile(REGEX, Pattern.DOTALL);                                                        
    316314                        matcher = pattern.matcher(oldQueryString); 
     
    319317                        { 
    320318                                String quadruple=oldQueryString.substring(matcher.start(), matcher.end()).trim(); 
    321                                  
    322                                 REGEX = ".*[.[\\s+]](FILTER).*"; 
    323                                 pattern = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE);                                                      
    324                                 Matcher matcher1 = pattern.matcher(quadruple); 
    325                                 if(matcher1.find()) 
    326                                         continue; 
    327  
    328319                                numOfQuadruples++; 
    329320                                 
     
    332323         
    333324                                //tokenize quadruples and convert them to triples: 
    334                                 //s p o c  --becomes--> GRAPH ?g(numOfQuadruples) {s p o} 
    335                                 //                      ?g(numOfQuadruples) strdf:hasValidTime c 
     325                                //s p o t  --becomes--> GRAPH ?g(numOfQuadruples) {s p o} 
     326                                //                      ?g(numOfQuadruples) strdf:hasValidTime t 
    336327                                String[] token = quadruple.split("(\\s)+"); 
    337328                                newQueryString+="\n GRAPH "+graphVariable+numOfQuadruples+" { " +token[0]+" "+token[1]+" "+token[2]+" .}\n"; 
    338329                                newQueryString+=graphVariable+numOfQuadruples+" <http://strdf.di.uoa.gr/ontology#hasValidTime>"; 
    339330                                 
    340          
    341331                                //add the rest tokens 
    342332                                for( int i=3; i<token.length; i++) 
     
    363353                 
    364354                //backup 
    365                 //REGEX = ".*(PREFIX)|(SELECT).*"; 
    366                 //pattern = Pattern.compile(REGEX, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);                                                        
    367                 //matcher1 = pattern.matcher(quadruple); 
    368                  
     355                 
     356                //escape prefixes 
     357                //startIndex=oldQueryString.indexOf('{'); 
     358                //newQueryString+=oldQueryString.substring(0, startIndex); 
     359                //oldQueryString=oldQueryString.substring(startIndex); 
     360                //startIndex=0; 
     361                 
     362                //REGEX = ".*[.[\\s+]](FILTER).*"; 
     363                //pattern = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE);                                                    
     364                //Matcher matcher1 = pattern.matcher(quadruple); 
    369365                //if(matcher1.find()) 
    370366                //      continue; 
     367                                 
     368                //String SPO = "([[a-z][A-Z][?:<]]([\\S])*)"; 
     369                //String C = "((\"\\[.*\\]\"\\^\\^strdf:validTime)|\\?([\\S])*)"; 
     370                //REGEX = "("+SPO+"(\\s)+){3}"+C+"(\\s)*[\\}\\.]{1}"; 
     371 
    371372                 
    372373                //String URI = "[[a-z][A-Z][?:<\\p{InGreek}]][[a-z][A-Z][0-9][\\p{InGreek}@#$%^<>/:;\"\'.]]*"; 
  • runtime/src/test/java/eu/earthobservatory/runtime/postgis/temporals/QueryRewritingTests.java

    r729 r734  
    1111 
    1212 
     13 
     14import static org.junit.Assert.assertEquals; 
    1315 
    1416import java.io.IOException; 
     
    7476                                "}"; 
    7577                 
    76                 System.out.println(strabon.queryRewriting(query)); 
     78                String [] querySplit=strabon.queryRewriting(query).split("GRAPH");               
     79                assertEquals(1, querySplit.length); 
    7780        } 
    7881         
     
    9396                        "   FILTER(strdf:afterPeriod(?t1,?t2))}";        
    9497                 
    95                 System.out.println(strabon.queryRewriting(query)); 
     98                String [] querySplit=strabon.queryRewriting(query).split("GRAPH");               
     99                assertEquals(3, querySplit.length); 
    96100        } 
    97101 
    98102 
     103        @Test 
     104        public void testQueryRewriting3() throws MalformedQueryException, QueryEvaluationException, TupleQueryResultHandlerException, IOException, QueryEvaluationException 
     105        { 
     106         
     107                String query =  
     108                        prefixes+ 
     109                        "select ?s1 " + 
     110                        "where { " + 
     111                        "?s1 ?p1 ?o1 ?t1 ." + 
     112                        "?s2 ?p2 ?o2 ?t2 ." + 
     113                        "?x1 <http://teleios.di.uoa.gr/ontologies/noaOntology.owl#hasGeometry>    ?geo1. " + 
     114                        "?x2 <http://teleios.di.uoa.gr/ontologies/noaOntology.owl#hasGeometry>    ?geo2. " + 
     115                        "FILTER(strdf:disjoint(?geo1,?geo2))" + 
     116                        "FILTER(strdf:afterPeriod(?t1, ?t2))."; 
     117                 
     118                String [] querySplit=strabon.queryRewriting(query).split("GRAPH");               
     119                assertEquals(3, querySplit.length); 
     120        } 
    99121} 
  • runtime/src/test/java/eu/earthobservatory/runtime/postgis/temporals/TemporalSelectionTests.java

    r729 r734  
    9393                 
    9494                ArrayList<String> bindings = (ArrayList<String>) strabon.query(strabon.queryRewriting(query),strabon.getSailRepoConnection()); 
    95                 System.out.println(bindings); 
    9695                assertEquals(9, bindings.size()); 
    9796        } 
Note: See TracChangeset for help on using the changeset viewer.