Index: SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/RDFSchemaAnalyzer.java
===================================================================
--- SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/RDFSchemaAnalyzer.java (revision 269)
+++ SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/RDFSchemaAnalyzer.java (revision 271)
@@ -16,9 +16,8 @@
 	 * 譏守､ｺ逧�↓RDF縺ｧ譖ｸ縺九ｌ縺ｦ縺�ｋ繧ｯ繝ｩ繧ｹ繧貞叙蠕励☆繧�
 	 * <p>
-	 * 謖�ｮ壹＆繧後◆graphURIs縺ｮ荳ｭ縺九ｉ縲√く繝ｼ繝ｯ繝ｼ繝峨↓繝偵ャ繝医☆繧九Λ繝吶Ν繧呈戟縺､繧ｯ繝ｩ繧ｹ��dfs:Class�峨ｒ縺吶∋縺ｦ霑斐☆
+	 * 繧ｭ繝ｼ繝ｯ繝ｼ繝峨↓繝偵ャ繝医☆繧九Λ繝吶Ν繧呈戟縺､繧ｯ繝ｩ繧ｹ��dfs:Class�峨ｒ縺吶∋縺ｦ霑斐☆
 	 * <br>
 	 * </p>
 	 * 
-	 * @param graphURIs縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� (null繧�聞縺�縺ｮ驟榊�繧ょ庄)
 	 * @param keyword ��ull繧�ｩｺ譁�ｭ励�荳榊庄��
 	 * @param countInstances 繧ｯ繝ｩ繧ｹ縺ｫ螻槭＠縺ｦ縺�ｋ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ謨ｰ繧呈焚縺医ｋ蝣ｴ蜷医�true繧剃ｸ弱∴繧�
@@ -27,37 +26,16 @@
 	 * @since 28.01.2014
 	 */
-	public SClass[] getOWLClasses(String graphURI, String[] keyword, String language, boolean countInstances) throws Exception;
+	public SClass[] getOWLClasses(String[] keyword, String language) throws Exception;
+	
+	public List<SClass> getOWLClassList(String[] keyword, String language) throws Exception;
 
-	public List<SClass> getOWLClassList(String graphURI, String[] keyword, String language, boolean countInstances) throws Exception;
-
-        public SClass[] listClasses(String graphURI, boolean countInstances) throws Exception;
+    public SClass[] listClasses() throws Exception;
 	
-	/**
-	 *縲繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ繧貞叙蠕励☆繧�
-	 * <p>
-	 * 謖�ｮ壹＆繧後◆graphURIs縺ｮ荳ｭ縺九ｉ縲√く繝ｼ繝ｯ繝ｼ繝峨↓繝偵ャ繝医☆繧九Λ繝吶Ν繧呈戟縺､繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ繧偵☆縺ｹ縺ｦ霑斐☆
-	 * <br>
-	 * 縺薙％縺ｧ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ縺ｯ縲〉df:type縺ｮ荳ｻ隱槭→縺励※險倩ｿｰ縺輔ｌ縺ｦ縺�ｋ繧ゅ�繧偵＞縺�
-	 * <br>
-	 * </p>
-	 * 
-	 * @param graphURIs縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� (null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param keyword ��ull繧�ｩｺ譁�ｭ励�荳榊庄��
-	 * @return 繧ｯ繝ｩ繧ｹ縺ｮ驟榊�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-//	public Instance[] getInstances(String[] graphURIs, String keyword) throws Exception;
+    
 
 	/**
 	 *縲謖�ｮ壹＆繧後◆繧ｯ繝ｩ繧ｹ繧定ｵｷ轤ｹ縺ｨ縺励∵�遉ｺ逧�↓險倩ｿｰ縺輔ｌ縺ｦ縺�ｋOWL縺ｮproperty蛻ｶ邏�ｒ隱ｿ縺ｹ縲√◎縺ｮproperty蛻ｶ邏�〒
 	 * 髢｢騾｣縺･縺代ｉ繧後※縺�ｋ繧ｯ繝ｩ繧ｹ繧堤ｶｲ鄒�噪縺ｫ蜿門ｾ励☆繧�
-	 * <p>
-	 * 蜃ｦ逅�ｯｾ雎｡繝��繧ｿ繧暖raphURIs縺ｧ謖�ｮ壹☆繧九％縺ｨ縺後〒縺阪ｋ
-	 * <br>
-	 * <br>
-	 * </p>
 	 * 
-	 * @param graphURIs縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� 縲(null繧�聞縺�縺ｮ驟榊�繧ょ庄)
 	 * @param originClass 襍ｷ轤ｹ縺ｨ縺ｪ繧九け繝ｩ繧ｹ縺ｮURI縲��ull荳榊庄��
 	 * @param limit 隗｣縺ｨ縺励※霑斐＆繧後ｋClassLink驟榊�縺ｮ髟ｷ縺輔�荳企剞蛟､繧呈欠螳壹☆繧九�荳企剞蛟､繧定ｨｭ螳壹＠縺ｪ縺�ｴ蜷医�0莉･荳九�蛟､繧呈欠螳壹☆繧�
@@ -66,54 +44,8 @@
 	 * @since 28.01.2014
 	 */
-	public ClassLink[] getNextClass(String graphURI, String originClass, int limit, boolean countLinks) throws Exception;
+	public ClassLink[] getNextClass(String originClass, int limit) throws Exception;
 
-	/**
-	 *縲謖�ｮ壹＆繧後◆繧ｯ繝ｩ繧ｹ繧定ｵｷ轤ｹ縺ｨ縺励√◎縺ｮ繧ｯ繝ｩ繧ｹ縺ｫ螻槭＠縺ｦ縺�ｋ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ繝ｪ繝ｳ繧ｯ縺悟ｼｵ繧峨ｌ縺ｦ縺�ｋ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ髮�粋繧貞叙蠕励＠縲∝叙蠕励＠縺溘う繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ繧ｯ繝ｩ繧ｹ繧堤ｶｲ鄒�噪縺ｫ蜿門ｾ励☆繧�
-	 * <p>
-	 * 縺薙％縺ｧ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ縺ｯ縲〉df:type縺ｮ荳ｻ隱槭→縺励※險倩ｿｰ縺輔ｌ縺ｦ縺�ｋ繧ゅ�繧偵＞縺�
-	 * <br>
-	 * 蜃ｦ逅�ｯｾ雎｡繝��繧ｿ繧暖raphURIs縺ｧ謖�ｮ壹☆繧九％縺ｨ縺後〒縺阪ｋ
-	 * <br>
-	 * </p>
-	 * 
-	 * @param graphURIs縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� 縲(null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param originClass 襍ｷ轤ｹ縺ｨ縺ｪ繧九け繝ｩ繧ｹ縺ｮURI縲��ull荳榊庄��
-	 * @param limit 隗｣縺ｨ縺励※霑斐＆繧後ｋClassLink驟榊�縺ｮ髟ｷ縺輔�荳企剞蛟､繧呈欠螳壹☆繧九�荳企剞蛟､繧定ｨｭ螳壹＠縺ｪ縺�ｴ蜷医�0莉･荳九�蛟､繧呈欠螳壹☆繧�
-	 * @param countLinks 繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ髢薙�繝ｪ繝ｳ繧ｯ縺ｮ謨ｰ�医ヨ繝ｪ繝励Ν謨ｰ�峨ｒ霑斐＠縺溘＞縺ｨ縺阪�true繧呈欠螳壹☆繧�
-	 * @return ClassLink縺ｮ驟榊�縲ゅ％縺薙↓縺ｯ縲∝叙蠕励＆繧後◆繧ｯ繝ｩ繧ｹ縺ｨ髢｢菫ゅ▼縺代ｉ繧後※縺�ｋ繝励Ο繝代ユ繧｣縲�未菫ゅ�蜷代″縺悟性縺ｾ繧後ｋ縲�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-//	public ClassLink[] getNextClassViaInstanceLink(String[] graphURIs, String originClass, int limit) throws Exception;
+	
+	public LabelMap[] getLabels(String[] resourceURIs, String language) throws Exception;
 
-//	public Path[] getPaths(String startClass, String endClass, int mode, boolean countLinks) throws Exception;
-
-//	public String createSPARQL(Path path) throws Exception;
-
-	/**
-	 *縲謖�ｮ壹＆繧後◆繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ繧定ｵｷ轤ｹ縺ｨ縺励√◎縺ｮ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｫ繝ｪ繝ｳ繧ｯ縺悟ｼｵ繧峨ｌ縺ｦ縺�ｋ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ髮�粋繧貞叙蠕励☆繧九�
-	 *縲蜿門ｾ励＆繧後◆蜷�う繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ繧ｯ繝ｩ繧ｹ繧らｶｲ鄒�噪縺ｫ蜿門ｾ励☆繧�
-	 * <p>
-	 * 縺薙％縺ｧ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ縺ｯ縲〉df:type縺ｮ荳ｻ隱槭→縺励※險倩ｿｰ縺輔ｌ縺ｦ縺�ｋ繧ゅ�繧偵＞縺�
-	 * <br>
-	 * 蜃ｦ逅�ｯｾ雎｡繝��繧ｿ繧暖raphURIs縺ｧ謖�ｮ壹☆繧九％縺ｨ縺後〒縺阪ｋ
-	 * <br>
-	 * </p>
-	 * 
-	 * @param graphURIs縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� 縲(null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param originInstance 襍ｷ轤ｹ縺ｨ縺ｪ繧九う繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮURI縲��ull荳榊庄��
-	 * @param limit 隗｣縺ｨ縺励※霑斐＆繧後ｋInstanceLink驟榊�縺ｮ髟ｷ縺輔�荳企剞蛟､繧呈欠螳壹☆繧九�荳企剞蛟､繧定ｨｭ螳壹＠縺ｪ縺�ｴ蜷医�0莉･荳九�蛟､繧呈欠螳壹☆繧�
-	 * @return InstanceLink縺ｮ驟榊�縲ゅ％縺薙↓縺ｯ縲∝叙蠕励＆繧後◆繧ｯ繝ｩ繧ｹ縺ｨ髢｢菫ゅ▼縺代ｉ繧後※縺�ｋ繝励Ο繝代ユ繧｣縲�未菫ゅ�蜷代″縺悟性縺ｾ繧後ｋ縲�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-// InstanceLink[] getNextInstancesViaInstanceLink(String[] graphURIs, String originInstance,
-//			int limit) throws Exception;
-
- public LabelMap[] getLabels(String graphURI, String[] resourceURIs, String language) throws Exception;
-
-// public ClassLink[] countLinks(String[] graphURIs, String startClassURI,
-//			ClassLink[] classLinks) throws Exception;
-
-//	public SClass[] countInstances(String[] graphURIs, SClass[] classes) throws Exception;
 }
Index: SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java
===================================================================
--- SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 268)
+++ SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 271)
@@ -203,5 +203,5 @@
         SClass[] classes = null;
         try{
-            classes = rdfsa.getOWLClasses(null, null, null, true);
+            classes = rdfsa.getOWLClasses(null, null);
         }catch(Exception e){
             System.err.println(e); return;
@@ -214,5 +214,5 @@
         for (int i = 0 ; i < classes.length; i++ ){
             try{
-                ClassLink[] classLinks = rdfsa.getNextClass(null, classes[i].getClassURI(), limit, true);
+                ClassLink[] classLinks = rdfsa.getNextClass(classes[i].getClassURI(), limit);
                 for (int j = 0 ; j < classLinks.length; j++){
                     Integer n = labelednodes.get(classLinks[j].getLinkedClassURI());
Index: SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java
===================================================================
--- SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java (revision 270)
+++ SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java (revision 271)
@@ -23,6 +23,8 @@
 	private int numOfOriginClassInstances = 0;
 	private int numOfLinkedClassInstances = 0;
-	private boolean domainClassLimitedQ = false;
-	private boolean rangeClassLimitedQ = false;
+
+	public ClassLink(){
+		// nothing to do
+	}
 	
 	
@@ -39,6 +41,5 @@
 	public ClassLink(String propertyURI, String linkedClassURI, String linkedLiteralDatatypeURI, Direction direction, 
 				int numLinks, int numOfOriginInstances, int numOfLinkedInstances,
-				int numOfOriginClassInstances, int numofLinkedClassInstances,
-				boolean domainClassLimitedQ, boolean rangeClassLimitedQ){
+				int numOfOriginClassInstances, int numofLinkedClassInstances){
 		this.propertyURI = propertyURI;
 		this.linkedClassURI = linkedClassURI;
@@ -50,6 +51,4 @@
 		this.numOfOriginClassInstances = numOfOriginClassInstances;
 		this.numOfLinkedClassInstances = numofLinkedClassInstances;
-		this.domainClassLimitedQ = domainClassLimitedQ;
-		this.rangeClassLimitedQ = rangeClassLimitedQ;
 	}
 	
@@ -298,13 +297,4 @@
 	
 	
-	public final boolean isDomainClassLimitedQ() {
-		return domainClassLimitedQ;
-	}
-
-
-	public final boolean isRangeClassLimitedQ() {
-		return rangeClassLimitedQ;
-	}
-
 
 	public final int getNumOfOriginInstances() {
@@ -348,12 +338,4 @@
 
 
-	public final void setDomainClassLimitedQ(boolean domainClassLimitedQ) {
-		this.domainClassLimitedQ = domainClassLimitedQ;
-	}
-
-
-	public final void setRangeClassLimitedQ(boolean rangeClassLimitedQ) {
-		this.rangeClassLimitedQ = rangeClassLimitedQ;
-	}
 		
         private String getLinkedClassLabel(SClass[] classes){
Index: SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/AcquiredStructureAnalyzer.java
===================================================================
--- SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/AcquiredStructureAnalyzer.java (revision 269)
+++ SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/AcquiredStructureAnalyzer.java (revision 271)
@@ -2,9 +2,15 @@
 
 import java.util.*;
+
+import org.biohackathon.SPARQLBuilder.endpointMetadata.MetadataManager;
 
 import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.JenaModelGenerator;
 import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.URICollection;
+import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.ClassPartition;
+import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.ClassRelation;
 import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.CrawledMetadata;
 import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.Dataset;
+import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.Label;
+import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.PropertyPartition;
 
 import com.hp.hpl.jena.query.Query;
@@ -22,414 +28,329 @@
 public class AcquiredStructureAnalyzer implements RDFSchemaAnalyzer {
 
-	private CrawledMetadata crawledMetadata = null;
-
-	public String getEndpointURI(){
-		return crawledMetadata.getEndpointURI();
-	}
-
-	public String[] getGraphURIs(){
-		return crawledMetadata.getGraphURIs();
-	}
-	
-	/*
-	public static void main(String[] args) throws Exception{
-
-		JenaModelGenerator jmGene = new JenaModelGenerator("c:\\temp\\biosamplesF11.ttl");
-//		JenaModelGenerator jmGene = new JenaModelGenerator("c:\\temp\\reactomeF18s.ttl");
-		AcquiredStructureAnalyzer impl 
-			= new AcquiredStructureAnalyzer(jmGene.getEndpointURI(), jmGene.getGraphURIs(), jmGene.getModel());
-
-		System.out.println("--------------------------");
-		SClass[] scs = impl.getOWLClasses(null, null, null, true);
-		System.out.println("list classes:---------------");
-		for(SClass sc: scs){
-			System.out.println(sc.toString());
-		}
-		System.out.println("--------------------------");
-		
-//		ClassLink[] cls = impl.getNextClass(null,"http://www.biopax.org/release/biopax-level3.owl#Protein",100,true );
-//		for(ClassLink cl: cls){
-//			System.out.println(cl.toString());
-//		}
-//		System.out.println("--------------------------");
-		
-	}
-	*/
-	
-	public AcquiredStructureAnalyzer(CrawledMetadata crawledMetadata){
-		this.crawledMetadata = crawledMetadata;
-	}
-
-	private String filterGraphURIs(String orgGraphURIs){
-		// TODO
-		return orgGraphURIs;
-	}
-
-	
-	public SClass[] listClasses(String graphURI, boolean countInstances) throws Exception{
-		return getOWLClasses(graphURI, null, null, countInstances);
-	}
-		
-		
-
-	
-	public SClass[] getOWLClasses(String graphURI, String[] keywords, String language, boolean countInstances) throws Exception{
-		return getOWLClassList(graphURI, keywords, language, countInstances).toArray(new SClass[0]);
-	}
-
-	public List<SClass> getOWLClassList(String graphURI, String[] keywords, String language, boolean countInstances) throws Exception{
-		String targetGraphURI = filterGraphURIs(graphURI);
-
-		Dataset dataset = crawledMetadata.getDataset(targetGraphURI);
-
-		
-		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 ?c ?pLabel ?entities\n");
-		if (targetGraphURI != null) {
-				queryStr.append("FROM <");
-				queryStr.append(targetGraphURI);
-				queryStr.append(">\n");
-			}
-		queryStr.append("WHERE{\n");
-		queryStr.append(" ?cp <").append(URICollection.PROPERTY_VOID_CLASS).append("> ?c. \n");
-		queryStr.append(" ?cp <");
-		queryStr.append(URICollection.PROPERTY_VOID_ENTITIES);
-		queryStr.append("> ?entities. \n");
-		queryStr.append(" OPTIONAL{ ?c <");
-		queryStr.append(URICollection.PROPERTY_RDFS_LABEL);
-		queryStr.append("> ?pLabel. }\n");
-
-		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("\') && \n (");
-
-			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");
-
-		}
-		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.create(query, dataset.getModel());
-			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 && res.getURI() != null) {
-				String uri = res.getURI();
-				int numOfInstances = 0;
-				if (countInstances) {
-					numOfInstances = sol.getLiteral("entities").getInt();
-				} //
-				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 new LinkedList<SClass>(classMap.values());
-	}        
+	// key: endpointURI, value: crawled metadata
+	private HashMap<String, CrawledMetadata> crawledMetadataTable= null;
+
+	public String[] getEndpointURIs(){
+		if( crawledMetadataTable == null ){
+			return new String[0];
+		}else{
+			return crawledMetadataTable.keySet().toArray(new String[0]);
+		}
+	}
+
+	public String[] getGraphURIs(String endpointURI){
+		if( crawledMetadataTable == null ){
+			return new String[0];
+		}else{
+			CrawledMetadata crawledMetadata = crawledMetadataTable.get(endpointURI);
+			if( crawledMetadata == null ){
+				return new String[0];
+			}else{
+				return crawledMetadata.getGraphURIs();
+			}
+		}
+	}
+	
+	
+	public AcquiredStructureAnalyzer(MetadataManager metadataManager){
+		CrawledMetadata[] cmList = metadataManager.getCrawlerMetadataList();
+		crawledMetadataTable = new HashMap<String, CrawledMetadata>();
+		
+		if( cmList != null ){
+			for(CrawledMetadata cm: cmList){
+				String endpointURI = cm.getEndpointURI();
+				crawledMetadataTable.put(endpointURI, cm);
+			}
+		}
+	}
+
+	
+	
+	public SClass[] listClasses() throws Exception{
+		return getOWLClasses(null, null);
+	}
+		
+	
+	public SClass[] getOWLClasses(String[] keywords, String language) throws Exception{
+		return getOWLClassList(keywords, language).toArray(new SClass[0]);
+	}
+
+
+	public List<SClass> getOWLClassList(String[] keywords, String language) throws Exception{
+		ArrayList<SClass> classList = new ArrayList<SClass>();
+
+		Set<String> endpointURISet = crawledMetadataTable.keySet();
+		for(String endpointURI: endpointURISet){
+			CrawledMetadata cm = crawledMetadataTable.get(endpointURI);
+			// default
+			Dataset dataset = cm.getDefaultDataset();
+			List<SClass> tempClassList = getOWLClassList(dataset, keywords, language);
+			for(SClass sClass: tempClassList){
+				classList.add(sClass);
+			}
+
+			// graphs
+			String[] graphURIs = cm.getGraphURIs();
+			if( graphURIs != null ){
+				for(String graphURI: graphURIs){
+					dataset = cm.getDataset(graphURI);
+					tempClassList = getOWLClassList(dataset, keywords, language);
+					for(SClass sClass: tempClassList){
+						classList.add(sClass);
+					}
+				}
+			}
+		}
+		return classList;
+	}
+
+	private List<SClass> getOWLClassList(Dataset dataset, String[] keywords, String language) throws Exception{
+		ArrayList<SClass> results = new ArrayList<SClass>();
+		
+		ClassPartition[] classPartitionList = dataset.getClassPartitions();
+		if( classPartitionList == null || classPartitionList.length == 0 ){
+			return new ArrayList<SClass>();
+		}
+		for( ClassPartition cp: classPartitionList){
+			String classURI = cp.classDef.classURI;
+			Label[] rLabels = cp.classDef.labels;
+			org.biohackathon.SPARQLBuilder.OWL.Label[] labels = null; 
+			if( rLabels == null ){
+				labels = new org.biohackathon.SPARQLBuilder.OWL.Label[0];
+			}else{
+				labels = new org.biohackathon.SPARQLBuilder.OWL.Label[rLabels.length];
+				for(int i = 0; i < rLabels.length; i++ ) {
+					labels[i] = new org.biohackathon.SPARQLBuilder.OWL.Label(rLabels[i].value, rLabels[i].language);
+				}
+			}
+			int entities = cp.entities;
+
+			if( keywords == null || keywords.length == 0 ){
+				SClass sClass = new SClass(classURI, labels, entities);
+				results.add(sClass);
+			}else{
+				boolean hit = false;
+				for(org.biohackathon.SPARQLBuilder.OWL.Label label: labels){
+					if( language == null || label.getLanguage().equals(language)){
+						String value = label.getLabel();
+						if( value != null ){
+							value = value.toLowerCase().trim();
+							for(String keyword: keywords){
+								if( value.contains(keyword.toLowerCase().trim())){
+									hit = true;
+									break;
+								}
+							}
+						}
+					}
+					if( hit ){
+						SClass sClass = new SClass(classURI, labels, entities);
+						results.add(sClass);
+					}
+				}
+			}
+		}
+		return results;
+	}
         
-/*
-	
-	public Instance[] getInstances(String[] graphURIs, String keyword) throws Exception;
-*/
-
-
-	public ClassLink[] getNextClass(String graphURI, String originClass, int limit, boolean countLinks) throws Exception{
-		String targetGraphURI = filterGraphURIs(graphURI);
-		Dataset dataset = crawledMetadata.getDataset(targetGraphURI);
-
-		
-		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");
-
-		// SELECT
-		queryStr.append("SELECT DISTINCT ?indPropCat ?c ?dat ?d ?p ?numLnkInsStart ?numLnkInsEnd ?numInsDom ?numInsRan ?numTriples\n");
-
-		if (targetGraphURI != null) {
-				queryStr.append("FROM <");
-				queryStr.append(targetGraphURI);
-				queryStr.append(">\n");
-		}
-
-		queryStr.append("WHERE{\n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_RDF_TYPE).append("> <").append(URICollection.RESOURCE_SB_CLASS_RELATION).append(">. \n");
-		queryStr.append(" ?propPart <").append(URICollection.PROPERTY_SB_CLASS_RELATION).append("> ?cr. \n");
-		queryStr.append(" ?propPart <").append(URICollection.PROPERTY_VOID_PROPERTY).append("> ?p. \n");
-		
-		queryStr.append(" {");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_SB_SUBJECT_CLASS).append("> <" + originClass + ">. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_SB_OBJECT_CLASS).append("> ?d. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_DISTINCT_SUBJECTS).append("> ?numLnkInsStart. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_DISTINCT_OBJECTS).append("> ?numLnkInsEnd. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_TRIPLES).append("> ?numTriples. \n");
-//		queryStr.append(" ?cr <http://sparqlbuilder.org/startClassLimitedQ> ?isStartClsLim. \n");
-//		queryStr.append(" ?cr <http://sparqlbuilder.org/endClassLimitedQ> ?isEndClsLim. \n");
-		queryStr.append("}\n");
-		queryStr.append(" UNION\n");
-		queryStr.append(" {");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_SB_SUBJECT_CLASS).append("> <" + originClass + ">. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_SB_OBJECT_DATATYPE).append("> ?dat. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_DISTINCT_SUBJECTS).append("> ?numLnkInsStart. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_DISTINCT_OBJECTS).append("> ?numLnkInsEnd. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_TRIPLES).append("> ?numTriples. \n");
-//		queryStr.append(" ?cr <http://sparqlbuilder.org/startClassLimitedQ> ?isStartClsLim. \n");
-//		queryStr.append(" ?cr <http://sparqlbuilder.org/endClassLimitedQ> ?isEndClsLim. \n");
-		queryStr.append("}\n");
-		queryStr.append(" UNION\n");
-		queryStr.append(" {");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_SB_OBJECT_CLASS).append("> <" + originClass + ">. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_SB_SUBJECT_CLASS).append("> ?c. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_DISTINCT_SUBJECTS).append("> ?numLnkInsEnd. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_DISTINCT_OBJECTS).append("> ?numLnkInsStart. \n");
-		queryStr.append(" ?cr <").append(URICollection.PROPERTY_VOID_TRIPLES).append("> ?numTriples. \n");
-//		queryStr.append(" ?cr <http://sparqlbuilder.org/startClassLimitedQ> ?isEndClsLim. \n");
-//		queryStr.append(" ?cr <http://sparqlbuilder.org/endClassLimitedQ> ?isStartClsLim. \n");
-		queryStr.append("}\n");
-		
-//		queryStr.append(" ?propPart <").append(URICollection.PROPERTY_RDF_TYPE).append("> <").append(URICollection.PROPERTY_VOID_PROPERTY_PARTITION).append(">. \n");
-		queryStr.append(" ?propPart <").append(URICollection.PROPERTY_SB_PROPERTY_CATEGORY).append("> ?indPropCat. \n");
-
-		queryStr.append(" ?propPart <").append(URICollection.PROPERTY_VOID_DISTINCT_SUBJECTS).append("> ?numInsDom. \n");
-		queryStr.append(" ?propPart <").append(URICollection.PROPERTY_VOID_DISTINCT_OBJECTS).append("> ?numInsRan. \n");
-	
-		queryStr.append("}\n");
-		
-	
-		if (limit > 0) {
-			queryStr.append("limit ");
-			queryStr.append(limit);
-			queryStr.append("\n");
-		}
-
-//		System.out.println("getNextClasses SPARQL Query: ");
-//		System.out.println(queryStr.toString());
-
-		Query query = QueryFactory.create(queryStr.toString());
-		QueryExecution qexec = null;
-		ResultSet results = null;
-		try {
-			long start = System.currentTimeMillis();
-			qexec = QueryExecutionFactory.create(query, dataset.getModel());
-			results = qexec.execSelect();
-			long end = System.currentTimeMillis();
-			System.out.println("EXEC TIME: " + (end - start));
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			throw ex;
-		}
-
-		ArrayList<ClassLink> solCLs = new ArrayList<ClassLink>();
-		for (; results.hasNext();) {
-			QuerySolution sol = results.next();
-			Resource pro = sol.getResource("p");
-			String clsURI = null;
-			String datURI = null;
-			if (pro != null) {
-				int indPropCat = 4;
-				Literal indPropCatLit = sol.getLiteral("indPropCat");
-				if( indPropCatLit != null ){
-					indPropCat = indPropCatLit.getInt();
-				}
-				if( indPropCat < 4 ) {
-				String proURI = pro.getURI();
-				Resource ccls = sol.getResource("c");
-				Resource dcls = sol.getResource("d");
-				Resource dat = sol.getResource("dat");
-				Direction direction = null;
-				if(ccls != null && dcls == null ){
-					// direction forward
-					direction = Direction.reverse;
-					clsURI = ccls.getURI();
-				}else{
-					if( ccls == null && dcls != null ){
-						direction = Direction.forward;
-						clsURI = dcls.getURI();
-					}else{
-						if( ccls == null && dat != null && dcls == null ){
-							clsURI = null;
-							direction = Direction.forward;
-							datURI = dat.getURI();
-						}
-					}
-				}
-				
-				
-				int numTriples = 0;
-				Literal numTriplesLit = sol.getLiteral("numTriples");
-				if( numTriplesLit != null ){
-					numTriples = numTriplesLit.getInt();
-				}
-
-				int numLnkInsStart = 0;
-				Literal numInsStartLit = sol.getLiteral("numLnkInsStart");
-				if( numInsStartLit != null ){
-					numLnkInsStart = numInsStartLit.getInt();
-				}
-				int numLnkInsEnd = 0;
-				Literal numInsEndLit = sol.getLiteral("numLnkInsEnd");
-				if( numInsEndLit != null ){
-					numLnkInsEnd = numInsEndLit.getInt();
-				}
-
-				int numInsDom = 0;
-				Literal numInsDomLit = sol.getLiteral("numInsDom");
-				if( numInsDomLit != null ){
-					numInsDom = numInsDomLit.getInt();
-				}
-				int numInsRan = 0;
-				Literal numInsRanLit = sol.getLiteral("numInsRan");
-				if( numInsRanLit != null ){
-					numInsRan = numInsRanLit.getInt();
-				}
-
-				boolean isStartClsLim = false;
-				Literal isStartClsLimLit = sol.getLiteral("isStartClsLim");
-				if( isStartClsLimLit != null ){
-					isStartClsLim = isStartClsLimLit.getBoolean();
-				}
-				boolean isEndClsLim = false;
-				Literal isEndClsLimLit = sol.getLiteral("isEndClsLim");
-				if( isEndClsLimLit != null ){
-					isEndClsLim = isEndClsLimLit.getBoolean();
-				}
-				
-				ClassLink cl = new ClassLink(proURI, clsURI, datURI, direction,
-						numTriples, numInsDom, numInsRan,  numLnkInsStart, numLnkInsEnd, isStartClsLim, isEndClsLim);
-				solCLs.add(cl);
-
-				}
-			}
-		}
-		qexec.close();	
-		return solCLs.toArray(new ClassLink[0]);
-	}
-
-	
-	
-	/*
-
-	public ClassLink[] getNextClassViaInstanceLink(String[] graphURIs, String originClass, int limit) throws Exception;
-
-	public Path[] getPaths(String startClass, String endClass, int mode, boolean countLinks) throws Exception;
-
-	public String createSPARQL(Path path) throws Exception;
-
- InstanceLink[] getNextInstancesViaInstanceLink(String[] graphURIs, String originInstance,
-			int limit) throws Exception;
-*/
-
-	public LabelMap[] getLabels(String graphURI, String[] resourceURIs,
-			String language) throws Exception {
-//		if (resourceURI == null || resourceURIs.length == 0) {
-//			return new LabelMap[0];
-//		}
-	
-		String targetGraphURI = filterGraphURIs(graphURI);
-		Dataset dataset = crawledMetadata.getDataset(targetGraphURI);
-
-		
-		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 (targetGraphURI != null) {
-				queryStr.append("FROM <");
-				queryStr.append(targetGraphURI);
-				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.create(query, dataset.getModel());
-		
-		ResultSet results = qexec.execSelect();
-		HashMap<String, LabelMap> lMap = new HashMap<String, LabelMap>();
-		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]);
-	}
-
-/*
- 	public ClassLink[] countLinks(String[] graphURIs, String startClassURI, ClassLink[] classLinks) throws Exception;
-	public SClass[] countInstances(String[] graphURIs, SClass[] classes) throws Exception;
-	
-*/
+
+	
+	
+
+	public ClassLink[] getNextClass(String originClass, int limit) throws Exception{
+
+		ArrayList<ClassLink> classLinkList = new ArrayList<ClassLink>();
+		
+		Set<String> endpointURISet = crawledMetadataTable.keySet();
+		for(String endpointURI: endpointURISet){
+			CrawledMetadata cm = crawledMetadataTable.get(endpointURI);
+			// default
+			Dataset dataset = cm.getDefaultDataset();
+			List<ClassLink> tempClassLinkList = getNextClass(endpointURI, null, dataset, originClass, limit);
+			for(ClassLink classLink: tempClassLinkList){
+				classLinkList.add(classLink);
+			}
+
+			// graphs
+			String[] graphURIs = cm.getGraphURIs();
+			if( graphURIs != null ){
+				for(String graphURI: graphURIs){
+					dataset = cm.getDataset(graphURI);
+					tempClassLinkList = getNextClass(endpointURI, graphURI, dataset, originClass, limit);
+					for(ClassLink classLink: tempClassLinkList){
+						classLinkList.add(classLink);
+					}
+				}
+			}
+		}
+		return classLinkList.toArray(new ClassLink[0]);
+	}
+		
+
+	
+	private List<ClassLink> getNextClass(String endpointURI, String graphURI, Dataset dataset, String originClass, int limit) throws Exception{
+		ArrayList<ClassLink> classLinkList = new ArrayList<ClassLink>();
+		
+		PropertyPartition[] pps = dataset.getPropertyPartitions();
+		if( pps == null ){
+			return classLinkList;
+		}
+		
+		for(PropertyPartition pp: pps){
+			ClassRelation[] classRelations = pp.classRelations;
+			if( classRelations != null ){
+				for(ClassRelation classRelation: classRelations){
+					String subjClassURI = classRelation.subjectClassURI;
+					String objClassURI = classRelation.objectClassURI;
+					boolean forward = false;
+					boolean reverse = false;
+					if( objClassURI != null && objClassURI.equals(originClass) ){
+						if( subjClassURI != null ){
+							reverse = true;
+						}
+					}
+					if(subjClassURI != null && subjClassURI.equals(originClass)){
+						if( objClassURI != null || classRelation.objectDatatypeURI != null ){
+							forward = true;
+						}
+					}
+					ClassLink classLink = null;
+					if( forward && !reverse ){
+						classLink = new ClassLink();
+						classLink.setDirection(Direction.forward);
+						classLink.setNumOfOriginClassInstances(classRelation.distinctSubjects);
+						if( objClassURI != null ){
+							classLink.setLinkedClassURI(objClassURI);
+							classLink.setNumOfLinkedClassInstances(classRelation.distinctObjects);
+						}else{
+							classLink.setLinkedLiteralDatatypeURI(classRelation.objectDatatypeURI);
+							classLink.setNumOfLinkedInstances(classRelation.triples);
+						}
+						classLink.setNumOfOriginInstances(pp.distinctSubjects);
+						classLink.setNumOfLinkedInstances(pp.distinctObjects);
+
+					}
+					if( !forward && reverse ){
+						classLink = new ClassLink();
+						classLink.setDirection(Direction.reverse);
+						classLink.setLinkedClassURI(objClassURI);
+						classLink.setNumOfOriginClassInstances(classRelation.distinctObjects);
+						classLink.setNumOfOriginInstances(pp.distinctObjects);
+						classLink.setNumOfLinkedInstances(pp.distinctSubjects);
+						classLink.setNumOfLinkedClassInstances(classRelation.distinctSubjects);
+					}
+						if( forward && reverse){
+							classLink = new ClassLink();
+							classLink.setDirection(Direction.both);
+							classLink.setLinkedClassURI(objClassURI);
+							classLink.setNumOfOriginClassInstances(classRelation.distinctSubjects);
+							classLink.setNumOfOriginInstances(pp.distinctSubjects);
+							classLink.setNumOfLinkedInstances(pp.distinctObjects);
+							classLink.setNumOfLinkedClassInstances(classRelation.distinctObjects);
+						}
+						// hit
+						if( classLink != null ){
+							classLink.setEndpointURI(endpointURI);
+							classLink.setGraphURI(graphURI);
+							classLink.setPropertyURI(pp.propertyDef.propertyURI);
+							classLink.setNumOfLinks(classRelation.triples);
+							classLinkList.add(classLink);
+						}
+					}
+				}
+			}
+		return classLinkList;
+	}
+		
+
+	
+	
+
+	
+	
+	public LabelMap[] getLabels(String[] resourceURIs, String language) throws Exception {
+		if( resourceURIs == null || resourceURIs.length == 0 ){
+			return new LabelMap[0];
+		}
+		
+		HashSet<String> resourceURIset = new HashSet<String>();
+		for(String resourceURI: resourceURIs){
+			resourceURIset.add(resourceURI);
+		}
+		
+		HashMap<String, LabelMap> labelMapTable = new HashMap<String, LabelMap>();
+		
+		Set<String> endpointURISet = crawledMetadataTable.keySet();
+		for(String endpointURI: endpointURISet){
+			CrawledMetadata cm = crawledMetadataTable.get(endpointURI);
+			// default
+			Dataset dataset = cm.getDefaultDataset();
+			labelMapTable = getLabels(dataset, resourceURIset, language, labelMapTable);
+
+			// graphs
+			String[] graphURIs = cm.getGraphURIs();
+			if( graphURIs != null ){
+				for(String graphURI: graphURIs){
+					dataset = cm.getDataset(graphURI);
+					labelMapTable = getLabels(dataset, resourceURIset, language, labelMapTable);
+				}
+			}
+		}
+		return labelMapTable.values().toArray(new LabelMap[0]);
+	}
+			
+		
+	private HashMap<String, LabelMap> getLabels(Dataset dataset, HashSet<String> resourceURISet , String language, HashMap<String, LabelMap> labelMapTable) throws Exception {
+		ClassPartition[] cps = dataset.getClassPartitions();
+		if( cps != null ){
+			for(ClassPartition cp: cps){
+				String uri = cp.classDef.classURI;
+				if( resourceURISet.contains(uri)){
+					Label[] rLabels = cp.classDef.labels;
+					if( rLabels != null ){
+						for(Label rLabel: rLabels){
+							if( language == null || ( rLabel.language == null || rLabel.language.equals(language))){
+								LabelMap labelMap = null;
+								if( labelMapTable.containsKey(uri)){
+									labelMap = labelMapTable.get(uri);
+								}else{
+									labelMap = new LabelMap();
+									labelMapTable.put(uri, labelMap);
+									labelMap.setResourceURI(uri);
+								}
+								labelMap.addLabel(new org.biohackathon.SPARQLBuilder.OWL.Label(rLabel.value, rLabel.language));
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		PropertyPartition[] pps = dataset.getPropertyPartitions();
+		if( pps != null ){
+			for(PropertyPartition pp: pps){
+				String uri = pp.propertyDef.propertyURI;
+				if( resourceURISet.contains(uri)){
+					Label[] rLabels = pp.propertyDef.labels;
+					if( rLabels != null ){
+						for(Label rLabel: rLabels){
+							if( language == null || ( rLabel.language == null || rLabel.language.equals(language))){
+								LabelMap labelMap = null;
+								if( labelMapTable.containsKey(uri)){
+									labelMap = labelMapTable.get(uri);
+								}else{
+									labelMap = new LabelMap();
+									labelMapTable.put(uri, labelMap);
+									labelMap.setResourceURI(uri);
+								}
+								labelMap.addLabel(new org.biohackathon.SPARQLBuilder.OWL.Label(rLabel.value, rLabel.language));
+							}
+						}
+					}
+				}
+			}
+		}
+		return labelMapTable;
+	}
 
 }
Index: SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/QueryPathGenerator.java
===================================================================
--- SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/QueryPathGenerator.java (revision 268)
+++ SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/QueryPathGenerator.java (revision 271)
@@ -43,5 +43,5 @@
         RDFSchemaAnalyzer analyzer = analyzers.get(ep);
         try {
-            return analyzer.getOWLClasses(null, null, null, true);
+            return analyzer.getOWLClasses(null, null);
         }catch(Exception e){
             System.err.println(e);
@@ -60,5 +60,5 @@
             while ( ait.hasNext() ){
                 RDFSchemaAnalyzer analyzer = ait.next();
-                cl.addAll(analyzer.getOWLClassList(null, null, null, true));
+                cl.addAll(analyzer.getOWLClassList(null, null));
             }
         }catch(Exception e){
Index: SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/RDFSchemaAnalyzerFactory.java
===================================================================
--- SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/RDFSchemaAnalyzerFactory.java (revision 269)
+++ SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/RDFSchemaAnalyzerFactory.java (revision 271)
@@ -1,18 +1,11 @@
 package org.biohackathon.SPARQLBuilder.OWL;
 
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
+import org.biohackathon.SPARQLBuilder.endpointMetadata.MetadataManager;
+import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.CrawledMetadata;
 
-import org.biohackathon.SPARQLBuilder.endpointMetadata.MetadataFile;
-import org.biohackathon.SPARQLBuilder.endpointMetadata.MetadataManager;
-
-import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.JenaModelGenerator;
-import jp.riken.accc.db.sparqlBuilderMetadata.crawler.dataStructure.sparql.crawler.CrawledMetadata;
 
 public class RDFSchemaAnalyzerFactory {
 
 	private MetadataManager metadataManager = null;
-//	private Map<String, String> acquiredRDFFiles = null;
 	private static final String FILENAME = "C:\\cdata";
         
@@ -20,5 +13,4 @@
             try{
             	metadataManager = new MetadataManager(fileName);
-//            	setAcqiredRDFFiles(new File(fileName));
             }catch(Exception e){
                 System.err.println(e);
@@ -29,5 +21,4 @@
             try{
             	metadataManager = new MetadataManager(FILENAME);
-//            	setAcqiredRDFFiles(new File(FILENAME));
             }catch(Exception e){
                 System.err.println(e);
@@ -35,12 +26,5 @@
         }
 
-//	private void setAcqiredRDFFiles(String dirFile) throws Exception{
-//		setAcqiredRDFFiles(new File(dirFile));
-//	}
 	
-//	private void setAcqiredRDFFiles(File data) throws Exception{
-//		StructureCrawler sc = new StructureCrawler(data);
-//		acquiredRDFFiles = sc.getAcquiredStructureFiles();
-//	}
 
 	public String[] getEndpointURIList(){
@@ -53,11 +37,6 @@
 	
 
-	public RDFSchemaAnalyzer create(String uri) throws Exception{
-		CrawledMetadata crawledMetadata = metadataManager.getCrawledMetadata(uri);
-		if( crawledMetadata == null ){
-			return new EndpointAnalyzer(uri);
-		}else{
-			return new AcquiredStructureAnalyzer(crawledMetadata);
-		}
+	public RDFSchemaAnalyzer create() throws Exception{
+			return new AcquiredStructureAnalyzer(metadataManager);
 	}
 }
Index: SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/EndpointAnalyzer.java
===================================================================
--- SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/EndpointAnalyzer.java (revision 269)
+++  (revision )
@@ -1,1154 +1,0 @@
-package org.biohackathon.SPARQLBuilder.OWL;
-
-import java.util.*;
-
-import com.hp.hpl.jena.query.Query;
-import com.hp.hpl.jena.query.QueryExecution;
-import com.hp.hpl.jena.query.QueryExecutionFactory;
-import com.hp.hpl.jena.query.QueryFactory;
-import com.hp.hpl.jena.query.QuerySolution;
-import com.hp.hpl.jena.query.ResultSet;
-import com.hp.hpl.jena.rdf.model.Literal;
-import com.hp.hpl.jena.rdf.model.Resource;
-
-/**
- * 繧ｯ繧ｨ繝ｪ繧堤函謌舌☆繧九◆繧√�讖溯�繧呈署萓帙☆繧区ｸ繧ｯ繝ｩ繧ｹ
- * 
- * @author Norio KOBAYASHI
- * @since 28.01.2014
- * @version 29.01.2014
- */
-public class EndpointAnalyzer implements RDFSchemaAnalyzer {
-
-	// private Model model = null;
-	private String endpointURI = null;
-
-	/**
-	 * 繧｢繧ｯ繧ｻ繧ｹ縺吶ｋSPARQL endpoint縺ｮURI繧呈欠螳壹☆繧区ｧ区�蟄�
-	 * 
-	 * @param endpointURI
-	 *            縲繧｢繧ｯ繧ｻ繧ｹ縺吶ｋSPARQL endpoint縺ｮURI
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-	public EndpointAnalyzer(String endpointURI) {
-		this.endpointURI = endpointURI;
-	}
-
-	/**
-	 * 繝�せ繝医↓菴ｿ逕ｨ縺吶ｋmain繝｡繧ｽ繝�ラ
-	 * <p>
-	 * 繧ｯ繧ｨ繝ｪ繝薙Ν繝繝ｼ縺ｮ譛ｬ逡ｪ繝励Ο繧ｰ繝ｩ繝縺ｧ縺ｯ縺薙�繝｡繧ｽ繝�ラ縺ｯ菴ｿ逕ｨ縺励↑縺�
-	 * </p>
-	 * 
-	 * @param args
-	 *            菴ｿ逕ｨ縺励↑縺�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-	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 = { "Frequency", "Class" };
-		String[] graphURIs = new String[0];
-
-		// keyword = null;
-
-		EndpointAnalyzer builder = new EndpointAnalyzer(sparqlEndpoint);
-
-		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
-		 * (SClass cls : clz) { System.out.println(cls); } clz =
-		 * builder.countInstances(null, clz); for (SClass cls : clz) {
-		 * System.out.println(cls); }
-		 */
-
-		/*
-		 * System.out.println("CLS");
-		 * 
-		 * String uri =
-		 * "http://purl.jp/bio/10/lsd/ontology/201209#EnglishEntry";
-		 * 
-		 * ClassLink[] cls = null; try{ cls = builder.getNextClass(null, uri,
-		 * 100, false); }catch(Exception ex) { ex.printStackTrace(); }
-		 * 
-		 * System.out.println("Solutions: "); if (cls != null) { for (ClassLink
-		 * cl : cls) { System.out.println(cl.toString()); } cls =
-		 * builder.countLinks(null, uri, cls); for (ClassLink cl : cls) {
-		 * System.out.println(cl.toString()); } }
-		 */
-		/*
-		 * 
-		 * String uri =
-		 * "http://purl.jp/bio/10/lsd/ontology/201209#EnglishEntry";
-		 * 
-		 * ClassLink[] cls = null;
-		 * 
-		 * System.out.println("CLS-INS"); cls = null; try{ cls =
-		 * builder.getNextClassViaInstanceLink(null, uri, 100); }catch(Exception
-		 * ex){ ex.printStackTrace(); } if (cls != null) { for (ClassLink cl :
-		 * cls) { System.out.println(cl.toString()); } }
-		 */
-		/*
-		 * System.out.println("Instances"); Instance[] ins =
-		 * builder.getInstances(null, "\"A.C. Reed\"@en"); if (ins != null) {
-		 * for (Instance in : ins) { System.out.println(in.toString()); } }
-		 */
-		/*
-		 * System.out.println("INS-INS"); ins = builder.getInstances(null,
-		 * "\"A.C. Reed\"@en"); InstanceLink[] iLinks =
-		 * builder.getNextInstancesViaInstanceLink(null,
-		 * ins[0].getInstanceURI(), 100);
-		 * 
-		 * if (iLinks != null) { for (InstanceLink in : iLinks) {
-		 * System.out.println(in.toString()); } }
-		 */
-	}
-
-	/**
-	 * 譏守､ｺ逧�↓RDF縺ｧ譖ｸ縺九ｌ縺ｦ縺�ｋ繧ｯ繝ｩ繧ｹ繧貞叙蠕励☆繧�
-	 * <p>
-	 * 謖�ｮ壹＆繧後◆graphURIs縺ｮ荳ｭ縺九ｉ縲√く繝ｼ繝ｯ繝ｼ繝峨↓繝偵ャ繝医☆繧九Λ繝吶Ν繧呈戟縺､繧ｯ繝ｩ繧ｹ��dfs:Class�峨ｒ縺吶∋縺ｦ霑斐☆ <br>
-	 * </p>
-	 * 
-	 * @param graphURIs
-	 *            縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� (null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param keyword
-	 *            ��ull繧�ｩｺ譁�ｭ励�荳榊庄��
-	 * @return 繧ｯ繝ｩ繧ｹURI縺ｮ驟榊�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-
-	public List<SClass> getOWLClassList(String graphURI, String[] keywords,
-			String language,
-
-			boolean countInstances) throws Exception {
-            return null; //dummy
-        }
-        
-//        public List<SClass> 
-        
-	public SClass[] getOWLClasses(String graphURI, String[] keywords,
-			String language,
-
-			boolean countInstances) throws Exception {
-		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 ?c ?pLabel (COUNT(?i) AS ?numOfInstances)\n");
-		} else {
-			queryStr.append("SELECT DISTINCT ?c ?pLabel \n");
-		}
-		if (graphURI != null) {
-//			for (String graphURI : graphURIs) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-//			}
-		}
-		queryStr.append("WHERE{\n");
-
-		//
-		queryStr.append(" {?c rdf:type rdfs:Class} UNION {?c rdf:type owl:Class}\n");
-		// queryStr.append("  ?i rdf:type ?c.\n");
-
-		if (countInstances) {
-			queryStr.append("  ?c rdfs:label ?label.\n");
-		}
-		queryStr.append("  ?c rdfs:label ?pLabel.\n");
-		if (countInstances) {
-			queryStr.append("      ?i rdf:type ?c.\n");
-		}
-		// queryStr.append("      ?c rdfs:label ");
-		// queryStr.append(keyword);
-		// queryStr.append(".");
-
-		// 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("\') && \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");
-
-		}
-
-		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("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 graphURI, boolean countInstances)
-			throws Exception {
-		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 (graphURI != 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]);
-
-	}
-
-	/**
-	 * 縲繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ繧貞叙蠕励☆繧�
-	 * <p>
-	 * 謖�ｮ壹＆繧後◆graphURIs縺ｮ荳ｭ縺九ｉ縲√く繝ｼ繝ｯ繝ｼ繝峨↓繝偵ャ繝医☆繧九Λ繝吶Ν繧呈戟縺､繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ繧偵☆縺ｹ縺ｦ霑斐☆ <br>
-	 * 縺薙％縺ｧ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ縺ｯ縲〉df:type縺ｮ荳ｻ隱槭→縺励※險倩ｿｰ縺輔ｌ縺ｦ縺�ｋ繧ゅ�繧偵＞縺�<br>
-	 * </p>
-	 * 
-	 * @param graphURIs
-	 *            縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� (null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param keyword
-	 *            ��ull繧�ｩｺ譁�ｭ励�荳榊庄��
-	 * @return 繧ｯ繝ｩ繧ｹURI縺ｮ驟榊�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-	public Instance[] getInstances(String graphURI, String keyword)
-			throws Exception {
-		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 ?ins ?c \n");
-		if (graphURI != null) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-		}
-		queryStr.append("WHERE{\n");
-		// queryStr.append(" {?c rdf:type rdfs:Class} UNION {?c rdf:type owl:Class}\n");
-
-		queryStr.append("      ?ins rdf:type ?c.\n");
-		queryStr.append("      ?ins rdfs:label ");
-		queryStr.append(keyword);
-		queryStr.append(".\n");
-		queryStr.append(" FILTER (?c != rdf:Property)");
-		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, HashSet<String>> instanceMap = new HashMap<String, HashSet<String>>();
-		for (; results.hasNext();) {
-			QuerySolution sol = results.next();
-			Resource cls = sol.getResource("c");
-			Resource ins = sol.getResource("ins");
-			String clsURI = cls.getURI();
-			String insURI = ins.getURI();
-			if (instanceMap.containsKey(insURI)) {
-				HashSet<String> classes = instanceMap.get(insURI);
-				classes.add(clsURI);
-			} else {
-				HashSet<String> classes = new HashSet<String>();
-				instanceMap.put(insURI, classes);
-				classes.add(clsURI);
-			}
-		}
-		qexec.close();
-		Set<String> keySet = instanceMap.keySet();
-		ArrayList<Instance> instanceList = new ArrayList<Instance>();
-		for (String key : keySet) {
-			Instance ins = new Instance(key, instanceMap.get(key).toArray(
-					new String[0]));
-			instanceList.add(ins);
-		}
-		return instanceList.toArray(new Instance[0]);
-	}
-
-	/**
-	 * 縲謖�ｮ壹＆繧後◆繧ｯ繝ｩ繧ｹ繧定ｵｷ轤ｹ縺ｨ縺励∵�遉ｺ逧�↓險倩ｿｰ縺輔ｌ縺ｦ縺�ｋOWL縺ｮproperty蛻ｶ邏�ｒ隱ｿ縺ｹ縲√◎縺ｮproperty蛻ｶ邏�〒
-	 * 髢｢騾｣縺･縺代ｉ繧後※縺�ｋ繧ｯ繝ｩ繧ｹ繧堤ｶｲ鄒�噪縺ｫ蜿門ｾ励☆繧�
-	 * <p>
-	 * 蜃ｦ逅�ｯｾ雎｡繝��繧ｿ繧暖raphURIs縺ｧ謖�ｮ壹☆繧九％縺ｨ縺後〒縺阪ｋ <br>
-	 * <br>
-	 * </p>
-	 * 
-	 * @param graphURIs
-	 *            縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� 縲(null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param originClass
-	 *            襍ｷ轤ｹ縺ｨ縺ｪ繧九け繝ｩ繧ｹ縺ｮURI縲��ull荳榊庄��
-	 * @param limit
-	 *            隗｣縺ｨ縺励※霑斐＆繧後ｋClassLink驟榊�縺ｮ髟ｷ縺輔�荳企剞蛟､繧呈欠螳壹☆繧九�荳企剞蛟､繧定ｨｭ螳壹＠縺ｪ縺�ｴ蜷医�0莉･荳九�蛟､繧呈欠螳壹☆繧�
-	 * @return ClassLink縺ｮ驟榊�縲ゅ％縺薙↓縺ｯ縲∝叙蠕励＆繧後◆繧ｯ繝ｩ繧ｹ縺ｨ髢｢菫ゅ▼縺代ｉ繧後※縺�ｋ繝励Ο繝代ユ繧｣縲�未菫ゅ�蜷代″縺悟性縺ｾ繧後ｋ縲�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-	public ClassLink[] getNextClass(String graphURI, String originClass,
-			int limit, boolean countLinks) throws Exception {
-		ClassLink[] cLinks = getNextClassSub(graphURI, originClass, limit,
-				false);
-		if (countLinks) {
-			cLinks = countLinks(graphURI, originClass, cLinks);
-		}
-		return cLinks;
-	}
-
-	private ClassLink[] getNextClassSub(String graphURI, String originClass,
-			int limit, boolean countLinks) throws Exception {
-		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");
-
-		// SELECT
-		if (countLinks) {
-			queryStr.append("SELECT DISTINCT ?p ?pDirection ?c (COUNT(?oci) AS ?numOfOriginalClassInstances) (COUNT(?lci) AS ?numOfLinkedClassInstances) (COUNT(?s) AS ?numOfLinks) (COUNT(DISTINCT(?s)) AS ?numOfLinkedInstances) \n");
-		} else {
-			queryStr.append("SELECT DISTINCT ?p ?pDirection ?c \n");
-		}
-
-		if (graphURI != null) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-		}
-		queryStr.append("WHERE{\n");
-		// queryStr.append("  { ?c rdf:type rdfs:Class. }\n  UNION\n  { ?c rdf:type owl:Class. }\n");
-		queryStr.append("  { ?p rdfs:domain <");
-		queryStr.append(originClass);
-		queryStr.append(">.\n    ?p rdfs:range ?c.\n");
-
-		if (countLinks) {
-			queryStr.append("    ?o ?p ?s.");
-		} else {
-			queryStr.append("filter(exists{\n");
-			queryStr.append("  ?o rdf:type ?c.\n");
-			queryStr.append(" ?s rdf:type <");
-			queryStr.append(originClass);
-			queryStr.append(">.\n");
-			queryStr.append("	?s ?p ?o.})\n");
-		}
-
-		queryStr.append("}\n  UNION\n");
-		queryStr.append("  { ?p rdfs:range <");
-		queryStr.append(originClass);
-		queryStr.append(">.\n");
-		queryStr.append("    ?p rdfs:domain ?c.\n");
-
-		if (countLinks) {
-			queryStr.append("    ?s ?p ?o.");
-		} else {
-			queryStr.append("filter(exists{\n");
-			queryStr.append("  ?s rdf:type ?c.\n");
-			queryStr.append(" ?o rdf:type <");
-			queryStr.append(originClass);
-			queryStr.append(">.\n");
-			queryStr.append("	?s ?p ?o.})\n");
-		}
-
-		queryStr.append("}\n");
-
-		queryStr.append("    ?p ?pDirection ?c.\n");
-
-		// queryStr.append("  ?s rdf:type ?c.\n");
-
-		if (countLinks) {
-			queryStr.append("}\nGROUP BY ?p ?pDirection ?c\n");
-		} else {
-			queryStr.append("}\n");
-		}
-		if (limit > 0) {
-			queryStr.append("limit ");
-			queryStr.append(limit);
-			queryStr.append("\n");
-		}
-
-		System.out.println("getNextClasses SPARQL Query: ");
-		System.out.println(queryStr.toString());
-
-		Query query = QueryFactory.create(queryStr.toString());
-		QueryExecution qexec = null;
-		try {
-			qexec = QueryExecutionFactory.sparqlService(endpointURI, query);
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			throw ex;
-		}
-
-		ResultSet results = null;
-		try {
-			long start = System.currentTimeMillis();
-			results = qexec.execSelect();
-			long end = System.currentTimeMillis();
-			System.out.println("EXEC TIME: " + (end - start));
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			throw ex;
-		}
-
-		ArrayList<ClassLink> solCLs = new ArrayList<ClassLink>();
-		for (; results.hasNext();) {
-			QuerySolution sol = results.next();
-			Resource pro = sol.getResource("p");
-			if (pro != null) {
-				Resource cls = sol.getResource("c");
-				Resource dir = sol.getResource("pDirection");
-				String proURI = pro.getURI();
-				String clsURI = cls.getURI();
-				String dirURI = dir.getURI();
-
-				// System.out.println(pro.getURI() + " " + cls.getURI() + " " +
-				// dir.getURI());
-
-				Direction direction = null;
-				if (dirURI
-						.equals("http://www.w3.org/2000/01/rdf-schema#domain")
-						|| dirURI.equals("rdfs:domain")) {
-					direction = Direction.reverse;
-				}
-				if (dirURI.equals("http://www.w3.org/2000/01/rdf-schema#range")
-						|| dirURI.equals("rdfs:range")) {
-					if (direction != null) {
-						direction = Direction.both;
-					} else {
-						direction = Direction.forward;
-					}
-				}
-				// System.out.println(direction);
-				int numOfLinks = 0;
-				if (countLinks) {
-					numOfLinks = sol.getLiteral("numOfLinks").getInt();
-				}
-				ClassLink cl = new ClassLink(proURI, clsURI, null,direction,
-						numOfLinks, 0, 0, 0, 0, true, true);
-				solCLs.add(cl);
-			}
-		}
-		qexec.close();
-		return solCLs.toArray(new ClassLink[0]);
-	}
-
-	/**
-	 * 縲謖�ｮ壹＆繧後◆繧ｯ繝ｩ繧ｹ繧定ｵｷ轤ｹ縺ｨ縺励√◎縺ｮ繧ｯ繝ｩ繧ｹ縺ｫ螻槭＠縺ｦ縺�ｋ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ繝ｪ繝ｳ繧ｯ縺悟ｼｵ繧峨ｌ縺ｦ縺�ｋ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ髮�粋繧貞叙蠕励＠縲�
-	 * 蜿門ｾ励＠縺溘う繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ繧ｯ繝ｩ繧ｹ繧堤ｶｲ鄒�噪縺ｫ蜿門ｾ励☆繧�
-	 * <p>
-	 * 縺薙％縺ｧ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ縺ｯ縲〉df:type縺ｮ荳ｻ隱槭→縺励※險倩ｿｰ縺輔ｌ縺ｦ縺�ｋ繧ゅ�繧偵＞縺�<br>
-	 * 蜃ｦ逅�ｯｾ雎｡繝��繧ｿ繧暖raphURIs縺ｧ謖�ｮ壹☆繧九％縺ｨ縺後〒縺阪ｋ <br>
-	 * </p>
-	 * 
-	 * @param graphURIs
-	 *            縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� 縲(null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param originClass
-	 *            襍ｷ轤ｹ縺ｨ縺ｪ繧九け繝ｩ繧ｹ縺ｮURI縲��ull荳榊庄��
-	 * @param limit
-	 *            隗｣縺ｨ縺励※霑斐＆繧後ｋClassLink驟榊�縺ｮ髟ｷ縺輔�荳企剞蛟､繧呈欠螳壹☆繧九�荳企剞蛟､繧定ｨｭ螳壹＠縺ｪ縺�ｴ蜷医�0莉･荳九�蛟､繧呈欠螳壹☆繧�
-	 * @return ClassLink縺ｮ驟榊�縲ゅ％縺薙↓縺ｯ縲∝叙蠕励＆繧後◆繧ｯ繝ｩ繧ｹ縺ｨ髢｢菫ゅ▼縺代ｉ繧後※縺�ｋ繝励Ο繝代ユ繧｣縲�未菫ゅ�蜷代″縺悟性縺ｾ繧後ｋ縲�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-	public ClassLink[] getNextClassViaInstanceLink(String graphURI,
-			String originClass, int limit) throws Exception {
-		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 ?pf ?pr (COUNT(?pf) AS ?numOfForwardLinks) (COUNT(?pr) AS ?numOfReverseLinks) (COUNT(DISTINCT(?insOrg)) AS ?numOfOriginInstances) (COUNT(DISTINCT(?ins)) AS ?numOfLinkedInstances)  ?c \n");
-		if (graphURI != null) {
-//			for (String graphURI : graphURIs) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-//			}
-		}
-		queryStr.append("WHERE{\n");
-		queryStr.append("  ?ins rdf:type ?c.\n");
-		queryStr.append("  ?insOrg rdf:type <");
-		queryStr.append(originClass);
-		queryStr.append(">.\n");
-		queryStr.append("  { ?ins ?pr ?insOrg. }\n  UNION { ?insOrg ?pf ?ins. }\n");
-		queryStr.append("}\n");
-		queryStr.append("GROUP BY ?pf ?pr ?c\n");
-		if (limit > 0) {
-			queryStr.append("limit ");
-			queryStr.append(limit);
-			queryStr.append("\n");
-		}
-
-		System.out.println(queryStr.toString());
-
-		Query query = QueryFactory.create(queryStr.toString());
-		QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointURI,
-				query);
-
-		ResultSet results = null;
-		try {
-			long start = System.currentTimeMillis();
-			results = qexec.execSelect();
-			long end = System.currentTimeMillis();
-			System.out.println("EXEC TIME: " + (end - start));
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			throw ex;
-		}
-
-		ArrayList<ClassLink> solCLs = new ArrayList<ClassLink>();
-		for (; results.hasNext();) {
-			QuerySolution sol = results.next();
-			Resource proForward = sol.getResource("pf");
-			Resource proReverse = sol.getResource("pr");
-			Resource cls = sol.getResource("c");
-			Direction direction = null;
-			String propURI = null;
-			int numOfLinks = 0;
-			int numOfLinkedInstances = 0;
-			int numOfOriginInstances = 0;
-			if (proForward != null) {
-				if (proReverse != null) {
-					numOfLinks = sol.getLiteral("numOfForwardLinks").getInt();
-					numOfLinks += sol.getLiteral("numOfReverseLinks").getInt();
-					numOfLinkedInstances = sol.getLiteral(
-							"numOfLinkedInstances").getInt();
-					numOfOriginInstances = sol.getLiteral(
-							"numOfOriginInstances").getInt();
-					direction = Direction.both;
-				} else {
-					numOfLinkedInstances = sol.getLiteral(
-							"numOfLinkedInstances").getInt();
-					numOfOriginInstances = sol.getLiteral(
-							"numOfOriginInstances").getInt();
-					numOfLinks = sol.getLiteral("numOfForwardLinks").getInt();
-					direction = Direction.forward;
-				}
-				propURI = proForward.getURI();
-			} else {
-				direction = Direction.reverse;
-				propURI = proReverse.getURI();
-				numOfLinkedInstances = sol.getLiteral("numOfOriginInstances")
-						.getInt();
-				numOfOriginInstances = sol.getLiteral("numOfLinkedInstances")
-						.getInt();
-				numOfLinks = sol.getLiteral("numOfReverseLinks").getInt();
-			}
-			String clsURI = cls.getURI();
-			// System.out.println(propURI + " " + clsURI + " " + direction);
-
-			ClassLink cl = new ClassLink(propURI, clsURI, null, direction,
-					numOfLinks, numOfOriginInstances, numOfLinkedInstances, 0,
-					0, true, true);
-			solCLs.add(cl);
-		}
-		qexec.close();
-		return solCLs.toArray(new ClassLink[0]);
-	}
-
-/*
- 	public Path[] getPaths(String startClass, String endClass, int mode,
-			boolean countLinks) throws Exception {
-		OWLClassGraph graph = new OWLClassGraph(startClass, endClass);
-                // mode = 2 & countLinks = true are recommended
-                return graph.getPaths(this, mode, countLinks);
-	}
-
-	public String createSPARQL(Path path) throws Exception {
-		return null;
-	}
-*/
-
-	/*
-	 * private String executeSelect(String sparqlQuery) throws Exception {
-	 * HttpClient client = HttpClientBuilder.create().build(); HttpPost httppost
-	 * = new HttpPost(endpointURI); httppost.setHeader("Content-Type",
-	 * "application/x-www-form-urlencoded"); httppost.setHeader("Accept",
-	 * "application/sparql-results+xml"); List<NameValuePair> nvpList = new
-	 * ArrayList<NameValuePair>(); nvpList.add(new BasicNameValuePair("query",
-	 * sparqlQuery)); // nvpList.add(new BasicNameValuePair("format", //
-	 * outputFormat.getMime())); httppost.setEntity(new
-	 * UrlEncodedFormEntity(nvpList, Charset .forName("UTF-8"))); HttpResponse
-	 * response = client.execute(httppost); //
-	 * System.out.println("[StatusLine] " + response.getStatusLine());
-	 * HttpEntity entity = response.getEntity(); String entityString =
-	 * EntityUtils.toString(entity, "UTF-8"); return entityString; }
-	 */
-
-	/**
-	 * 縲謖�ｮ壹＆繧後◆繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ繧定ｵｷ轤ｹ縺ｨ縺励√◎縺ｮ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｫ繝ｪ繝ｳ繧ｯ縺悟ｼｵ繧峨ｌ縺ｦ縺�ｋ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ髮�粋繧貞叙蠕励☆繧九�
-	 * 縲蜿門ｾ励＆繧後◆蜷�う繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮ繧ｯ繝ｩ繧ｹ繧らｶｲ鄒�噪縺ｫ蜿門ｾ励☆繧�
-	 * <p>
-	 * 縺薙％縺ｧ繧､繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｨ縺ｯ縲〉df:type縺ｮ荳ｻ隱槭→縺励※險倩ｿｰ縺輔ｌ縺ｦ縺�ｋ繧ゅ�繧偵＞縺�<br>
-	 * 蜃ｦ逅�ｯｾ雎｡繝��繧ｿ繧暖raphURIs縺ｧ謖�ｮ壹☆繧九％縺ｨ縺後〒縺阪ｋ <br>
-	 * </p>
-	 * 
-	 * @param graphURIs
-	 *            縲讀懃ｴ｢蟇ｾ雎｡縺ｮgraph縺ｮURI驟榊� 縲(null繧�聞縺�縺ｮ驟榊�繧ょ庄)
-	 * @param originInstance
-	 *            襍ｷ轤ｹ縺ｨ縺ｪ繧九う繝ｳ繧ｹ繧ｿ繝ｳ繧ｹ縺ｮURI縲��ull荳榊庄��
-	 * @param limit
-	 *            隗｣縺ｨ縺励※霑斐＆繧後ｋInstanceLink驟榊�縺ｮ髟ｷ縺輔�荳企剞蛟､繧呈欠螳壹☆繧九�荳企剞蛟､繧定ｨｭ螳壹＠縺ｪ縺�ｴ蜷医�0莉･荳九�蛟､繧呈欠螳壹☆繧�
-	 * @return InstanceLink縺ｮ驟榊�縲ゅ％縺薙↓縺ｯ縲∝叙蠕励＆繧後◆繧ｯ繝ｩ繧ｹ縺ｨ髢｢菫ゅ▼縺代ｉ繧後※縺�ｋ繝励Ο繝代ユ繧｣縲�未菫ゅ�蜷代″縺悟性縺ｾ繧後ｋ縲�
-	 * @throws Exception
-	 * @since 28.01.2014
-	 */
-	public InstanceLink[] getNextInstancesViaInstanceLink(String graphURI,
-			String originInstance, int limit) throws Exception {
-		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 ?pf ?pr ?ins ?c \n");
-		if (graphURI != null) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-		}
-		queryStr.append("WHERE{\n");
-		// queryStr.append("  { ?c rdf:type rdfs:Class. }\n  UNION\n  { ?c rdf:type owl:Class. }\n");
-		queryStr.append("  ?ins rdf:type ?c.\n");
-		queryStr.append("  { ?ins ?pr <");
-		queryStr.append(originInstance);
-		queryStr.append(">. }\n  UNION { <");
-		queryStr.append(originInstance);
-		queryStr.append("> ?pf ?ins. }\n");
-
-		queryStr.append(" FILTER (?c != rdf:Property)");
-
-		queryStr.append("}\n");
-		if (limit > 0) {
-			queryStr.append("limit ");
-			queryStr.append(limit);
-			queryStr.append("\n");
-		}
-
-		// System.out.println(queryStr.toString());
-
-		Query query = QueryFactory.create(queryStr.toString());
-		QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointURI,
-				query);
-
-		ResultSet results = qexec.execSelect();
-		HashMap<String, InstanceLink> insLinkMap = new HashMap<String, InstanceLink>();
-		for (; results.hasNext();) {
-			QuerySolution sol = results.next();
-			Resource proForward = sol.getResource("pf");
-			Resource proReverse = sol.getResource("pr");
-			Resource ins = sol.getResource("ins");
-			Resource cls = sol.getResource("c");
-			Direction direction = null;
-			String propURI = null;
-			if (proForward != null) {
-				if (proReverse != null) {
-					direction = Direction.both;
-				} else {
-					direction = Direction.forward;
-				}
-				propURI = proForward.getURI();
-			} else {
-				direction = Direction.reverse;
-				propURI = proReverse.getURI();
-			}
-			String clsURI = cls.getURI();
-			String insURI = ins.getURI();
-			String key = propURI + "\t" + insURI + "\t" + direction;
-			if (insLinkMap.containsKey(key)) {
-				InstanceLink insLink = insLinkMap.get(key);
-				insLink.addLinkedClassURI(clsURI);
-			} else {
-				InstanceLink insLink = new InstanceLink(propURI, insURI,
-						new String[] { clsURI }, direction);
-				insLinkMap.put(key, insLink);
-			}
-		}
-		qexec.close();
-		Collection<InstanceLink> values = insLinkMap.values();
-		return values.toArray(new InstanceLink[0]);
-	}
-
-	public LabelMap[] getLabels(String graphURI, 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 (graphURI != null) {
-				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>();
-		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]);
-	}
-
-	public ClassLink[] countLinks(String graphURI, 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) (COUNT(DISTINCT(?is)) AS ?numOfOriginInstances) (COUNT(DISTINCT(?os)) AS ?numOfLinkedInstances) \n");
-			if (graphURI != null) {
-					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 <");
-				queryStr.append(classLink.getPropertyURI());
-				queryStr.append("> ?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 <");
-					queryStr.append(classLink.getPropertyURI());
-					queryStr.append("> ?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 <");
-					queryStr.append(classLink.getPropertyURI());
-					queryStr.append("> ?os.}\n");
-					queryStr.append("UNION\n");
-					queryStr.append("{?os <");
-					queryStr.append(classLink.getPropertyURI());
-					queryStr.append("> ?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);
-				}
-				lit = sol.getLiteral("numOfLinkedInstances");
-				if (lit != null) {
-					int numOfLinkedInstances = lit.getInt();
-					classLink.setNumOfLinkedInstances(numOfLinkedInstances);
-				}
-				lit = sol.getLiteral("numOfOriginInstances");
-				if (lit != null) {
-					int numOfOriginInstances = lit.getInt();
-					classLink.setNumOfOriginInstances(numOfOriginInstances);
-				}
-				lit = sol.getLiteral("numOfOriginClassInstances");
-				if (lit != null) {
-					int numOfOriginClassInstances = lit.getInt();
-					classLink
-							.setNumOfOriginClassInstances(numOfOriginClassInstances);
-				}
-				lit = sol.getLiteral("numOfLinkedClassInstances");
-				if (lit != null) {
-					int numOfLinkedClassInstances = lit.getInt();
-					classLink
-							.setNumOfLinkedClassInstances(numOfLinkedClassInstances);
-				}
-			}
-			qexec.close();
-
-			// count instances
-			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(?ics) AS ?numOfOriginClassInstances) \n");
-			if (graphURI != null) {
-					queryStr.append("FROM <");
-					queryStr.append(graphURI);
-					queryStr.append(">\n");
-			}
-
-			queryStr.append("WHERE{\n");
-			if (classLink.getDirection() == Direction.forward) {
-				queryStr.append("?ics rdf:type  <");
-				queryStr.append(startClassURI);
-				queryStr.append(">.\n");
-				queryStr.append("}");
-			} else {
-				if (classLink.getDirection() == Direction.forward) {
-					queryStr.append("?ics rdf:type  <");
-					queryStr.append(classLink.getLinkedClassURI());
-					queryStr.append(">.\n");
-					queryStr.append("}");
-				} else {
-					queryStr.append("?ics rdf:type  <");
-					queryStr.append(classLink.getLinkedClassURI());
-					queryStr.append(">.\n");
-					queryStr.append("}");
-				}
-			}
-
-			System.out.println(queryStr.toString());
-
-			query = QueryFactory.create(queryStr.toString());
-			qexec = QueryExecutionFactory.sparqlService(endpointURI, query);
-
-			results = qexec.execSelect();
-			if (results.hasNext()) {
-				QuerySolution sol = results.next();
-				Literal lit = null;
-				lit = sol.getLiteral("numOfOriginClassInstances");
-				if (lit != null) {
-					int numOfOriginClassInstances = lit.getInt();
-					classLink
-							.setNumOfOriginClassInstances(numOfOriginClassInstances);
-				}
-			}
-			qexec.close();
-
-			// count instances
-			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(?ocs) AS ?numOfLinkedClassInstances) \n");
-			if (graphURI != null) {
-					queryStr.append("FROM <");
-					queryStr.append(graphURI);
-					queryStr.append(">\n");
-			}
-
-			queryStr.append("WHERE{\n");
-			if (classLink.getDirection() == Direction.forward) {
-				queryStr.append("?ocs rdf:type  <");
-				queryStr.append(classLink.getLinkedClassURI());
-				queryStr.append(">.\n");
-				queryStr.append("}");
-			} else {
-				if (classLink.getDirection() == Direction.forward) {
-					queryStr.append("?ocs rdf:type  <");
-					queryStr.append(startClassURI);
-					queryStr.append(">.\n");
-					queryStr.append("}");
-				} else {
-					queryStr.append("?ocs rdf:type  <");
-					queryStr.append(startClassURI);
-					queryStr.append(">.\n");
-					queryStr.append("}");
-				}
-			}
-
-			System.out.println(queryStr.toString());
-
-			query = QueryFactory.create(queryStr.toString());
-			qexec = QueryExecutionFactory.sparqlService(endpointURI, query);
-
-			results = qexec.execSelect();
-			if (results.hasNext()) {
-				QuerySolution sol = results.next();
-				Literal lit = null;
-				lit = sol.getLiteral("numOfLinkedClassInstances");
-				if (lit != null) {
-					int numOfLinkedClassInstances = lit.getInt();
-					classLink
-							.setNumOfLinkedClassInstances(numOfLinkedClassInstances);
-				}
-			}
-			qexec.close();
-
-		}
-		return classLinks;
-	}
-
-	public SClass[] countInstances(String[] graphURIs, SClass[] classes)
-			throws Exception {
-		if (classes == null || classes.length == 0) {
-			return new SClass[0];
-		}
-		HashMap<String, SClass> classMap = new HashMap<String, SClass>();
-		for (SClass sc : classes) {
-			classMap.put(sc.getClassURI(), sc);
-		}
-		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 ?cls  (COUNT(?is) AS ?numOfInstances)\n");
-		if (graphURIs != null) {
-			for (String graphURI : graphURIs) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-			}
-		}
-		queryStr.append("WHERE{\n");
-		queryStr.append("  ?is rdf:type ?cls.\n");
-		queryStr.append("  FILTER(?cls IN (");
-		boolean f = false;
-		Set<String> clsSet = classMap.keySet();
-		for (String clsURI : clsSet) {
-			if (f) {
-				queryStr.append(", ");
-			}
-			f = true;
-			queryStr.append("<");
-			queryStr.append(clsURI);
-			queryStr.append(">");
-		}
-		queryStr.append("))\n");
-		queryStr.append("} GROUP BY ?cls");
-
-		System.out.println(queryStr.toString());
-
-		Query query = QueryFactory.create(queryStr.toString());
-		QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointURI,
-				query);
-
-		ResultSet results = qexec.execSelect();
-		for (; results.hasNext();) {
-			QuerySolution sol = results.next();
-			String uri = sol.getResource("cls").getURI();
-			SClass sc = classMap.get(uri);
-			Literal lit = sol.getLiteral("numOfInstances");
-			if (lit != null) {
-				int numOfInstances = lit.getInt();
-				sc.setNumOfInstances(numOfInstances);
-			}
-		}
-		qexec.close();
-
-		return classes;
-	}
-
-}
