001    /**
002     * Copyright (C) 2007-2008, Jens Lehmann
003     *
004     * This file is part of DL-Learner.
005     * 
006     * DL-Learner is free software; you can redistribute it and/or modify
007     * it under the terms of the GNU General Public License as published by
008     * the Free Software Foundation; either version 3 of the License, or
009     * (at your option) any later version.
010     *
011     * DL-Learner is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014     * GNU General Public License for more details.
015     *
016     * You should have received a copy of the GNU General Public License
017     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
018     *
019     */
020    package org.dllearner.test;
021    
022    import org.dllearner.kb.sparql.SparqlEndpoint;
023    import org.dllearner.kb.sparql.SparqlQuery;
024    
025    import com.hp.hpl.jena.query.ResultSetFormatter;
026    
027    
028    public class JenaQueryToResultSpeedTest {
029            static boolean print_flag=false;
030            
031            public static void main(String[] args) {
032    
033                    String queryString = "PREFIX dbpedia2: <http://dbpedia.org/property/> "
034                                    + "PREFIX skos: <http://www.w3.org/2004/02/skos/core#>"
035                                    + "SELECT ?episode ?chalkboard_gag WHERE {   ?episode skos:subject"
036                                    + "    <http://dbpedia.org/resource/Category:The_Simpsons_episodes%2C_season_12>."
037                                    + "  ?episode dbpedia2:blackboard ?chalkboard_gag }";
038    
039                    int howOften=20;
040                    testJenaAsXML(howOften, queryString);
041                    testJenaAsList(howOften, queryString);
042                    testJenaAsJSON(howOften, queryString);
043                    testJenaAsJSONandBack(howOften, queryString);
044    
045                    
046    
047                    // compareResults( queryString);
048    
049            }
050    
051            
052            public static void testJenaAsXML(int howOften, String queryString){
053                    SparqlEndpoint sse = SparqlEndpoint.getEndpointDBpedia();
054                    SparqlQuery sqJena = new SparqlQuery(queryString, sse);
055                    // first query is not counted
056                    sqJena.send();
057                    sqJena.getXMLString();
058                    long now = System.currentTimeMillis();
059                    long tmp = now;
060                    for (int i = 0; i < howOften; i++) {
061    
062                            sqJena.send();
063                            sqJena.getXMLString();          
064                            p("Jena as XML needed: "
065                                            + (System.currentTimeMillis() - tmp));
066                            tmp = System.currentTimeMillis();
067                    }
068                    long total=System.currentTimeMillis() - now;
069                    System.out.println("Jena as XML total: " + total +
070                                    " ms , average: "+ (total/howOften) );
071                    
072            }
073            
074            public static void testJenaAsList(int howOften, String queryString){
075                    SparqlEndpoint sse = SparqlEndpoint.getEndpointDBpedia();
076                    SparqlQuery sqJena = new SparqlQuery(queryString, sse);
077                    // first query is not counted
078                    //sqJena.getAsList();
079                    sqJena.send();
080                    long now = System.currentTimeMillis();
081                    long tmp = now;
082                    for (int i = 0; i < howOften; i++) {
083    
084                            // sqJena.getAsList();
085                            sqJena.send();
086                            ResultSetFormatter.toList(sqJena.getResultSet());
087                            p("Jena as List needed: "
088                                            + (System.currentTimeMillis() - tmp));
089                            tmp = System.currentTimeMillis();
090    
091                    }
092                    long total=System.currentTimeMillis() - now;
093                    System.out.println("Jena as List total: " + total +
094                                    " ms , average: "+ (total/howOften) );
095                    
096            }
097            
098            public static void testJenaAsJSON(int howOften, String queryString){
099                    SparqlEndpoint sse = SparqlEndpoint.getEndpointDBpedia();
100                    SparqlQuery sqJena = new SparqlQuery(queryString, sse);
101                    // first query is not counted
102                    sqJena.send();
103                    sqJena.getJson();
104                    long now = System.currentTimeMillis();
105                    long tmp = now;
106                    for (int i = 0; i < howOften; i++) {
107    
108                            sqJena.send();
109                            sqJena.getJson();
110                            p("Jena as JSON needed: "
111                                            + (System.currentTimeMillis() - tmp));
112                            tmp = System.currentTimeMillis();
113    
114                    }
115                    long total=System.currentTimeMillis() - now;
116                    System.out.println("Jena as JSON total: " + total +
117                                    " ms , average: "+ (total/howOften) );
118                    
119            }
120            
121            public static void testJenaAsJSONandBack(int howOften, String queryString){
122                    SparqlEndpoint sse = SparqlEndpoint.getEndpointDBpedia();
123                    SparqlQuery sqJena = new SparqlQuery(queryString, sse);
124                    // first query is not counted
125                    sqJena.send();
126                    sqJena.getJson();               
127                    long now = System.currentTimeMillis();
128                    long tmp = now;
129                    for (int i = 0; i < howOften; i++) {
130    
131                    //      System.out.println(sqJena.getAsJSON());
132                            sqJena.send();
133                            String json = sqJena.getJson();
134                            SparqlQuery.convertJSONtoResultSet(json);
135                            p("Jena as JSON and back needed: "
136                                            + (System.currentTimeMillis() - tmp));
137                            tmp = System.currentTimeMillis();
138    
139                    }
140                    long total=System.currentTimeMillis() - now;
141                    System.out.println("Jena as JSON and back total: " + total +
142                                    " ms , average: "+ (total/howOften) );
143                    
144            }
145            
146    
147            public static void compareResults(String queryString) {
148                    SparqlEndpoint sse = SparqlEndpoint.getEndpointDBpedia();
149                    SparqlQuery sqJena = new SparqlQuery(queryString, sse);
150                    // SparqlQueryConventional sqConv=new SparqlQueryConventional(sse);
151    
152                    sqJena.send();
153                    System.out.println(sqJena.getJson());
154                    // System.out.println(sqConv.getAsXMLString(""));
155    
156            }
157            
158            static void p(String s) {
159                    if (print_flag)
160                            System.out.println(s);
161            }
162    }