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 }