2016-04-12 3 views
0

ファイルからモデルにオントロジーをロードした後、次のコードを使用してクエリを生成して実行しようとしています。クエリの文字列連結によってQueryParseExceptionが生成されましたか?

package rdf; 
    import java.util.Scanner; 

    import org.apache.jena.atlas.io.IndentedWriter; 
    import org.apache.jena.atlas.logging.LogCtl; 
    import org.apache.log4j.Logger; 
    import org.apache.jena.query.Query; 
    import org.apache.jena.query.QueryExecution;  
    import org.apache.jena.query.QueryExecutionFactory; 
    import org.apache.jena.query.QueryFactory; 
    import org.apache.jena.query.QuerySolution; 
    import org.apache.jena.query.ResultSet; 
    import org.apache.jena.rdf.model.Model; 
    import org.apache.jena.rdf.model.ModelFactory; 
    import org.apache.jena.rdf.model.RDFNode; 
    import org.apache.jena.rdf.model.Resource; 
    import org.apache.jena.util.FileManager; 
    import org.apache.jena.vocabulary.RDF; 
    public class disease { 
    public static final String onto_file = "root-ontology.owl"; 
    public static final String NL = System.getProperty("line.separator"); 

    private static final Logger log = Logger.getLogger("disease"); 
    public static void main(String[] args) { 
    LogCtl.setCmdLogging(); 
     // create the simplest model there is 
     final Model m = ModelFactory.createDefaultModel(); 
     // use the file manager to read an RDF document into the model 
     FileManager.get().readModel(m, onto_file); 
     String re; 
     System.out.println("Enter class name : "); 
      Scanner scanIn = new Scanner(System.in); 
      re = scanIn.nextLine(); 
     String queryString =   
      "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+ 
         "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+ 
       " PREFIX : <http://www.semanticweb.org/ hp/ontologies/2016/2/disease-ontologies.owl#>"+ 
       "select ?x " 
       + 
       "where { "+ 
       " :"+re +" a ?x}"; 
       ; 
      Query query = QueryFactory.create(queryString); 
      QueryExecution qe = QueryExecutionFactory.create(query,m); 
      ResultSet results = qe.execSelect(); 
      String s= results.toString(); 
           while(results.hasNext()) { 
            int i =0; 
      QuerySolution binding =results.nextSolution(); 
      Resource su=(Resource) binding.get("x"); 
      System.out.println(su.getLocalName()); 

      String[]r = null; 
     String re1=su.getLocalName(); 
     System.out.println(re); 
     r[i]=re1;}} 
    } 

次のQueryParseExceptionが発生します。どうして?

Exception in thread "main" org.apache.jena.query.QueryParseException: Encountered " "<" "< "" at line 1, column 124. 
Was expecting: 
    <IRIref> ... 
+1

エラーは何ですか? – AndyS

+0

コードがマングルされています。 – AndyS

+0

@AndyS私はコードを "EDIT"の下のコードに変更しましたが、今は上に示した新しいエラーが発生しています。 – Ciba

答えて

0

私のコードを次のように変更したところ、完全に機能しましたが、コンセプトは同じです。コードはクラスの個体を返し、配列に格納して印刷します:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package rdf; 

import com.hp.hpl.jena.ontology.OntModel; 
import com.hp.hpl.jena.ontology.OntModelSpec; 
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.Model; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 
import com.hp.hpl.jena.rdf.model.Resource; 
import com.hp.hpl.jena.util.FileManager; 
import org.apache.jena.atlas.logging.LogCtl; 
import org.apache.log4j.Logger; 
import java.util.Scanner; 
import org.apache.jena.atlas.io.IndentedWriter; 
import org.apache.jena.atlas.logging.LogCtl; 
import org.apache.log4j.Logger; 

/** 
* 
* @author shroog 
*/ 
public class JavaApplication14 { 


// public static final String onto_file = "root-ontology.owl"; 
// public static final String NL = System.getProperty("line.separator"); 
// private static final Logger log = Logger.getLogger("disease"); 
    public static void main(String[] args) { 
    //LogCtl.setCmdLogging(); 
     // create the simplest model there is 
     // final Model m = ModelFactory.createDefaultModel(); 
     // use the file manager to read an RDF document into the model 
     //FileManager.get().readModel(m, onto_file); 

     OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 
      FileManager.get().readModel(m, "root-ontology.owl"); 

      String var=""; 
     System.out.println("Enter class name : "); 
      Scanner sc = new Scanner(System.in); 
      var = sc.nextLine(); 
      String queryString =   
        "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+ 
           "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+ 
         " PREFIX : <http://www.semanticweb.org/hp/ontologies/2016/2/disease-ontologies.owl#>"+ 
         "select ?x " 
         + 
         "where { "+ 
         "?x a :"+var+"}"; 



       Query query = QueryFactory.create(queryString); 
       QueryExecution qee = QueryExecutionFactory.create(query,m); 
        ResultSet resultss = qee.execSelect(); 
             String [] TXT= new String[20]; 
        try{ 

      int i=0; 
       while(resultss.hasNext()) { 


       QuerySolution bindingg =resultss.nextSolution(); 
       Resource suu=(Resource) bindingg.get("x"); 

       TXT[i]= suu.getLocalName(); 
            System.out.println(TXT[i]); 
            i++; 

           } 
        } catch (ArrayIndexOutOfBoundsException e){} 

             } 


} 
関連する問題