【问题标题】:why Jena fuseki has no response to owl reasoning?为什么 Jena fuseki 对猫头鹰的推理没有反应?
【发布时间】:2020-01-08 16:22:02
【问题描述】:

我想使用 Jena Fuseki 为一些本体文件构建一个 SPARQL 端点。 我的 fuseki 配置如下:

@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .

<#service1> rdf:type fuseki:Service ;
    fuseki:name                       "ds" ;       # http://host:port/ds
    fuseki:serviceQuery               "sparql" ;   # SPARQL query service
    fuseki:serviceQuery               "query" ;    # SPARQL query service (alt name)
    fuseki:serviceUpdate              "update" ;   # SPARQL update service
    fuseki:serviceUpload              "upload" ;   # Non-SPARQL upload service
    fuseki:serviceReadWriteGraphStore "data" ;     # SPARQL Graph store protocol (read and write)
    # A separate read-only graph store endpoint:
    fuseki:serviceReadGraphStore      "get" ;      # SPARQL Graph store protocol (read only)
    fuseki:dataset                   <#dataset> ;
    .

<#dataset> rdf:type ja:RDFDataset ;
    ja:defaultGraph <#inf_model> ;
    .

<#mv_data_model> a ja:MemoryModel;
    ja:content[ja:externalContent <file://D:/Program%20Files/d2rq-0.8.1/movie.nt>] ;
    ja:content[ja:externalContent <file://D:/Program%20Files/apache-jena-fuseki-3.13.1/run/ontology.ttl>]
    .

<#inf_model> a ja:InfModel ;
    ja:baseModel <#mv_data_model>;
    ja:reasoner [ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>] ;

    #ja:reasoner [
    #    ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ; 
    #    ja:rulesFrom <file://D:/Program%20Files/apache-jena-fuseki-3.13.1/run/rule.ttl>; ]
    .

我将 fuseki 作为独立服务器运行。当我关闭 OWL 推理器时,它运行良好。但是一旦启用 OWL 推理器,服务器对查询没有响应,即使是像这样的查询

SELECT ?s ?p ?o
WHERE {
    ?s ?p ?o
}
limit 10

没有响应,然后抛出异常:java.lang.OutOfMemoryError。但是,RuleReasoner 运行良好。 而我的ttl文件有大约1500000个三元组,是不是数据规模太大,OWL Reasoner无法推断? 所有工作都在我的电脑上完成,有朋友可以帮我吗?谢谢

【问题讨论】:

  • 如何运行 Fuseki?你设置了堆大小吗?
  • 1. OWL 推理器的性能更多地取决于本体的复杂性,而不是实例数据的大小。 2.)也就是说,你真的需要耶拿的 OWL max 推理器吗? Jena 3 中还有其他 OWL 推理子集(微等)。没有响应意味着它仍在工作,正如您所看到的,您分配的堆空间不足,因此出现 OOM 错误,因此没有响应。跨度>
  • 谢谢,我通过运行“fuseki-server.bat”启动 Fuseki,并使用默认的 JVM 设置。正如@AKSW 的建议,我使用 jena.hpl.hp.com/2003/OWLMicroFBRuleReasoner> 替换 OWLFBRuleReasoner,然后我得到正确的响应。但是我以前不知道微推理器,我怎样才能得到所有推理器的URL,有没有关于它的文档?我没有在Jena Assembler howto找到推理者的网址。
  • 显然所有的reasoner URIs都可以通过ReasonerFactory接口getURI()方法找到:jena.apache.org/documentation/javadoc/jena/org/apache/jena/…不知道网上有没有列表。 @AndyS 也许知道这一点?
  • 编辑 fuseki-server.bat 并增加 -Xmx 设置。默认堆大小非常小。

标签: jena owl ontology fuseki reasoner


【解决方案1】:

在 fuseki 中,当在太大的 DataSet 上运行 Reasoner 时,推理将在查询执行时应用于 All Graph。除此之外,所有推理都将在 Fuseki TDB 案例推理器应用前向推理中实现。它会给系统带来负担,导致图形太大而无法使用 RAM 内存进行具体化和推理。

我们已经让一台为 Fuseki 专用 1 TD RAM 的机器崩溃了。

一种可能的解决方案是将数据集拆分为独立的部分以调整查询。 有关更多信息,请查看使用集群实现高性能的 hadoop 和 AllegroGraph 解决方案 https://allegrograph.com/hadoop-and-allegrograph-the-semantic-data-lake-for-analytics/

这取决于您的需求。在无限规模中,集群解决方案似乎是最好的,但也许在本地增加专用 RAM 内存给 JVM 可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多