【问题标题】:Fuseki reasoner doesn't infer data (int) range classesFuseki 推理器不推断数据(int)范围类
【发布时间】:2016-03-30 11:30:52
【问题描述】:

为了向您展示问题(这是一个错误),我创建了一个最小示例:

这是我的最小本体

@prefix : <http://www.test.com/ts#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<http://www.test.com/ts> a owl:Ontology .
# 
# 
# #################################################################
# #
# #    Object Properties
# #
# #################################################################
# 
# 
# http://www.test.com/ts#hasSex

:hasSex a owl:ObjectProperty , owl:FunctionalProperty ;
    rdfs:range :Sex .
# 
# 
# 
# #################################################################
# #
# #    Data properties
# #
# #################################################################
# 
# 
# http://www.test.com/ts#hasAge

:hasAge a owl:DatatypeProperty , owl:FunctionalProperty ;
    rdfs:range xsd:int .
# 
# 
# 
# #################################################################
# #
# #    Classes
# #
# #################################################################
# 
# 
# http://www.test.com/ts#FemaleUser

:FemaleUser a owl:Class ;
    owl:equivalentClass _:genid1 .

_:genid1 owl:intersectionOf _:genid4 .

_:genid4 a rdf:List ;
    rdf:first :User ;
    rdf:rest _:genid2 .

_:genid2 a rdf:List ;
    rdf:first _:genid3 .

_:genid3 a owl:Restriction ;
    owl:onProperty :hasSex ;
    owl:hasValue :female .

_:genid2 rdf:rest rdf:nil .

_:genid1 a owl:Class .
# 
# http://www.test.com/ts#MatureUser

:MatureUser a owl:Class ;
    owl:equivalentClass _:genid5 .

_:genid5 owl:intersectionOf _:genid11 .

_:genid11 a rdf:List ;
    rdf:first :User ;
    rdf:rest _:genid6 .

_:genid6 a rdf:List ;
    rdf:first _:genid7 .

_:genid7 a owl:Restriction ;
    owl:onProperty :hasAge ;
    owl:someValuesFrom _:genid8 .

_:genid8 a rdfs:Datatype ;
    owl:onDatatype xsd:int ;
    owl:withRestrictions _:genid9 .

_:genid9 a rdf:List ;
    rdf:first _:genid10 .

_:genid10 xsd:minInclusive "16"^^xsd:int .

_:genid9 rdf:rest rdf:nil .

_:genid6 rdf:rest rdf:nil .

_:genid5 a owl:Class .
# 
# http://www.test.com/ts#Sex

:Sex a owl:Class .
# 
# http://www.test.com/ts#User

:User a owl:Class .
# 
# 
# 
# #################################################################
# #
# #    Individuals
# #
# #################################################################
# 
# 
# http://www.test.com/ts#ania

:ania a owl:NamedIndividual , :User ;
    :hasSex :female ;
    :hasAge "18"^^xsd:int .
# 
# http://www.test.com/ts#female

:female a owl:NamedIndividual , :Sex .
# 
# http://www.test.com/ts#male

:male a owl:NamedIndividual , :Sex .
# 
# Generated by the OWL API (version 4.1.3.20151118-2017) https://github.com/owlcs/owlapi

有两个类:

一个 MatureUser(对于 hasAge 超过 16 岁的用户)和 FemaleUser(对于 hasSex 为女性的用户)

protege 截图:

可以看到 protege 推断 :ania 既是女性用户又是成熟用户,而 fuseki 只是推断 :ania 是女性用户但不成熟

更新

我也尝试用这两种形式制作我的等价类

User 和 hasAge 一些 xsd:int[>="16"^^xsd:int]

User 和 hasAge 一些 xsd:int[>=16]

但结果相同,Protege 推断正确,而 furseki 则不正确。

【问题讨论】:

  • 为什么 fuseki 会推断出任何东西?如果您希望 fuseki 用 OWL 推理做出响应,则必须附加一个 OWL 推理器。
  • @JoshuaTaylor 我已经将 OWL 推理器放入我的 fuseki 中。否则,它不会推断出我是女性用户
  • @JoshuaTaylor 这次我做了一个非常小的本体,它只包含问题,我的查询就是关于问题的,我在调试过程中尝试解决更大的问题问题。
  • 在这种情况下,它确实有所作为。 Jena 提供的 OWL 推理器在逻辑上并不完整。这意味着(根据设计)存在它们不会计算的 OWL 推论。 Protege 中可用的 OWL 推理器在逻辑上应该是完整的;这意味着它们应该产生所有蕴含的公理。在这种情况下,我希望 Jena 的 OWL 推理器根本不进行数据类型推理。这意味着他们不会真正对 xsd:int[>= 16] 类型做任何事情。
  • 一种可能性是在 SPARQL 中使用过滤器。 User hasAge ?X . FILTER (?X &gt;= 16). 这可以包裹在 EXISTS 中。

标签: sparql jena owl protege fuseki


【解决方案1】:

Jena 提供的 OWL 推理器在逻辑上并不完整;这意味着(通过设计)存在他们不会推断的 OWL 推断。 Protege 中可用的 OWL 推理器在逻辑上应该是完整的;这意味着它们应该产生所有蕴含的公理。

在这种情况下,Jena 的 OWL 推理器根本不进行数据类型推理。这意味着他们不会真正对 xsd:int[>= 16] 类型做任何事情。在这种情况下,这不仅仅是 Jena 的 OWL 推理器不完整的问题,还在于 Jena 的 OWL 推理器针对的是 OWL 1,但数据类型方面推理是 OWL 2 的一部分,Jena 并不完全支持。例如,请参阅 Jena 用户邮件列表中 2013 年的 this thread about datatype restrictions。 Dave Reynolds 回复了与您类似的询问:

数据类型方面为 OWL 2,Jena 仅支持 OWL 1。

可以使用 Pellet 等第三方推理器来提供 一些 OWL 2 的能力。

文档中明确提到了耶拿不支持 OWL2。有一个 OWL2 词汇类,它只定义了 OWL2 中使用的 IRI,它的 JavaDoc 包括(强调):

OWL2 词汇。注意:Jena 不提供 OWL2 推理或 OntModel 支持。提供这些常量是为了方便使用当前 OWL1 支持进行 OWL2 工作并需要一组合适名称的用户。

【讨论】:

  • 哇,那是打脸,我的大部分工作都依赖于数据范围约束。过去我使用查询 Protege OWL 推理器产生的三元组,现在我很困惑,请问有什么解决方案可以恢复吗? (你放的链接失效了)
  • 如果您阅读了我链接到的其余线程,您会发现可以将 Pellet 或其他推理器与 Fuseki 一起使用。据我所知,Protege 没有自己的 OWL 推理器,但使用其他公开 API 的推理器。 Jena 可以使用其中一些相同的推理器。
  • @AniaDavid 我对我的回答做了一些修改,你能检查一下链接现在是否有效吗?它对我有用。 (一定要刷新答案。)
  • 链接有效,谢谢,请问您有任何页面官方声明 Jena 不支持 OWL 2?我正在检查链接,这只是一个问题,请问我怎样才能看到它的答案?
  • 沮丧和沮丧
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多