Fuseki 推理机不推断数据 (int) 范围 类
Fuseki reasoner doesn't infer data (int) range classes
为了向您展示问题(这是一个错误),我创建了一个最小示例:
这是我的最低要求 ontology
@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
有两个class:
一个 MatureUser(对于 hasAge 超过 16 岁的用户)和 FemaleUser(对于 hasSex 为女性的用户)
门徒截图:
可以看到protege推断:ania既是女性又是成熟用户,而fuseki只是推断:ania是女性而不是成熟
更新
我也试着用这两种形式来制作我的等价物class
User and hasAge some xsd:int[>="16"^^xsd:int]
和
User and hasAge some xsd:int[>=16]
但结果相同,Protege 推断正确,而 furseki 不正确。
Jena 提供的 OWL 推理器在逻辑上不完整;这意味着(通过设计)有 OWL 他们不会推断的推论。 Protege 中可用的 OWL 推理器在逻辑上应该是完整的;这意味着他们应该产生所有蕴含的公理。
在这种情况下,Jena 的 OWL 推理器根本不进行数据类型推理。这意味着他们不会真正对 xsd:int[>= 16] 类型做任何事情。在这种情况下,不仅仅是Jena的OWL reasoners不完整的问题,也是Jena的OWL reasoners针对OWL 1的问题,但是datatype facet reasoning是[=的一部分23=] 2,耶拿并不完全支持。例如,在 Jena 用户邮件列表中查看 2013 年的 this thread about datatype restrictions。戴夫·雷诺兹 (Dave Reynolds) 回复了与您类似的询问:
Datatype facets are OWL 2 and Jena only supports OWL 1.
It may be possible to use third party reasoners like Pellet to provide
some OWL 2 capability.
Jena 不支持 OWL2 已在文档中明确提及。有一个 OWL2 词汇表 class 只定义了 OWL2 中使用的 IRI,它的 JavaDoc 包括(强调):
OWL2 vocabulary. NOTE: Jena does not provide OWL2 inference or OntModel support. These constants are provided for the convenience of users who are doing OWL2 work with the current OWL1 support and desire a suitable set of names.
为了向您展示问题(这是一个错误),我创建了一个最小示例:
这是我的最低要求 ontology
@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
有两个class:
一个 MatureUser(对于 hasAge 超过 16 岁的用户)和 FemaleUser(对于 hasSex 为女性的用户)
门徒截图:
可以看到protege推断:ania既是女性又是成熟用户,而fuseki只是推断:ania是女性而不是成熟
更新
我也试着用这两种形式来制作我的等价物class
User and hasAge some xsd:int[>="16"^^xsd:int]
和
User and hasAge some xsd:int[>=16]
但结果相同,Protege 推断正确,而 furseki 不正确。
Jena 提供的 OWL 推理器在逻辑上不完整;这意味着(通过设计)有 OWL 他们不会推断的推论。 Protege 中可用的 OWL 推理器在逻辑上应该是完整的;这意味着他们应该产生所有蕴含的公理。
在这种情况下,Jena 的 OWL 推理器根本不进行数据类型推理。这意味着他们不会真正对 xsd:int[>= 16] 类型做任何事情。在这种情况下,不仅仅是Jena的OWL reasoners不完整的问题,也是Jena的OWL reasoners针对OWL 1的问题,但是datatype facet reasoning是[=的一部分23=] 2,耶拿并不完全支持。例如,在 Jena 用户邮件列表中查看 2013 年的 this thread about datatype restrictions。戴夫·雷诺兹 (Dave Reynolds) 回复了与您类似的询问:
Datatype facets are OWL 2 and Jena only supports OWL 1.
It may be possible to use third party reasoners like Pellet to provide some OWL 2 capability.
Jena 不支持 OWL2 已在文档中明确提及。有一个 OWL2 词汇表 class 只定义了 OWL2 中使用的 IRI,它的 JavaDoc 包括(强调):
OWL2 vocabulary. NOTE: Jena does not provide OWL2 inference or OntModel support. These constants are provided for the convenience of users who are doing OWL2 work with the current OWL1 support and desire a suitable set of names.