【问题标题】:Trying to create a Sparql query using Jena's java api尝试使用 Jena 的 java api 创建 Sparql 查询
【发布时间】:2012-11-06 16:56:26
【问题描述】:

我使用 Apache Jena 库在 Java 中创建了一个本体模型,并输入了披萨本体。 我正在尝试进行 sparql 查询,但表格打印为空白,尽管我的查询通常有答案。 难道我做错了什么...? 代码如下:

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

String queryString =
        "prefix pizza: <www.co-ode.org/ontologies/pizza/pizza.owl#Pizza> "+        
        "prefix rdfs: <" + RDFS.getURI() + "> "           +
        "prefix owl: <" + OWL.getURI() + "> "             +
        "select ?pizza where {?pizza a owl:Class ; "      +
        "rdfs:subClassOf ?restriction. "                  +
        "?restriction owl:onProperty pizza:hasTopping ;"  +
        "owl:someValuesFrom pizza:PeperoniSausageTopping" +
        "}";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, model);
com.hp.hpl.jena.query.ResultSet results =  qe.execSelect();

ResultSetFormatter.out(System.out, results, query);
qe.close();

【问题讨论】:

    标签: java sparql jena


    【解决方案1】:

    您的前缀声明错误。您不小心包含了 Pizza 类的名称,并且还遗漏了 http 协议前缀。更正了,应该是:

    "prefix pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#> "+
    

    前缀在 RDF 和 SPARQL 中的工作方式是您将 prefix: 替换为定义的任何前缀,并且生成的字符串必须完全匹配您正在尝试的资源的 URI匹配。它必须是完全匹配的——即使是字母大小写的差异也是显着的。

    顺便说一句,您还可以通过FileManager简化加载本体:

    OntModel model = ModelFactory.createOntologyModel( 
                                      OntModelSpec.OWL_MEM_MICRO_RULE_INF);
    FileManager.get().readModel( model, "pizza.owl" );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多