【问题标题】:getLiteral returns null when reading RDF file using jena使用 jena 读取 RDF 文件时 getLiteral 返回 null
【发布时间】:2018-09-26 23:21:51
【问题描述】:

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

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

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

<?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>

现在我想将此文件读入 jena 模型,阅读此评论并在我的本体中创建个体。创建我已经想通的单个部分。但我无法从这些评论中获得评分和评论值。

我试过的代码是

  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();
        }

下一行返回 null。

Literal name = soln.getLiteral("review");

这有什么问题?

【问题讨论】:

  • 此行无法返回null。只是为了我的理解,你打印了soln,在那里你应该看到每个可能的绑定及其变量。是否存在带有预期文字的变量 review
  • 这是我打印 soln (?raitng = "5") -> (?Comment = ) ( ?review = "Display is great!" ) -> [Root]
  • 那么该行肯定不能返回null

标签: sparql rdf jena ontology


【解决方案1】:

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

【讨论】:

  • 非常感谢。有效!我删除了 ID 并添加了 rdf:about
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多