|  | 750 | public SClass[] countInstances(String[] graphURIs, SClass[] classes) throws Exception{ | 
                          |  | 751 | if( classes == null || classes.length == 0 ){ | 
                          |  | 752 | return new SClass[0]; | 
                          |  | 753 | } | 
                          |  | 754 | HashMap<String, SClass> classMap = new HashMap<String, SClass>(); | 
                          |  | 755 | for(SClass sc: classes){ | 
                          |  | 756 | classMap.put(sc.getClassURI(), sc); | 
                          |  | 757 | } | 
                          |  | 758 | StringBuffer queryStr = new StringBuffer(); | 
                          |  | 759 | queryStr.append("PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"); | 
                          |  | 760 | queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); | 
                          |  | 761 | queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); | 
                          |  | 762 | queryStr.append("SELECT DISTINCT ?cls  (COUNT(?is) AS ?numOfInstances)\n"); | 
                          |  | 763 | if (graphURIs != null) { | 
                          |  | 764 | for (String graphURI : graphURIs) { | 
                          |  | 765 | queryStr.append("FROM <"); | 
                          |  | 766 | queryStr.append(graphURI); | 
                          |  | 767 | queryStr.append(">\n"); | 
                          |  | 768 | } | 
                          |  | 769 | } | 
                          |  | 770 | queryStr.append("WHERE{\n"); | 
                          |  | 771 | queryStr.append("  ?is rdf:type ?cls.\n"); | 
                          |  | 772 | queryStr.append("  FILTER(?cls IN ("); | 
                          |  | 773 | boolean f = false; | 
                          |  | 774 | Set<String> clsSet = classMap.keySet(); | 
                          |  | 775 | for (String clsURI : clsSet) { | 
                          |  | 776 | if (f) { | 
                          |  | 777 | queryStr.append(", "); | 
                          |  | 778 | } | 
                          |  | 779 | f = true; | 
                          |  | 780 | queryStr.append("<"); | 
                          |  | 781 | queryStr.append(clsURI); | 
                          |  | 782 | queryStr.append(">"); | 
                          |  | 783 | } | 
                          |  | 784 | queryStr.append("))\n"); | 
                          |  | 785 | queryStr.append("} GROUP BY ?cls"); | 
                          |  | 786 |  | 
                          |  | 787 | System.out.println(queryStr.toString()); | 
                          |  | 788 |  | 
                          |  | 789 | Query query = QueryFactory.create(queryStr.toString()); | 
                          |  | 790 | QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointURI, | 
                          |  | 791 | query); | 
                          |  | 792 |  | 
                          |  | 793 | ResultSet results = qexec.execSelect(); | 
                          |  | 794 | for (; results.hasNext();) { | 
                          |  | 795 | QuerySolution sol = results.next(); | 
                          |  | 796 | String uri = sol.getResource("cls").getURI(); | 
                          |  | 797 | SClass sc = classMap.get(uri); | 
                          |  | 798 | Literal lit = sol.getLiteral("numOfInstances"); | 
                          |  | 799 | if (lit != null) { | 
                          |  | 800 | int numOfInstances = lit.getInt(); | 
                          |  | 801 | sc.setNumOfInstances(numOfInstances); | 
                          |  | 802 | } | 
                          |  | 803 | } | 
                          |  | 804 | qexec.close(); | 
                          |  | 805 |  | 
                          |  | 806 | return classes; | 
                          |  | 807 | } | 
                          |  | 808 |  |