2014-03-03 72 views
0

我寫了下面的代碼,它創建一個父類玩具和子類作爲actiofigures,活動,藝術自行車。 SPARQL查詢是不是給的答案作爲子類的列表,請幫我找到解決sparql查詢來檢索一個類的子類

  import com.hp.hpl.jena.ontology.OntClass; 
     import com.hp.hpl.jena.ontology.OntModel; 
     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.RDFNode; 
      public class jenaquery 
      { 
      static String defaultNameSpace ="http://semanticweb.org/ontologies"; 
      static Model model = null; 

      public static void main(String[] args) 
      { 
        model = ModelFactory.createOntologyModel() 
        OntClass Toys = ((OntModel) model).createClass( "Toys"); 
        OntClass ActionFigures = ((OntModel) model).createClass("ActionFigures"); 
        OntClass Arts = ((OntModel) model).createClass( "Arts"); 
        OntClass Activities = ((OntModel) model).createClass( "Activities"); 
        OntClass Bikes = ((OntModel) model).createClass( "Bikes"); 

        ActionFigures.addSuperClass(Toys); 
        Activities.addSuperClass(Toys); 
        Arts.addSuperClass(Toys); 
        Bikes.addSuperClass(Toys); 

        String queryString ="PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+ 
     "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+ 
     "select ?uri "+ 
     "where { "+ 
     "?uri rdfs:subClassOf<http://semanticweb.org/ontologies#Toys> "+ 
        "} \n "; 
      com.hp.hpl.jena.query.Query query = QueryFactory.create(queryString); 

        System.out.println("----------------------"); 
        System.out.println("Query Result Sheet"); 
        System.out.println("----------------------"); 
        QueryExecution qe = QueryExecutionFactory.create(query, model); 
        System.out.print("Query executed"); 
        ResultSet resultSet = qe.execSelect(); 
        while(resultSet.hasNext()) 
        { 
         QuerySolution soln = (QuerySolution)resultSet.next(); 
         RDFNode name = soln.get("?name"); 
        if(name!=null) 
        { 
          System.out.println(" Subclasses"+name.toString()); 
      } 
        else 
        System.out.print("No subclasses"); 
       } 
        }      
        qe.close(); 

       } 
      } 
+0

你問的'子類',但是您對'createClass(「玩具」)'的調用會創建一個類''。相反,你需要使用'createClass(defaultNameSpace +「Toys」)''。 –

回答

0

添加命名空間,而你正在創建類(如您案默認命名空間)。下面的代碼工作..它獲取給定類的子類。檢查的鏈接瞭解更多詳情... http://opentox.org/data/documents/development/RDF%20files/JavaOnly/query-reasoning-with-jena-and-sparql

import com.hp.hpl.jena.ontology.OntClass; 
import com.hp.hpl.jena.ontology.OntModel; 
import com.hp.hpl.jena.ontology.OntModelSpec; 
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.ResultSet; 
import com.hp.hpl.jena.query.ResultSetFormatter; 
import com.hp.hpl.jena.rdf.model.Model; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 

public class Query { 
static String defaultNameSpace ="http://semanticweb.org/ontologies#"; 
static Model model = null; 

public static void main(String[] args) { 
    model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); 
    OntClass Toys = ((OntModel) model).createClass(defaultNameSpace + "Toys"); 
    OntClass ActionFigures = ((OntModel) model).createClass(defaultNameSpace + "ActionFigures"); 
    OntClass Arts = ((OntModel) model).createClass( defaultNameSpace + "Arts"); 
    OntClass Activities = ((OntModel) model).createClass( defaultNameSpace + "Activities"); 
    OntClass Bikes = ((OntModel) model).createClass( defaultNameSpace + "Bikes");  

    ActionFigures.addSuperClass(Toys); 
    Activities.addSuperClass(Toys); 
    Arts.addSuperClass(Toys); 
    Bikes.addSuperClass(Toys); 


    String queryString ="PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "+ 
    "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+ 
    "select ?uri "+ 
    "where { "+ 
    "?uri rdfs:subClassOf <http://semanticweb.org/ontologies#Toys> "+ 
       "} \n "; 
    com.hp.hpl.jena.query.Query query = QueryFactory.create(queryString); 

    System.out.println("----------------------"); 
    System.out.println("Query Result Sheet"); 
    System.out.println("----------------------"); 
    QueryExecution qe = QueryExecutionFactory.create(query, model); 
    System.out.println("Query executed"); 
    ResultSet resultSet = qe.execSelect(); 
    ResultSetFormatter.out(System.out, resultSet, query);   
    qe.close(); 
} 

}

+0

非常感謝你的幫助,我的代碼得到執行 – user2710605