Резонер Fuseki не выводит классы диапазона данных (int)

Чтобы показать вам проблему (которая является ошибкой), я создал минимальный пример:

Это моя минимальная онтология

@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 (для пользователя с возрастом более 16 лет) и FemaleUser (для пользователя с полом как женщина)

Скриншот от протеже:

введите здесь описание изображения

Вы можете видеть, что протеже делает вывод, что :ania является одновременно женщиной и зрелым пользователем, однако фузеки просто делает вывод, что :ania является женщиной, но не зрелым.

введите здесь описание изображения

Обновлять

Я также попытался сделать свой эквивалентный класс в этих двух формах

Пользователь и hasAge некоторый xsd:int[>="16"^^xsd:int]

а также

Пользователь и hasAge некоторый xsd:int[>=16]

но тот же результат, который протеже выводит правильно, а фурсеки нет.


person Ania David    schedule 30.03.2016    source источник
comment
С чего бы фузеки вообще что-то делать? Вам нужно будет прикрепить OWL Reasoner, если вы хотите, чтобы fuseki отвечал выводами OWL.   -  person Joshua Taylor    schedule 30.03.2016
comment
@JoshuaTaylor Я уже поместил OWL Reasoner в свои фузеки. в противном случае это не означало бы, что я пользователь женского пола.   -  person Ania David    schedule 30.03.2016
comment
@JoshuaTaylor на этот раз я сделал очень минимальную онтологию, в которой она просто содержит проблему, и мой запрос касается только проблемы, я сделал это во время процесса отладки, в котором я пытался решить более серьезную проблему.   -  person Ania David    schedule 30.03.2016
comment
В данном случае это имеет значение. Аргументы OWL, поставляемые с Jena, не являются логически завершенными; это означает, что (по замыслу) существуют выводы OWL, которые они не будут вычислять. Аргументаторы OWL, доступные в Protege, должны быть логически законченными; это означает, что они должны производить все вытекающие из них аксиомы. В этом случае, я ожидаю, что алгоритмы рассуждений Jena OWL просто не делают рассуждений о типах данных. Это означает, что они ничего не будут делать с типом xsd:int[›= 16].   -  person Joshua Taylor    schedule 30.03.2016
comment
Можно использовать ФИЛЬТР в SPARQL. User hasAge ?X . FILTER (?X >= 16). Это можно обернуть в EXISTS.   -  person AndyS    schedule 30.03.2016


Ответы (1)


Аргументы OWL, поставляемые с Jena, не являются логически завершенными; это означает, что (по замыслу) есть выводы OWL, которые они не будут делать. Аргументаторы OWL, доступные в Protege, должны быть логически законченными; это означает, что они должны производить все вытекающие из них аксиомы.

В этом случае, OWL-рассуждения Jena просто не делают рассуждений о типах данных. Это означает, что они ничего не будут делать с типом xsd:int[>= 16]. В этом случае дело не только в том, что алгоритмы рассуждения Jena OWL не завершены, но и в том, что алгоритмы рассуждений Jena OWL нацелены на OWL 1, а фасетные рассуждения типа данных являются частью OWL 2, которую Jena не полностью поддерживает. Например, см. эта ветка об ограничениях типов данных от 2013 года в списке рассылки пользователей Jena. Дэйв Рейнольдс отвечает на запрос, аналогичный вашему:

Аспекты типа данных — OWL 2, а Jena поддерживает только OWL 1.

Возможно, можно будет использовать посредники сторонних производителей, такие как Pellet, чтобы обеспечить некоторые возможности OWL 2.

Неподдержка Jena OWL2 явно упоминается в документации. Существует OWL2 словарь, который просто определяет IRI, используемые в OWL2, и его JavaDoc включает (выделено мной):

Словарь OWL2. ПРИМЕЧАНИЕ: Jena не обеспечивает вывод OWL2 или поддержку OntModel. Эти константы предоставлены для удобства пользователей, которые работают с OWL2 с текущей поддержкой OWL1 и нуждаются в подходящем наборе имен.

person Joshua Taylor    schedule 30.03.2016
comment
вау, это удар по лицу, большой процент моей работы зависит от ограничений диапазона данных. В прошлом я использовал запрос троек, которые производит Protege OWL Reasoner, теперь я в носке, какое-нибудь решение, чтобы восстановить это, пожалуйста? (ссылка которую вы дали не работает) - person Ania David; 30.03.2016
comment
Если вы прочитаете остальную часть ветки, на которую я ссылаюсь, вы увидите, что можно использовать Pellet или другие средства рассуждения вместе с Fuseki. Protege, насколько мне известно, не имеет своего собственного ракурсера OWL, а использует другие ризонеры, предоставляющие API. Джена может использовать некоторые из тех же аргументов. - person Joshua Taylor; 30.03.2016
comment
@AniaDavid Я внес некоторые изменения в свой ответ, можете ли вы проверить, работает ли ссылка сейчас или нет? Это работает для меня. (Обязательно обновите ответ.) - person Joshua Taylor; 30.03.2016
comment
Ссылка работает, спасибо, пожалуйста, есть ли у вас какие-либо официальные страницы, в которых говорится, что Jena не поддерживает OWL 2? Я проверяю ссылку, это просто вопрос, как я могу увидеть ответ на него, пожалуйста? - person Ania David; 30.03.2016
comment
подавленный и опустошенный - person Ania David; 30.03.2016
comment
@Ania Как я уже сказал, прочитайте другие сообщения в ветке. В треде есть ссылки на предыдущее и следующее сообщения. Они выглядят как « Thread ». Обратите внимание, что у пользователя возникли некоторые трудности с использованием Pellet. Остальные сообщения в ветке не решат полностью вашу проблему, но могут помочь найти решение. - person Joshua Taylor; 30.03.2016
comment
@AniaDavid Что касается официального заявления о неподдержке OWL2, я обновил свой ответ. - person Joshua Taylor; 30.03.2016
comment
Я знаю, что это отдельный вопрос (они не позволяют мне добавлять новый вопрос из-за вопросов низкого качества), извините меня, но, пожалуйста, знаете ли вы, как добавить библиотеку Pellet в Fuseki? - person Ania David; 30.03.2016
comment
@AniaDavid Поиск в Google по запросу «использовать гранулы с фузеки» выдает Fuseki с помощью Pellet Inference, который выглядит многообещающе и включает содержимое конфигурации Fuseki. Вы пробовали вещи, предложенные там? Без конкретных проблем, я не думаю, что вы получите слишком много указаний от Stack Overflow. - person Joshua Taylor; 30.03.2016
comment
Я уже видел это, потому что я также искал в Интернете, но эта ссылка предназначена для Fuseki 0.2.7, а не 2.3.1, теперь моя проблема заключается в том, как добавить этот Pellet Reasoner в Fuseki, чтобы я мог использовать его вместо сборки в OWL jena Reasoner. Я задам новый вопрос, когда мне разрешат, я уже знал, что мне нужно установить ReasonerClass в Fuseki config.tt, я сделал, но проблема в том, что я не знаю, как включить библиотеку Pellet (и где их взять из Githut для Pellet нет банок для выпуска) - person Ania David; 30.03.2016
comment
Эта страница помогла мне включить нужные мне банки, мне просто нужно найти банки для Pellet jena.apache.org/documentation/permissions/example.html - person Ania David; 30.03.2016
comment
Вы можете скомпилировать код с GitHub и, таким образом, собрать jar-файлы, но вам также может повезти с jar-файлами, которые вы можете получить от Maven. См. search.maven.org/#search|ga|1|pellet. . - person Joshua Taylor; 30.03.2016
comment
Хорошо, я получил банки от maven и задал здесь новый вопрос stackoverflow.com/questions/36313972/ - person Ania David; 30.03.2016