Запросы Cardinality DL в OWL в Protégé

Я пытаюсь сделать запрос с ограничением кардинальности. Запрос выглядит так

Класс A и (роль A минимум 2 класса B)

но это возвращает пустой набор. С другой стороны, когда я делаю запрос

Класс A и (роль A некоторые класса B)

он возвращает некоторых особей ClassA. Почему запрос кардинальности не работает, когда я знаю, что у некоторых лиц класса А определенно есть как минимум две роли А?

Чтобы быть более конкретным, у меня есть классы Team, Player и Position, а свойства объекта employs (которые связаны Команды и Игроки), а также hasPosition (связанный с Игроками и Позициями). Я пытаюсь сделать запрос

В команде и работает мин 2 (игрок и занимает позицию некоторые { нападающие**} **)

который должен возвращать команды с двумя или более Страйкерами, но, очевидно, поскольку OWL не делает предположения об уникальном имени, он возвращает пустой набор. Я попытался объявить, что некоторые из моих лиц являются отдельными, но когда я выполняю запрос с отдельными лицами на месте, это приводит к сбою Protégé. Protégé не падает при выполнении запроса без отдельных лиц.

Редактировать:

Сообщение об ошибке от Pellet в Protege Сообщение об ошибкеStriker, показанное в Ontology XML Нападающий показан в Ontology XML


person ChrisDLFC    schedule 31.03.2014    source источник
comment
Вам нужно будет показать свои данные. В противном случае мы не сможем узнать, что запрос должен вернуть. Помните, что OWL не делает предположения об уникальности имени: если я утверждаю p(a,b) и p(a,c) и запрашиваю p min 2, я не получу a, пока не утверждаю, что b ≠ c. В противном случае может быть так, что b = c, и в этом случае a не обязательно имеет по крайней мере два значения для p.   -  person Joshua Taylor    schedule 31.03.2014
comment
Вы все еще не добавили свои данные; вы только что добавили больше текста, описывающего это. Без минимальной онтологии, в которой мы видим возникновение той же проблемы, мы не можем ее диагностировать.   -  person Joshua Taylor    schedule 01.04.2014
comment
Здесь все еще недостаточно, чтобы воспроизвести проблему (нет данных, которые мы могли бы скачать, открыть в Protégé локально и увидеть крах сами). Однако трассировка стека и фрагмент OWL, безусловно, делают это более интересным. Похоже, что это может быть ошибка Pellet, и в этом случае следующим шагом может быть обращение к списку рассылки Pellet…   -  person Joshua Taylor    schedule 01.04.2014
comment
Если это была просто ошибка Pellet, то почему это должно вызывать сбой FaCT++ каждый раз, когда я запускаю запрос, а механизм рассуждений HermiT вообще не инициализируется при нажатии Start Reasoner, оба этих других механизма рассуждений прекрасно работают на небольших онтологиях? Должен ли я предоставить ссылку, чтобы вы могли скачать онтологию?   -  person ChrisDLFC    schedule 01.04.2014
comment
Хорошая мысль о поведении разных рассуждающих. Я бы по-прежнему советовал вам попробовать использовать эти аргументы за пределами Protégé и посмотреть, какое поведение вы получите. Что касается доступности онтологии: да, сделайте это — я говорил об этом с самого первого комментария! :) В настоящее время ни у кого нет возможности воспроизвести эту проблему и взглянуть на нее, пока вы не поделитесь данными, которые на самом деле вызывают проблему. Это стандартная процедура отладки; если нельзя воспроизвести ошибку, то вероятность того, что ее исправят, гораздо меньше.   -  person Joshua Taylor    schedule 01.04.2014
comment
Хорошо, у меня есть онтология. Каких игроков мне нужно изменить, чтобы какой-то клуб нанял хотя бы двух нападающих?   -  person Joshua Taylor    schedule 01.04.2014
comment
я думаю, что он уже установлен в онтологии, Luis_Suarez, Daniel_Sturridge и Iago_Aspas — это 3, которые я сделал отличными друг от друга, и запрос должен возвращать Liverpool_FC. Это единственные три, которые я сделал непересекающимися, пока только тестировал их.   -  person ChrisDLFC    schedule 01.04.2014
comment
Просто замечание по терминологии: классы (поскольку они по сути являются множествами) не пересекаются; люди различны или различны. (Извините, просто любимая мозоль, которая терла меня.)   -  person Joshua Taylor    schedule 01.04.2014
comment
ОК, поэтому запрос, инверсный (использует) some (использует значение Luis_Suarez) и имеет значение hasPosition Striker, запрашивает нападающих, нанятых тем же клубом, в котором работает Луис Суарес, и мы получаем три ожидаемых результата с Pellet (людей, которых вы упомянули ). Хотя другие запросы зависают/вылетают…   -  person Joshua Taylor    schedule 01.04.2014
comment
Если вы попробуете использовать Pellet, он выдаст вам подробное сообщение об исключении от компилятора Java, которое может помочь диагностировать проблему.   -  person ChrisDLFC    schedule 01.04.2014


Ответы (1)


В этом вопросе пока недостаточно информации, чтобы определить, почему вы не получаете желаемых результатов, но мы можем достаточно хорошо воспроизвести сценарий, чтобы показать, что это достижимо. Рассмотрим онтологию с тремя классами и некоторыми индивидуумами:

  • Игрок {п1, п2}
  • Команда {команда1}
  • Позиция {Нападающий}

и аксиомы

  • p1 ≠ p2
  • team1 нанимает p1
  • team1 нанимает p2
  • p1 hasPosition Striker
  • p2 hasPosition Striker

Затем запрос

  • В команде и работает мин 2 (игрок и имеет позицию значение нападающего)

возвращает отдельную команду team1. (Это работает и с «hasPosition some {Striker}», но только для одного значения я думаю, что ключевое слово value подходит лучше.)

результаты в Protege

Вот онтология:

@prefix :      <http://stackoverflow.com/q/22688901/1281433/competitions#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://stackoverflow.com/q/22688901/1281433/competitions>
        a       owl:Ontology .

:Player  a      owl:Class .
:Position  a    owl:Class .
:Team   a       owl:Class .

:hasPosition  a  owl:ObjectProperty .

:Striker  a     owl:NamedIndividual , :Position .

:p1     a             owl:NamedIndividual , :Player ;
        :hasPosition  :Striker .

:p2     a             owl:NamedIndividual , :Player ;
        :hasPosition  :Striker .

[ a                    owl:AllDifferent ;
  owl:distinctMembers  ( :p1 :p2 )
] .

:team1  a         owl:NamedIndividual , :Team ;
        :employs  :p1 , :p2 .
person Joshua Taylor    schedule 31.03.2014
comment
Это именно то, что есть у меня и у меня было до того, как задать вопрос, просто с большим количеством команд, игроков и позиций в онтологии. При запуске запроса протеж каждый раз зависает, правда без информации почему в обычном логе. - person ChrisDLFC; 01.04.2014
comment
@ChrisDLFC Если вы опубликуете свои данные, возможно, мы сможем определить, в чем разница. В противном случае это не совсем воспроизводимо, и, боюсь, вы вряд ли получите полезный ответ от Stack Overflow. - person Joshua Taylor; 01.04.2014
comment
Как я могу получить «моментальный снимок» проблемной области? У меня более 5000 человек, поэтому я не могу опубликовать Xml-файл онтологии, как вы делали это несколько раз. - person ChrisDLFC; 01.04.2014
comment
@ChrisDLFC Что ж, это важная информация: рассуждать с большим количеством людей, вероятно, будет сложнее для рассуждающего (к тому же, какой аргумент вы используете?), чем рассуждать только с несколькими. Как говорится в справочном центре, важно создать минимальный, полный и проверяемый пример. В этом случае попробуйте сериализовать свою модель в Turtle и вырезать ее с помощью текстового редактора, пока она не заработает в Protégé. Тогда вы можете спросить, почему это работает с 517 особями, но не с 518? Или, может быть, было бы полезно поэкспериментировать с командной строкой Pellet… - person Joshua Taylor; 01.04.2014
comment
@ChrisDLFC … инструменты, и в этом случае вы можете столкнуться с ситуацией, когда вы можете спросить, почему это работает с Pellet в командной строке, но не в Protege? Если у вас на самом деле есть структура того же типа, что я показал (что мы не можем гарантировать, так как мы не видели ваших данных), то проблема не в моделировании OWL или запросе DL, а в резонер или протеже. - person Joshua Taylor; 01.04.2014
comment
Я построил ту же Онтологию только с одной командой, двумя игроками и одной позицией, и на этот раз она сработала. Несмотря на то, что у меня более 5000 человек (в основном игроки), пока я только сказал, что у двоих есть отношения с Позицией Нападающего. Reasoner работает со всеми другими запросами, которые я пытаюсь выполнить, поэтому мне придется изучить его подробнее. Я использую Fact++ в качестве аргумента. Единственное отличие от приведенной выше структуры заключается в том, что у меня есть Player, относящийся к классу Staff. - person ChrisDLFC; 01.04.2014
comment
@ChrisDLFC То же самое происходит с другим аргументом? - person Joshua Taylor; 01.04.2014
comment
Я только что попробовал Pellet, он не зависает, но регистрирует ошибку, в которой говорится, что Striker (показывает полную ссылку XML) не найден в базе знаний (KB), но в остальном тот же запрос заменяется на «Some». с мин 2 не будет работать. - person ChrisDLFC; 01.04.2014
comment
Я отредактирую исходный пост с несколькими скриншотами. - person ChrisDLFC; 01.04.2014
comment
На скриншоте показано, что Страйкер входит в состав Форварда, а затем Форвард входит в состав Позиции. Тот же запрос работает и с Позицией, и с Форвардом, только не с номинальным значением «Страйкер». После дополнительных исследований все вложенные запросы, которые ссылаются на номиналы, например Club, и используют min 2 (Player и значение hasPosition {Striker}), дают ошибку, но значение Player и hasPosition {Striker} в порядке. Точно так же Club и использует минимум 2 (игрок и значение hasNationality {Германия}) не может найти номинальное значение «Германия», но игрок и значение hasNationality {Германия} работает нормально. - person ChrisDLFC; 01.04.2014
comment
С другой стороны, любой вложенный запрос, который ссылается на класс, прекрасен, например Club, и использует min 2 (Player и hasPosition some Forward) - person ChrisDLFC; 01.04.2014
comment
Я понятия не имею, что это исправило, но после всех изменений, которые я внес в онтологию сегодня, эта проблема, кажется, разрешилась сама собой. - person ChrisDLFC; 02.04.2014
comment
Хм, запрос не каждый раз терпит неудачу, но все же иногда. Можете ли вы увидеть какие-либо проблемы с этим? - person ChrisDLFC; 02.04.2014