Index: /BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java
===================================================================
--- /BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java (revision 60)
+++ /BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java (revision 61)
@@ -55,5 +55,5 @@
 		String sparqlEndpoint = "http://lsd.dbcls.jp/sparql";
 		// String keyword = "artiste";
-		String[] keyword = { "Player", "Soccer" };
+		String[] keyword = { "Frequency", "Class" };
 		String[] graphURIs = new String[0];
 
@@ -62,19 +62,30 @@
 		OWLQueryBuilder builder = new OWLQueryBuilderImpl(sparqlEndpoint);
 
-      
-		builder.getOWLClasses(null,keyword,"en",false);
-/*
-		SClass[] clz = builder.getOWLClasses(graphURIs, keyword, false);
-		for (SClass cls : clz) {
-			System.out.println(cls);
-		}
-		clz = builder.countInstances(null, clz);
-		for (SClass cls : clz) {
-			System.out.println(cls);
-		}
-*/
-
-
-		builder.getOWLClasses(null, keyword, "en", false);
+		SClass[] clz = builder.getOWLClasses(null, keyword, "en", false);
+		if (clz != null) {
+
+			for (SClass cls : clz) {
+				System.out.println(cls);
+			}
+			clz = builder.countInstances(null, clz);
+			for (SClass cls : clz) {
+				System.out.println(cls);
+			}
+		}
+
+		/*
+		 * clz = builder.listClasses(null, false);
+		 * System.out.println(clz.length); for (SClass cls : clz) {
+		 * System.out.println(cls); }
+		 */
+
+		/*
+		 * SClass[] clz = builder.getOWLClasses(graphURIs, keyword, false); for
+		 * (SClass cls : clz) { System.out.println(cls); } clz =
+		 * builder.countInstances(null, clz); for (SClass cls : clz) {
+		 * System.out.println(cls); }
+		 */
+
+		// builder.getOWLClasses(null, keyword, "en", false);
 		/*
 		 * SClass[] clz = builder.getOWLClasses(graphURIs, keyword, false); for
@@ -141,5 +152,6 @@
 	 */
 
-	public SClass[] getOWLClasses(String[] graphURIs, String[] keywords,String language, 
+	public SClass[] getOWLClasses(String[] graphURIs, String[] keywords,
+			String language,
 
 			boolean countInstances) throws Exception {
@@ -179,28 +191,24 @@
 		// TODO OR relationship between keywords
 		if (keywords != null && keywords.length != 0) {
-			 
+
 			queryStr.append(" ?c rdfs:label ");
-		    queryStr.append("?keywords")
-			         .append(".\n");
-			queryStr.append("  filter((LANG(?keywords) = \'")
-			        .append(language); 			
+			queryStr.append("?keywords").append(".\n");
+			queryStr.append("  filter((LANG(?keywords) = \'").append(language);
 			queryStr.append("\') && \n (");
-			
-		//	(LANG(?keywords) = 'en') &&
-			
-			  for (int i=0;i<keywords.length;i++)
-			  {
-			  if (i>0) queryStr.append(" or \n ");
-			
-			  
-			  queryStr.append("regex(str(")
-			         .append("?keywords")
-			         .append("),\"");
-			  queryStr.append(keywords[i]);
-			  queryStr.append("\", \"i\" )");
-			  
-			  }
-			  queryStr.append("))\n"); 
-	
+
+			// (LANG(?keywords) = 'en') &&
+
+			for (int i = 0; i < keywords.length; i++) {
+				if (i > 0)
+					queryStr.append(" || \n ");
+
+				queryStr.append("regex(str(").append("?keywords")
+						.append("),\"");
+				queryStr.append(keywords[i]);
+				queryStr.append("\", \"i\" )");
+
+			}
+			queryStr.append("))\n");
+
 		}
 
@@ -212,37 +220,136 @@
 		System.out.println(queryStr.toString());
 
-		/*
-		 * Query query = QueryFactory.create(queryStr.toString());
-		 * 
-		 * 
-		 * QueryExecution qexec = null; try{ long start =
-		 * System.currentTimeMillis(); qexec =
-		 * QueryExecutionFactory.sparqlService(endpointURI, query); long end =
-		 * System.currentTimeMillis(); System.out.println("EXEC TIME: " +
-		 * (end-start)); }catch(Exception ex){ ex.printStackTrace(); throw ex; }
-		 * 
-		 * ResultSet results = qexec.execSelect(); HashMap<String, SClass>
-		 * classMap = new HashMap<String, SClass>(); for (; results.hasNext();)
-		 * { QuerySolution sol = results.next(); Resource res =
-		 * sol.getResource("c"); if (res != null) { String uri = res.getURI();
-		 * int numOfInstances = 0; if (countInstances) { numOfInstances =
-		 * sol.getLiteral("numOfInstances").getInt(); } //
-		 * System.out.println(numOfInstances); Literal labelLiteral =
-		 * sol.getLiteral("pLabel"); SClass sClass = null; if
-		 * (classMap.containsKey(uri)) { sClass = classMap.get(uri); } else {
-		 * sClass = new SClass(uri, null, numOfInstances); classMap.put(uri,
-		 * sClass); } if (labelLiteral != null) { String label =
-		 * labelLiteral.getString(); String lang = labelLiteral.getLanguage();
-		 * sClass.addLabel(new Label(label, lang)); } } } qexec.close(); return
-		 * classMap.values().toArray(new SClass[0]);
-		 */
-		return null;
+		Query query = QueryFactory.create(queryStr.toString());
+
+		QueryExecution qexec = null;
+		ResultSet results = null;
+		try {
+			long start = System.currentTimeMillis();
+			qexec = QueryExecutionFactory.sparqlService(endpointURI, query);
+			results = qexec.execSelect();
+			long end = System.currentTimeMillis();
+			System.out.println("EXEC TIME: " + (end - start));
+		} catch (Exception ex) {
+			ex.printStackTrace();
+			throw ex;
+		}
+
+		HashMap<String, SClass> classMap = new HashMap<String, SClass>();
+		for (; results.hasNext();) {
+			QuerySolution sol = results.next();
+			Resource res = sol.getResource("c");
+			if (res != null) {
+				String uri = res.getURI();
+				int numOfInstances = 0;
+				if (countInstances) {
+					numOfInstances = sol.getLiteral("numOfInstances").getInt();
+				} //
+				System.out.println(numOfInstances);
+				Literal labelLiteral = sol.getLiteral("pLabel");
+				SClass sClass = null;
+				if (classMap.containsKey(uri)) {
+					sClass = classMap.get(uri);
+				} else {
+					sClass = new SClass(uri, null, numOfInstances);
+					classMap.put(uri, sClass);
+				}
+				if (labelLiteral != null) {
+					String label = labelLiteral.getString();
+					String lang = labelLiteral.getLanguage();
+					sClass.addLabel(new Label(label, lang));
+				}
+			}
+		}
+		qexec.close();
+		return classMap.values().toArray(new SClass[0]);
+
 	}
 
 	public SClass[] listClasses(String[] graphURIs, boolean countInstances)
 			throws Exception {
-
-		// TODO
-		return null;
+		StringBuffer queryStr = new StringBuffer();
+		queryStr.append("PREFIX owl: <http://www.w3.org/2002/07/owl#>\n");
+		queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n");
+		queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
+		if (countInstances) {
+			queryStr.append("SELECT DISTINCT ?cls ?pLabel (COUNT(?i) AS ?numOfInstances)\n");
+		} else {
+			queryStr.append("SELECT DISTINCT ?cls ?pLabel \n");
+		}
+
+		if (graphURIs != null) {
+			for (String graphURI : graphURIs) {
+				queryStr.append("FROM <");
+				queryStr.append(graphURI);
+				queryStr.append(">\n");
+			}
+		}
+		queryStr.append("WHERE{\n");
+		queryStr.append("\t{ ?cls rdf:type rdfs:Class. }\n");
+		queryStr.append("\tUNION\n");
+		queryStr.append("\t{ ?cls rdf:type owl:Class. }\n");
+		queryStr.append("\tUNION\n");
+		queryStr.append("\t{ [] rdfs:type ?cls. }\n");
+		queryStr.append("\tUNION\n");
+		queryStr.append("\t{ [] rdfs:domain ?cls. }\n");
+		queryStr.append("\tUNION\n");
+		queryStr.append("\t{ [] rdfs:range ?cls. }\n");
+		queryStr.append("\tUNION\n");
+		queryStr.append("\t{ ?cls rdfs:subclassOf []. }\n");
+		queryStr.append("\t?cls rdfs:label ?pLabel.\n");
+		if (countInstances) {
+			queryStr.append("\t?i rdf:type ?c.\n");
+		}
+		if (countInstances) {
+			queryStr.append("}  GROUP BY ?c ?pLabel");
+		} else {
+			queryStr.append("}");
+		}
+		System.out.println(queryStr.toString());
+
+		Query query = QueryFactory.create(queryStr.toString());
+
+		QueryExecution qexec = null;
+		ResultSet results = null;
+		try {
+			long start = System.currentTimeMillis();
+			qexec = QueryExecutionFactory.sparqlService(endpointURI, query);
+			results = qexec.execSelect();
+			long end = System.currentTimeMillis();
+			System.out.println("EXEC TIME: " + (end - start));
+		} catch (Exception ex) {
+			ex.printStackTrace();
+			throw ex;
+		}
+
+		HashMap<String, SClass> classMap = new HashMap<String, SClass>();
+		for (; results.hasNext();) {
+			QuerySolution sol = results.next();
+			Resource res = sol.getResource("cls");
+			if (res != null) {
+				String uri = res.getURI();
+				int numOfInstances = 0;
+				if (countInstances) {
+					numOfInstances = sol.getLiteral("numOfInstances").getInt();
+				}
+				// System.out.println(numOfInstances);
+				Literal labelLiteral = sol.getLiteral("pLabel");
+				SClass sClass = null;
+				if (classMap.containsKey(uri)) {
+					sClass = classMap.get(uri);
+				} else {
+					sClass = new SClass(uri, null, numOfInstances);
+					classMap.put(uri, sClass);
+				}
+				if (labelLiteral != null) {
+					String label = labelLiteral.getString();
+					String lang = labelLiteral.getLanguage();
+					sClass.addLabel(new Label(label, lang));
+				}
+			}
+		}
+		qexec.close();
+		return classMap.values().toArray(new SClass[0]);
+
 	}
 
