Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java (revision 23)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java (revision 26)
@@ -52,8 +52,8 @@
 	 */
 	public static void main(String[] args) throws Exception {
-		// String sparqlEndpoint = "http://dbpedia.org/sparql";
-		String sparqlEndpoint = "http://lsd.dbcls.jp/sparql";
-		// String keyword = "artiste";
-		String keyword = "Agent";
+		String sparqlEndpoint = "http://dbpedia.org/sparql";
+//		String sparqlEndpoint = "http://lsd.dbcls.jp/sparql";
+		String keyword = "artiste";
+//		String keyword = "Agent";
 		String[] graphURIs = new String[0];
 
@@ -64,10 +64,19 @@
 		}
 
+		System.out.println("CLS");
+		ClassLink[] cls = builder.getNextClass(null, clz[1].getClassURI(), 100,
+				false);
+		if (cls != null) {
+			for (ClassLink cl : cls) {
+				System.out.println(cl.toString());
+			}
+			cls = builder.countLinks(null, clz[1].getClassURI(), cls);
+			for (ClassLink cl : cls) {
+				System.out.println(cl.toString());
+			}
+		}
+		
+		
 		/*
-		 * System.out.println("CLS"); ClassLink[] cls =
-		 * builder.getNextClass(null, clz[0].getClassURI(), 0, false); if( cls
-		 * != null ){ for( ClassLink cl: cls){
-		 * System.out.println(cl.toString()); } }
-		 * 
 		 * System.out.println("CLS-INS"); cls =
 		 * builder.getNextClassViaInstanceLink(null, clz[0].getClassURI(), 100);
@@ -290,7 +299,8 @@
 		queryStr.append(originClass);
 		queryStr.append(">.\n    ?p rdfs:range ?c.\n");
-
 		if (countLinks) {
 			queryStr.append("    ?o ?p ?s.");
+		}else{
+			queryStr.append("    filter(exists{?o ?p ?s}) ");
 		}
 
@@ -303,4 +313,6 @@
 		if (countLinks) {
 			queryStr.append("    ?s ?p ?o.");
+		}else{
+			queryStr.append("    filter( exists{?s ?p ?o})");
 		}
 
@@ -362,6 +374,6 @@
 				// System.out.println(direction);
 				int numOfLinks = 0;
-				if( countLinks){
-				  numOfLinks = sol.getLiteral("numOfLinks").getInt();
+				if (countLinks) {
+					numOfLinks = sol.getLiteral("numOfLinks").getInt();
 				}
 				ClassLink cl = new ClassLink(proURI, clsURI, direction,
@@ -637,3 +649,76 @@
 	}
 
+	public ClassLink[] countLinks(String[] graphURIs, String startClassURI,
+			ClassLink[] classLinks) throws Exception {
+		if (classLinks == null || classLinks.length == 0) {
+			return new ClassLink[0];
+		}
+		for (ClassLink classLink : classLinks) {
+			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");
+
+			queryStr.append("SELECT (COUNT(?os) AS ?numOfLinks) \n");
+			if (graphURIs != null) {
+				for (String graphURI : graphURIs) {
+					queryStr.append("FROM <");
+					queryStr.append(graphURI);
+					queryStr.append(">\n");
+				}
+			}
+
+			queryStr.append("WHERE{\n");
+			if (classLink.getDirection() == Direction.forward) {
+				queryStr.append("?is rdf:type  <");
+				queryStr.append(startClassURI);
+				queryStr.append(">.\n");
+				queryStr.append("?os rdf:type  <");
+				queryStr.append(classLink.getLinkedClassURI());
+				queryStr.append(">.\n");
+				queryStr.append("?is ?p ?os.\n");
+				queryStr.append("}");
+			} else {
+				if (classLink.getDirection() == Direction.forward) {
+					queryStr.append("?os rdf:type  <");
+					queryStr.append(startClassURI);
+					queryStr.append(">.\n");
+					queryStr.append("?is rdf:type  <");
+					queryStr.append(classLink.getLinkedClassURI());
+					queryStr.append(">.\n");
+					queryStr.append("?is ?p ?os.\n");
+					queryStr.append("}");
+				} else {
+					queryStr.append("?os rdf:type  <");
+					queryStr.append(startClassURI);
+					queryStr.append(">.\n");
+					queryStr.append("?is rdf:type  <");
+					queryStr.append(classLink.getLinkedClassURI());
+					queryStr.append(">.\n");
+					queryStr.append("{?is ?p ?os.}\n");
+					queryStr.append("UNION\n");
+					queryStr.append("{?os ?p ?is.}\n");
+					queryStr.append("}");
+				}
+			}
+			System.out.println(queryStr.toString());
+
+			Query query = QueryFactory.create(queryStr.toString());
+			QueryExecution qexec = QueryExecutionFactory.sparqlService(
+					endpointURI, query);
+
+			ResultSet results = qexec.execSelect();
+			if (results.hasNext()) {
+				QuerySolution sol = results.next();
+				Literal lit = sol.getLiteral("numOfLinks");
+				if (lit != null) {
+					int numOfLinks = lit.getInt();
+					classLink.setNumOfLinks(numOfLinks);
+				}
+			}
+			qexec.close();
+		}
+		return classLinks;
+	}
+
 }
Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java (revision 2)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java (revision 26)
@@ -64,4 +64,7 @@
 		}
 		sb.append(linkedClassURI);
+		sb.append(" [");
+		sb.append(numOfLinks);
+		sb.append("]");
 		return sb.toString();
 	}
Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilder.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilder.java (revision 20)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilder.java (revision 26)
@@ -103,4 +103,6 @@
 			int limit) throws Exception;
 	public LabelMap[] getLabels(String[] graphURIs, String[] resourceURIs, String language) throws Exception;
+	public ClassLink[] countLinks(String[] graphURIs, String startClassURI,
+			ClassLink[] classLinks) throws Exception;
 
 }
