SWRL и Rolification не могат да върнат това, което искам

Разработих онтология и искам да добавя следния SWRL в protege:

Divider_intersection(?node), is_extent_of(?node, ?s), builds(?s, ?l),Segment(?s),Lane(?l),detailed_partition(?d), builds(?l, ?d)-> is_divided_at(?d, ?node)

с това искам да добавя свойство на обект, is_divided_at, между индивид от детайлен_раздел (?d) и възел, който е класифициран като divider_intersection, ако това е степента на сегмент (?s), който изгражда лента (?l) които след това изграждат подробния?дял (?d). Както беше отбелязано тук, търся NamedIndividuals, следователно предполагам, че SWRL трябва да свърши работата.

По-нататъшно проучване открих Rolification (1, 2, 3) като възможен отговор обаче никога не съм го използвал преди, но направих следната верига:

r_Divider_intersection o is_extent_of o r_Segment o builds o r_Lane o builds o r_detailed_partition

все още не получавам отговора. Някаква идея какво не е наред?


person msc87    schedule 16.07.2015    source източник
comment
Не можем да видим вашата онтология и външните връзки не помагат много (напр. може да изтекат). Можете ли да публикувате онтологията тук, моля?   -  person Joshua Taylor    schedule 21.07.2015
comment
Въпреки това веригата на свойствата и правилото SWRL изглеждат правилни. Вероятно има някаква малка грешка някъде, но изглежда, че имате правилния подход, ако искате да използвате ролификация вместо SWRL правило.   -  person Joshua Taylor    schedule 21.07.2015
comment
между другото, тъй като веригата започва с възела и завършва с подробния дял, не трябва ли заключението да бъде is_divided_at(?node,?d) (т.е. с ?възел и ?d в другия ред)?   -  person Joshua Taylor    schedule 21.07.2015
comment
прав си... така че ако искам да променя реда на аргументите в моя is_divided_at, трябва да обърна всички отношения, нали?   -  person msc87    schedule 21.07.2015
comment
Можете да направите това, но ако не искате да го направите, можете просто да добавите ново свойство на обект dividesAt, да потвърдите, че е обратното на isDividedAt и след това направете аксиома за веригата на подсвойства, използвайки dividesAt.   -  person Joshua Taylor    schedule 21.07.2015
comment
@JoshuaTaylor: Опитах се да копирам и прехвърля моята онтология тук, но не е възможно, тъй като е толкова голяма. как мога да използвам връзки на място, за да ви доставя моята онтология?   -  person msc87    schedule 21.07.2015
comment
Не трябва да имате нужда от голяма онтология, за да илюстрирате проблема, който имате. Трябва да създадете минимален пример, който демонстрира проблема. Знам, че в този случай е възможно, тъй като почти го направих в отговора си. Публикувайте минимална онтология, която има само частите, от които се нуждаете, за да илюстрирате проблема. Може да намерите полезен Как да създадете минимален, пълен и проверим пример.   -  person Joshua Taylor    schedule 21.07.2015


Отговори (1)


Вашият подход работи и без да видим вашата онтология (вашата връзка изисква разрешения, а външните връзки така или иначе не са много полезни), не можем да разберем защо вашата конкретна конструкция работи. Едно нещо, което изскача от въпроса ви, е, че изглежда, че вашето свойство is_divided_at има своите аргументи (?d,?node) в ред, обратен на този във веригата на свойствата аксиома ще произведе. Както и да е, ето един работещ пример.

екранна снимка в protege

@prefix :      <urn:ex:#> .
@prefix ex:    <urn:ex:#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

ex:isDividedAt  a               owl:ObjectProperty ;
        owl:propertyChainAxiom  ( ex:_DividerIntersection ex:isExtentOf ex:_Segment ex:builds ex:_Lane ex:builds ex:_DetailedPartition ) .

ex:Segment  a                owl:Class ;
        owl:equivalentClass  [ a               owl:Restriction ;
                               owl:hasSelf     true ;
                               owl:onProperty  ex:_Segment
                             ] .

ex:_DetailedPartition
        a       owl:ObjectProperty .

ex:DividerIntersection
        a                    owl:Class ;
        owl:equivalentClass  [ a               owl:Restriction ;
                               owl:hasSelf     true ;
                               owl:onProperty  ex:_DividerIntersection
                             ] .

ex:_Segment  a  owl:ObjectProperty .

ex:_Lane  a     owl:ObjectProperty .

ex:builds  a    owl:ObjectProperty .

ex:dividerIntersection0
        a              owl:NamedIndividual , ex:DividerIntersection ;
        ex:isExtentOf  ex:segment0 .

<urn:ex:>  a    owl:Ontology .

ex:detailedPartition0
        a       owl:NamedIndividual , ex:DetailedPartition .

ex:_DividerIntersection
        a       owl:ObjectProperty .

ex:segment0  a     owl:NamedIndividual , ex:Segment ;
        ex:builds  ex:lane0 .

ex:DetailedPartition  a      owl:Class ;
        owl:equivalentClass  [ a               owl:Restriction ;
                               owl:hasSelf     true ;
                               owl:onProperty  ex:_DetailedPartition
                             ] .

ex:isExtentOf  a  owl:ObjectProperty .

ex:lane0  a        owl:NamedIndividual , ex:Lane ;
        ex:builds  ex:detailedPartition0 .

ex:Lane  a                   owl:Class ;
        owl:equivalentClass  [ a               owl:Restriction ;
                               owl:hasSelf     true ;
                               owl:onProperty  ex:_Lane
                             ] .
person Joshua Taylor    schedule 21.07.2015
comment
Тук трябва да добавя нещо, че divider_intersection също се извежда. Всъщност трябва да знам дали даден възел се предполага, че е разделител, тогава подробната_част е_разделена_в този възел. И да заключим, че възелът трябва да бъде продължението на сегмент, който изгражда лента, която след това изгражда тази детайлна част :D... Мисля, че това го прави малко сложен за мен - person msc87; 21.07.2015
comment
Не съм сигурен какво имаш предвид. Изводите ще продължат да работят, дори ако нещо е изведено като DividerIntersection, вместо директно да се твърди, че е такова. - person Joshua Taylor; 21.07.2015
comment
Благодаря ти много, Джошуа Тейлър, ти ми помогна много. Сега работи. Може ли да ви питам нещо? Аз също съм докторант в Швеция и наскоро започнах да работя с онтология в областта на пространствените данни, надявам се, че може би ще можем да си сътрудничим повече. - person msc87; 21.07.2015