Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/Label.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/Label.java (revision 10)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/Label.java (revision 19)
@@ -5,11 +5,31 @@
 	private String label = null;
 	private String language = null;
-	
-	
-	public Label(String label, String language){
+
+	public boolean equals(Object oLabel) {
+		if( oLabel == null ){
+			return false;
+		}
+		Label loLabel = (Label) oLabel;
+		if (label != null) {
+			if (!label.equals(loLabel.getLabel())) {
+				return false;
+			}
+		} else {
+			if (loLabel.getLabel() != null) {
+				return false;
+			}
+		}
+
+		if (language != null) {
+			return language.equals(loLabel.getLanguage());
+		} else {
+			return loLabel.getLanguage() == null;
+		}
+	}
+
+	public Label(String label, String language) {
 		this.label = label;
 		this.language = language;
 	}
-
 
 	public String getLabel() {
@@ -17,9 +37,7 @@
 	}
 
-
 	public void setLabel(String label) {
 		this.label = label;
 	}
-
 
 	public String getLanguage() {
@@ -27,17 +45,16 @@
 	}
 
-
 	public void setLanguage(String language) {
 		this.language = language;
 	}
 
-	public String toString(){
+	public String toString() {
 		StringBuffer sb = new StringBuffer();
 		sb.append("\"");
-		if( label != null ){
+		if (label != null) {
 			sb.append(label);
 		}
 		sb.append("\"");
-		if( language != null ){
+		if (language != null) {
 			sb.append("@");
 			sb.append(language);
Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java (revision 18)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java (revision 19)
@@ -1,21 +1,10 @@
 package org.biohackathon.SPARQLBuilder.OWL;
 
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpPost;
-//import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.message.BasicNameValuePair;
-import org.apache.http.util.EntityUtils;
 
 import com.hp.hpl.jena.query.Query;
@@ -288,5 +277,6 @@
 		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 DISTINCT ?p ?pDirection ?c (COUNT(?s) AS ?numOfLinks) \n");
+//		queryStr.append("SELECT DISTINCT ?p ?pDirection ?c (COUNT(?s) AS ?numOfLinks) \n");
+		queryStr.append("SELECT DISTINCT ?p ?pDirection ?c \n");
 		if (graphURIs != null) {
 			for (String graphURI : graphURIs) {
@@ -300,10 +290,13 @@
 		queryStr.append("  { ?p rdfs:domain <");
 		queryStr.append(originClass);
-		queryStr.append(">.\n    ?p rdfs:range ?c.\n    ?o ?p ?s.}\n  UNION\n");
+		queryStr.append(">.\n    ?p rdfs:range ?c.\n");
+//		queryStr.append("    ?o ?p ?s.");
+		queryStr.append("}\n  UNION\n");
 		queryStr.append("  { ?p rdfs:range <");
 		queryStr.append(originClass);
 		queryStr.append(">.\n");
 		queryStr.append("    ?p rdfs:domain ?c.\n");
-		queryStr.append("    ?s ?p ?o.}\n");
+//		queryStr.append("    ?s ?p ?o.");
+		queryStr.append("}\n");
 
 		queryStr.append("    ?p ?pDirection ?c.\n");
@@ -311,8 +304,9 @@
 		
 		queryStr.append("  ?s rdf:type ?c.\n");
-		queryStr.append("  ?o rdf:type <");
-		queryStr.append(originClass);
-		queryStr.append(">.\n");
-		queryStr.append("}\nGROUP BY ?p ?pDirection ?c\n");
+//		queryStr.append("  ?o rdf:type <");
+//		queryStr.append(originClass);
+//		queryStr.append(">.\n");
+		queryStr.append("}\n");
+//		queryStr.append("GROUP BY ?p ?pDirection ?c\n");
 		if (limit > 0) {
 			queryStr.append("limit ");
@@ -567,3 +561,69 @@
 	}
 
+	
+	public LabelMap[] getLabels(String[] graphURIs, String[] resourceURIs, String language) throws Exception{
+		if( resourceURIs == null || resourceURIs.length == 0 ){
+			return new LabelMap[0];
+		}
+		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 DISTINCT ?res ?label \n");
+		if (graphURIs != null) {
+			for (String graphURI : graphURIs) {
+				queryStr.append("FROM <");
+				queryStr.append(graphURI);
+				queryStr.append(">\n");
+			}
+		}
+		queryStr.append("WHERE{\n");
+		queryStr.append("  ?res rdfs:label ?label.\n");
+		queryStr.append("  FILTER(?res IN (");
+		boolean f = false;
+		for( String resourceURI: resourceURIs ){
+			if(f){
+				queryStr.append(", ");
+			}
+			f = true;
+			queryStr.append("<");
+			queryStr.append(resourceURI);
+			queryStr.append(">");
+		}
+		queryStr.append("))\n");
+		queryStr.append("}");
+		
+		System.out.println(queryStr.toString());	
+	
+		Query query = QueryFactory.create(queryStr.toString());
+		QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointURI,
+				query);
+
+		ResultSet results = qexec.execSelect();
+		HashMap<String, LabelMap> lMap = new HashMap<String, LabelMap>();
+		HashMap<String, InstanceLink> insLinkMap = new HashMap<String, InstanceLink>();
+		for (; results.hasNext();) {
+			QuerySolution sol = results.next();
+			String uri = sol.getResource("res").getURI();
+			Literal literal = sol.getLiteral("label");
+			if( literal != null ){
+				String label = literal.getString();
+				String lang = literal.getLanguage();
+				if( language != null && language.equals(lang)){
+					Label lbl = new Label(label, lang);
+					if( lMap.containsKey(uri)){
+						LabelMap lm = lMap.get(uri);
+						lm.addLabel(lbl);
+					}else{
+						LabelMap lm = new LabelMap(uri, new Label[]{lbl});
+						lMap.put(uri, lm);
+					}
+				}
+			}
+		}
+		return lMap.values().toArray(new LabelMap[0]);
+		
+		
+	}
+	
 }
Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/LabelMap.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/LabelMap.java (revision 19)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/LabelMap.java (revision 19)
@@ -0,0 +1,58 @@
+package org.biohackathon.SPARQLBuilder.OWL;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+public class LabelMap {
+
+	private String resourceURI = null;
+	private HashSet<Label> labels = null;
+	
+	public LabelMap(){
+		labels = new HashSet<Label>();
+	}
+
+	
+	public LabelMap(String resourceURI, Label[] labelArray) {
+		labels = new HashSet<Label>();
+		this.resourceURI = resourceURI;
+		if( labelArray != null ){
+			for(Label label: labelArray){
+				labels.add(label);
+			}
+		}
+	}
+
+	public void addLabel(Label label){
+		labels.add(label);
+	}
+
+	
+	public Label[] getLabels(){
+		return labels.toArray(new Label[0]);
+	}
+
+	public Label[] getLabels(String language){
+		Label[] lbs = getLabels();
+		ArrayList<Label> labelAL = new ArrayList<Label>();
+		for(Label label: lbs){
+			if( language == null ){
+				labelAL.add(label);
+			}else{
+				if( language.equals(label.getLanguage())){
+					labelAL.add(label);
+				}
+			}
+		}
+		return labelAL.toArray(new Label[0]);
+	}
+
+	public void setResourceURI(String uri){
+		resourceURI = uri;
+	}
+
+	public String getResourceURI(){
+		return resourceURI;
+	}
+	
+}
