SWRL и Rolification не могут вернуть то, что я хочу

Я разработал онтологию и хочу добавить следующий SWRL в протеже:

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, между индивидуумом из detail_partition (?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) (т. е. с ?node и ?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) в порядке, противоположном цепочке свойств. аксиома будет производить. Во всяком случае, вот рабочий пример.

скриншот в протеже

@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
Я должен кое-что добавить сюда, что также подразумевается делитель_пересечения. На самом деле мне нужно знать, предполагается ли, что узел является разделителем, а затем detail_part is_divided_at этого узла. И чтобы сделать вывод, что узел должен быть продолжением сегмента, который строит полосу, которая затем строит эту детальную_часть :D ... Я думаю, что это делает это немного сложным для меня. - person msc87; 21.07.2015
comment
Я не уверен, что ты имеешь в виду. Выводы по-прежнему будут работать, даже если что-то выведено как DividerIntersection, а не прямо утверждается как таковое. - person Joshua Taylor; 21.07.2015
comment
Большое спасибо, Джошуа Тейлор, ты мне очень помог. Теперь это работает. Можно вас спросить о чем-то? Я тоже аспирант в Швеции и недавно начал работать с онтологией в области пространственных данных, я надеюсь, что мы сможем больше сотрудничать. - person msc87; 21.07.2015