使用Jena API进行本体搜索的SPARQL查询

时间:2019-02-26 12:23:58

标签: java sparql jena owl ontology

嗨,我正在研究最后一年项目,这是一个基本上是使用本体的工作搜索引擎。我使用的技术是Java。

它的工作方式是用户搜索任何作业,例如:Java开发人员,然后该关键字应进入创建的Ontology中并在Ontology中得到匹配。一旦匹配,它将进入包含所有作业的Xml文件,并仅获取已匹配的作业。

本体已成功创建,唯一的问题是我在使用Jena API理解和编写 SPARQL查询时遇到困难,该查询将采用用户键入的关键字并进入 OWL或RDF本体文件并找到匹配项,然后从那里转到xml数据文件,仅获取匹配的数据并将其显示在页面上。

这是我编写的代码。我只能阅读本体,因此我决定首先正确显示它们,但出现错误。

    OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF);
    String inputFileName="e:/springmvc/jena/bin/jena/ontology14.owl";
    InputStream in = FileManager.get().open( inputFileName );
    if (in == null) {
        throw new IllegalArgumentException(
             "File: " + inputFileName + " not found");
    }
    model.read(in, null);

    String queryString =
            "prefix rdfs: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+       
            "prefix owl: <http://www.w3.org/2002/07/owl#> "+       
            "select ?ab where {?person owl:equivalentClass ?ab " +
            "}";
    Query query = QueryFactory.create(queryString);
    QueryExecution qe = QueryExecutionFactory.create(query, model);
    ResultSet results =  qe.execSelect();
    while(results.hasNext()){
        QuerySolution soln = results.nextSolution();
        Literal jobs = soln.getLiteral("x");
        System.out.println(jobs);
    }
    qe.close();

我得到的错误:

Exception in thread "main" java.lang.ClassCastException: com.hp.hpl.jena.rdf.model.impl.ResourceImpl cannot be cast to com.hp.hpl.jena.rdf.model.Literal
at com.hp.hpl.jena.sparql.core.QuerySolutionBase.getLiteral(QuerySolutionBase.java:41)
at jena.jeena.main(jeena.java:79)

0 个答案:

没有答案