Sparql 使用jena读取RDF文件时,getLiteral返回null

Sparql 使用jena读取RDF文件时,getLiteral返回null,sparql,rdf,jena,ontology,Sparql,Rdf,Jena,Ontology,这些天我一直在阅读关于OWL本体和RDF文件的文章。我还是不明白 假设我使用Protege创建了一个简单的本体。它有一个名为Review的类,它有两个数据属性,即comment和rating 现在我想创建一个单独的RDF文件,用xml编写,其中包含一些注释。我创建的文件看起来像 <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xm

这些天我一直在阅读关于OWL本体和RDF文件的文章。我还是不明白

假设我使用Protege创建了一个简单的本体。它有一个名为Review的类,它有两个数据属性,即comment和rating

现在我想创建一个单独的RDF文件,用xml编写,其中包含一些注释。我创建的文件看起来像

<?xml version="1.0"?>
<rdf:RDF
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
      xmlns:c="http://review-analyzer.local/ontologies/reviews_2.owl#">

<rdf:Description rdf:ID="me">
    <c:review>Display looks amazing!</c:review>
    <c:raitng>5</c:raitng>
</rdf:Description>
<rdf:Description rdf:ID="me2">
    <c:review>Display is great!</c:review>
    <c:raitng>5</c:raitng>
</rdf:Description>
</rdf:RDF>

这有什么问题?

rdf:ID需要解析为绝对IRI,但文件中没有xmlns:base。添加一个或将rdf:about与绝对虹膜一起使用,例如,“c:me”。

此行不能返回
null
。就我的理解而言,您打印了
soln
,在那里您应该可以看到每个可能的绑定及其变量。是否有一个变量
review
具有预期的文本?这是我在打印soln(?raitng=“5”)->(?Comment=)(?review=“Display Is great!”)->[Root]时得到的结果,因此该行肯定不能返回
null
,非常感谢。成功了!我删除了ID并添加了rdf:about
  Model model = ModelFactory.createOntologyModel();
        model.read("./rdf/119.rdf", "RDF/XML");
  String queryString = 
                "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\r\n" +
                "PREFIX ns: <http://review-analyzer.local/ontologies/reviews_2.owl#>"+
                "select *\r\n" + 
                "where {\r\n" + 
                "  ?Comment ns:review ?review .\r\n" + 
                "  ?Comment ns:raitng ?raitng .\r\n" + 
                "}";
        Query query = QueryFactory.create(queryString);
        QueryExecution qexec = QueryExecutionFactory.create(query, model);
        try {
            ResultSet results = qexec.execSelect();
            List<String> varNames = results.getResultVars();
            while (results.hasNext()) { 

                QuerySolution soln = results.nextSolution();
                Literal name = soln.getLiteral("review");
                System.out.println(soln);
            }
        } finally {
            qexec.close();
        }
Literal name = soln.getLiteral("review");