【发布时间】: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 >= 16).这可以包裹在EXISTS中。
标签: sparql jena owl protege fuseki