Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/Label.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/Label.java (revision 19)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/Label.java (revision 94)
@@ -56,5 +56,5 @@
 		}
 		sb.append("\"");
-		if (language != null) {
+		if (language != null && !language.equals("")) {
 			sb.append("@");
 			sb.append(language);
Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java (revision 76)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/ClassLink.java (revision 94)
@@ -20,4 +20,7 @@
 	private int numOfOriginClassInstances = 0;
 	private int numOfLinkedClassInstances = 0;
+	private boolean domainClassLimitedQ = false;
+	private boolean rangeClassLimitedQ = false;
+	
 	
 	/**
@@ -33,5 +36,6 @@
 	public ClassLink(String propertyURI, String linkedClassURI, Direction direction, 
 				int numLinks, int numOfOriginInstances, int numOfLinkedInstances,
-				int numOfOriginClassInstances, int numofLinkedClassInstances){
+				int numOfOriginClassInstances, int numofLinkedClassInstances,
+				boolean domainClassLimitedQ, boolean rangeClassLimitedQ){
 		this.propertyURI = propertyURI;
 		this.linkedClassURI = linkedClassURI;
@@ -42,4 +46,6 @@
 		this.numOfOriginClassInstances = numOfOriginClassInstances;
 		this.numOfLinkedClassInstances = numofLinkedClassInstances;
+		this.domainClassLimitedQ = domainClassLimitedQ;
+		this.rangeClassLimitedQ = rangeClassLimitedQ;
 	}
 	
@@ -122,7 +128,7 @@
 		sb.append(linkedClassURI);
 		sb.append(" [");
+		sb.append(numOfOriginClassInstances);
+		sb.append("/");
 		sb.append(numOfOriginInstances);
-		sb.append("/");
-		sb.append(numOfOriginClassInstances);
 		sb.append("]縲---");
 
@@ -133,7 +139,7 @@
 
 		sb.append(" [");
+		sb.append(numOfLinkedClassInstances);
+		sb.append("/");
 		sb.append(numOfLinkedInstances);
-		sb.append("/");
-		sb.append(numOfLinkedClassInstances);
 		sb.append("]");
 		return sb.toString();
@@ -168,4 +174,16 @@
 
 
+	
+	
+	public final boolean isDomainClassLimitedQ() {
+		return domainClassLimitedQ;
+	}
+
+
+	public final boolean isRangeClassLimitedQ() {
+		return rangeClassLimitedQ;
+	}
+
+
 	public final int getNumOfOriginInstances() {
 		return numOfOriginInstances;
Index: BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/AcquiredStructureAnalyzer.java
===================================================================
--- BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/AcquiredStructureAnalyzer.java (revision 93)
+++ BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/AcquiredStructureAnalyzer.java (revision 94)
@@ -14,4 +14,5 @@
 import com.hp.hpl.jena.rdf.model.Literal;
 import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.Property;
 import com.hp.hpl.jena.rdf.model.Resource;
 
@@ -33,15 +34,20 @@
 	
 	public static void main(String[] args) throws Exception{
-		JenaModelGenerator jmGene = new JenaModelGenerator("c:\\temp\\allie.ttl");
+		JenaModelGenerator jmGene = new JenaModelGenerator("c:\\temp\\dberdf.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());
 		}
-		ClassLink[] cls = impl.getNextClass(null,"http://purl.org/goodrelations/v1#Offering",100,true );
+		System.out.println("--------------------------");
+		
+		ClassLink[] cls = impl.getNextClass(null,"http://purl.org/allie/ontology/201108#EachPair",100,true );
 		for(ClassLink cl: cls){
 			System.out.println(cl.toString());
 		}
+		System.out.println("--------------------------");
 		
 	}
@@ -75,14 +81,12 @@
 		queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
 		queryStr.append("SELECT DISTINCT ?c ?pLabel ?numOfInstances\n");
-		if (targetGraphURIs != null) {
-			for (String graphURI : targetGraphURIs) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-			}
-		}
+//		if (targetGraphURIs != null) {
+//			for (String graphURI : targetGraphURIs) {
+//				queryStr.append("FROM <");
+//				queryStr.append(graphURI);
+//				queryStr.append(">\n");
+//			}
+//		}
 		queryStr.append("WHERE{\n");
-
-		//
 		queryStr.append(" ?c rdf:type rdfs:Class. \n");
 		queryStr.append(" ?c <http://sparqlbuilder.org/numberOfInstances> ?numOfInstances. \n");
@@ -96,6 +100,4 @@
 			queryStr.append("\') && \n (");
 
-			// (LANG(?keywords) = 'en') &&
-
 			for (int i = 0; i < keywords.length; i++) {
 				if (i > 0)
@@ -119,9 +121,9 @@
 		ResultSet results = null;
 		try {
-			long start = System.currentTimeMillis();
+//			long start = System.currentTimeMillis();
 			qexec = QueryExecutionFactory.create(query, model);
 			results = qexec.execSelect();
-			long end = System.currentTimeMillis();
-			System.out.println("EXEC TIME: " + (end - start));
+//			long end = System.currentTimeMillis();
+//			System.out.println("EXEC TIME: " + (end - start));
 		} catch (Exception ex) {
 			ex.printStackTrace();
@@ -133,5 +135,5 @@
 			QuerySolution sol = results.next();
 			Resource res = sol.getResource("c");
-			if (res != null) {
+			if (res != null && res.getURI() != null) {
 				String uri = res.getURI();
 				int numOfInstances = 0;
@@ -156,5 +158,4 @@
 		qexec.close();
 		return classMap.values().toArray(new SClass[0]);
-
 	}
 
@@ -174,17 +175,17 @@
 
 		// SELECT
-		queryStr.append("SELECT DISTINCT ?c ?d ?p ?numInsStart ?numInsEnd ?numTriples \n");
-
-		if (targetGraphURIs != null) {
-			for (String graphURI : targetGraphURIs) {
-				queryStr.append("FROM <");
-				queryStr.append(graphURI);
-				queryStr.append(">\n");
-			}
-		}
+		queryStr.append("SELECT DISTINCT ?indPropCat ?c ?d ?p ?numLnkInsStart ?numLnkInsEnd ?numInsDom ?numInsRan ?numTriples ?isStartClsLim ?isEndClsLim\n");
+
+//		if (targetGraphURIs != null) {
+//			for (String graphURI : targetGraphURIs) {
+//				queryStr.append("FROM <");
+//				queryStr.append(graphURI);
+//				queryStr.append(">\n");
+//			}
+//		}
 
 		queryStr.append("WHERE{\n");
 		queryStr.append(" ?cr rdf:type <http://sparqlbuilder.org/ClassRelation>. \n");
-		queryStr.append(" <" + originClass + "> <http://sparqlbuilder.org/numberOfInstances> ?numInsStart. \n");
+//		queryStr.append(" <" + originClass + "> <http://sparqlbuilder.org/numberOfInstances> ?numInsStart. \n");
 		queryStr.append(" {");
 		queryStr.append(" ?cr <http://sparqlbuilder.org/startClass> <" + originClass + ">. \n");
@@ -192,5 +193,8 @@
 		queryStr.append(" ?cr <http://sparqlbuilder.org/property> ?p. \n");
 		queryStr.append(" ?cr <http://sparqlbuilder.org/numberOfTriples> ?numTriples. \n");
-		queryStr.append(" ?c <http://sparqlbuilder.org/numberOfInstances> ?numInsEnd. \n");
+		queryStr.append(" ?cr <http://sparqlbuilder.org/numberOfInstancesOfStartClass> ?numLnkInsStart. \n");
+		queryStr.append(" ?cr <http://sparqlbuilder.org/numberOfInstancesOfEndClass> ?numLnkInsEnd. \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");
@@ -200,6 +204,17 @@
 		queryStr.append(" ?cr <http://sparqlbuilder.org/property> ?p. \n");
 		queryStr.append(" ?cr <http://sparqlbuilder.org/numberOfTriples> ?numTriples.\n");
-		queryStr.append(" ?d <http://sparqlbuilder.org/numberOfInstances> ?numInsEnd. \n");
+		queryStr.append(" ?cr <http://sparqlbuilder.org/numberOfInstancesOfStartClass> ?numLnkInsEnd. \n");
+		queryStr.append(" ?cr <http://sparqlbuilder.org/numberOfInstancesOfEndClass> ?numLnkInsStart. \n");
+		queryStr.append(" ?cr <http://sparqlbuilder.org/startClassLimitedQ> ?isEndClsLim. \n");
+		queryStr.append(" ?cr <http://sparqlbuilder.org/endClassLimitedQ> ?isStartClsLim. \n");
 		queryStr.append("}\n");
+		
+		queryStr.append(" ?pp rdf:type <http://sparqlbuilder.org/PropertyProfile>. \n");
+		queryStr.append(" ?pp <http://sparqlbuilder.org/property> ?p. \n");
+		queryStr.append(" ?pp <http://sparqlbuilder.org/individualPropertyCategory> ?indPropCat. \n");
+		queryStr.append(" ?pp <http://sparqlbuilder.org/numberOfInstancesOfDomainClass> ?numInsDom. \n");
+		queryStr.append(" ?pp <http://sparqlbuilder.org/numberOfInstancesOfRangeClass> ?numInsRan \n");
+	
+
 		queryStr.append("}\n");
 		
@@ -212,5 +227,5 @@
 
 //		System.out.println("getNextClasses SPARQL Query: ");
-//		System.out.println(queryStr.toString());
+		System.out.println(queryStr.toString());
 
 		Query query = QueryFactory.create(queryStr.toString());
@@ -234,4 +249,10 @@
 			String clsURI = 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");
@@ -248,4 +269,6 @@
 					}
 				}
+				
+				
 				int numTriples = 0;
 				Literal numTriplesLit = sol.getLiteral("numTriples");
@@ -253,20 +276,46 @@
 					numTriples = numTriplesLit.getInt();
 				}
-				int numInsStart = 0;
-				Literal numInsStartLit = sol.getLiteral("numInsStart");
+
+				int numLnkInsStart = 0;
+				Literal numInsStartLit = sol.getLiteral("numLnkInsStart");
 				if( numInsStartLit != null ){
-					numInsStart = numInsStartLit.getInt();
-				}
-				int numInsEnd = 0;
-				Literal numInsEndLit = sol.getLiteral("numInsEnd");
+					numLnkInsStart = numInsStartLit.getInt();
+				}
+				int numLnkInsEnd = 0;
+				Literal numInsEndLit = sol.getLiteral("numLnkInsEnd");
 				if( numInsEndLit != null ){
-					numInsEnd = numInsEndLit.getInt();
-				}
+					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, direction,
-						numTriples, 0, 0, numInsEnd, numInsStart);
+						numTriples, numInsDom, numInsRan,  numLnkInsStart, numLnkInsEnd, isStartClsLim, isEndClsLim);
 				solCLs.add(cl);
-			}
-		}
-		qexec.close();
+
+				}
+			}
+		}
+		qexec.close();	
 		return solCLs.toArray(new ClassLink[0]);
 	}
@@ -347,11 +396,10 @@
 		return lMap.values().toArray(new LabelMap[0]);
 	}
+
 /*
- public ClassLink[] countLinks(String[] graphURIs, String startClassURI,
-			ClassLink[] classLinks) throws Exception;
-
+ 	public ClassLink[] countLinks(String[] graphURIs, String startClassURI, ClassLink[] classLinks) throws Exception;
 	public SClass[] countInstances(String[] graphURIs, SClass[] classes) throws Exception;
 	
-
 */
+
 }
