Кардиналност DL заявки в OWL в Protégé

Опитвам се да направя заявка с ограничение на кардиналността. Заявката изглежда така

Клас Aи (роля A мин 2 ClassB)

но това връща празен набор. От друга страна, когато правя заявката

Клас A и (роля A някои ClassB)

връща някои индивиди от ClassA. Защо заявката за кардиналност не работи, когато знам, че определено има най-малко две роли като на някои лица от клас A?

За да бъда по-конкретен, имам класовете Отбор, Играч и Позиция и свойствата на обекта employs (което се отнася Отбори и Играчи) и hasPosition (което се отнася до Играчи и Позиции). Опитвам се да направя запитването

Отборът и използва мин 2 (Играч и има Позиция някои { Нападател**} **)

което трябва да върне отборите с два или повече нападатели, но очевидно, тъй като OWL не прави предположението за уникално име, връща празен набор. Опитах се да декларирам, че някои от моите индивиди са различни, но когато изпълня заявката с отделните индивиди на място, това кара Protégé да се срине. Protégé не се срива при изпълнение на заявката без отделните индивиди.

Редактиране:

Съобщение за грешка от Pellet в Protege Съобщение за грешкаStriker, показано в Ontology XML Нападател, показан в 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
Добре, така че заявката inverse(employs) some (employs value Luis_Suarez) and hasPosition value Striker пита за нападатели, наети от същия клуб, който наема Луис Суарес, и получаваме трите резултата с Пелет, които бихме очаквали (лицата, които споменахте ). Други заявки обаче висят/сриват...   -  person Joshua Taylor    schedule 01.04.2014
comment
Ако опитате с Pellet, той ви дава обширно съобщение за изключение от Java компилатора, което може да помогне при диагностицирането на проблема.   -  person ChrisDLFC    schedule 01.04.2014


Отговори (1)


Все още няма достатъчно информация в този въпрос, за да определим защо не получавате резултатите, които търсите, но можем да възпроизведем сценария достатъчно добре, за да покажем, че това е постижимо. Помислете за онтология с три класа и някои индивиди:

  • Играч {p1, p2}
  • Екип {team1}
  • Позиция {Striker}

и аксиомите

  • p1 ≠ p2
  • team1 използва p1
  • team1 използва p2
  • p1 има Позиция Нападател
  • p2 има Позиция Нападател

След това запитването

  • Отборът и използва мин 2 (Играч и има позиция стойност Нападател)

връща индивидуалния отбор1. (Това работи и с „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
Точно това имам и имам преди да задам въпроса, само с повече отбори и играчи и позиции в онтологията. При изпълнение на заявката Protege замръзва всеки път, но без информация защо в нормалния дневник. - 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 индивида (предимно играчи), досега съм заявил само, че двама имат връзката hasPosition Striker. Резонерът работи с всички други заявки, които опитвам, така че ще трябва да го разгледам повече. Използвам Fact++ като аргумент. Единствената разлика с горната структура е, че имам играч, включен в клас, наречен персонал. - person ChrisDLFC; 01.04.2014
comment
@ChrisDLFC Същото нещо случва ли се с различен аргумент? - person Joshua Taylor; 01.04.2014
comment
Току-що пробвах Pellet, той не замръзва, но записва грешка, която гласи, Striker (показва пълната XML връзка) не е намерен в KB (База знания), но е там, иначе същата заявка се заменя с „Някои“ с min 2 няма да работи. - person ChrisDLFC; 01.04.2014
comment
Ще редактирам оригиналната публикация с някои екранни снимки. - person ChrisDLFC; 01.04.2014
comment
На екранната снимка се показва, че Striker е включен от Forward и след това Forward е включен от Position. Същата заявка както с позиция, така и с работа напред, само не с номиналната стойност „Нападател“. След по-задълбочено проучване всички вложени заявки, които препращат към номинали, например Club и използват мин. 2 (Player и hasPosition стойност {Striker}) дават грешка, но Player и hasPosition стойност {Striker} са добре. По същия начин Club и наема мин. 2 (Player и hasNationality стойност {Germany}) не могат да намерят номиналната „Germany“, но Player and hasNationality стойност {Germany} работи добре. - person ChrisDLFC; 01.04.2014
comment
От друга страна, всяка вложена заявка, която препраща към клас, е добра, като Club и използва мин. 2 (Player и hasPosition some Forward) - person ChrisDLFC; 01.04.2014
comment
Нямам представа какво го поправи, но след всички промени, които направих в онтологията днес, този проблем изглежда се е разрешил сам. - person ChrisDLFC; 02.04.2014
comment
Хм, заявката не се проваля всеки път, но все пак понякога се проваля. Виждате ли някакви проблеми с това? - person ChrisDLFC; 02.04.2014