Эквивалентный класс для переходного свойства - PullRequest
0 голосов
/ 05 июня 2018

У меня есть свойство объекта partOf, которое является переходным.

И я хочу сказать, что:

  • a partOf Year, тогда a - это Term
  • b partOf Term, тогда b это Course

И одновременно:

  • a partOf Knowledge_Group, тогда a это Knowledge_Area
  • b partOf Knowledge_Area, тогда b это Course

Для этого я использую это, чтобы сказать b partOf Term or Knowledge_Area, тогда b это Course:

:Course rdf:type owl:Class ;
        owl:equivalentClass [ rdf:type owl:Restriction ;
                              owl:onProperty :partOf ;
                              owl:someValuesFrom [ rdf:type owl:Class ;
                                                   owl:unionOf ( :Knowledge_Area
                                                                 :Term
                                                               )
                                                 ]
                            ] .

Но когда я запускаю мыслитель, я получаю все курсы, перечисленные как экземпляры класса Term и то же самое для Knowledge_Area:

enter image description here

enter image description here

Если я не использую or и задаю, что курс эквивалентен только partOf some Term или partOf some Knowledge_Area (отдельно и одинвремя от времени) Я не понимаю этой проблемы.

Есть ли способ, которым я могу сказать то, что я объяснил в начале, и не получить предполагаемые курсы типа Term?

Здесь есть минимальный пример :

@prefix : <http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#> .
@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#> .
@base <http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27> .

<http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27> rdf:type owl:Ontology .

#################################################################
#    Object Properties
#################################################################

###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#partOf
:partOf rdf:type owl:ObjectProperty ,
                 owl:TransitiveProperty .


#################################################################
#    Classes
#################################################################

###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Course
:Course rdf:type owl:Class ;
        owl:equivalentClass [ rdf:type owl:Restriction ;
                              owl:onProperty :partOf ;
                              owl:someValuesFrom [ rdf:type owl:Class ;
                                                   owl:unionOf ( :Knowledge_Area
                                                                 :Term
                                                               )
                                                 ]
                            ] .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Knowledge_Area
:Knowledge_Area rdf:type owl:Class ;
                owl:equivalentClass [ rdf:type owl:Restriction ;
                                      owl:onProperty :partOf ;
                                      owl:someValuesFrom :Knowledge_Group
                                    ] .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Knowledge_Group
:Knowledge_Group rdf:type owl:Class ;
                 owl:disjointWith :Year .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Term
:Term rdf:type owl:Class ;
      owl:equivalentClass [ rdf:type owl:Restriction ;
                            owl:onProperty :partOf ;
                            owl:someValuesFrom :Year
                          ] .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Year
:Year rdf:type owl:Class .


#################################################################
#    Individuals
#################################################################

###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Course_1
:Course_1 rdf:type owl:NamedIndividual ;
          :partOf :Knowledge_Area_1 ,
                  :Term_1 .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Knowledge_Area_1
:Knowledge_Area_1 rdf:type owl:NamedIndividual ;
                  :partOf :Knowledge_Group_1 .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Knowledge_Group_1
:Knowledge_Group_1 rdf:type owl:NamedIndividual ,
                            :Knowledge_Group .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Term_1
:Term_1 rdf:type owl:NamedIndividual ;
        :partOf :Year_1 .


###  http://www.semanticweb.org/lucia/ontologies/2018/5/untitled-ontology-27#Year_1
:Year_1 rdf:type owl:NamedIndividual ,
                 :Year .


###  Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi

1 Ответ

0 голосов
/ 06 июня 2018

Семантика транзитивных ролей: если (x, y) \in R и (y, z) \in R, то (x, z) \in R.Исходя из этого из вашей онтологии, у вас есть:

(1) Course_1 partOf Knowledge_Area_1 partOf Knowledge_Group_1, что означает Course_1 partOf Knowledge_Group_1, что эквивалентно Knowledge_Area.

(2) Course_1 partOf Term_1 partOf partOf Year_1, что означает Course_1 partOf Year_1, что эквивалентно Term.

Следовательно, Course_1 представляет собой Term и Knowledge_Area, а с Courseэквивалентно Term or Knowledge_Area, Course_1 также является Course, что в значительной степени объясняется объяснением того, почему Course_1 является Term.

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

ObjectProperty: partOf

ObjectProperty: partOfKA
    SubPropertyOf: partOf
    Domain: Course

ObjectProperty: partOfKG
    SubPropertyOf: partOf
    Domain: Knowledge_Area

ObjectProperty: partOfTerm
    SubPropertyOf: partOf
    Domain: Course

ObjectProperty: partOfYear
    SubPropertyOf: partOf
    Domain: Term

Class: Course
Class: Knowledge_Area


Class: Knowledge_Group
    DisjointWith: Year

Class: Term

Class: Year
    DisjointWith: Knowledge_Group

Individual: Course_1
    Facts:  
     partOfKA  Knowledge_Area_1,
     partOfTerm  Term_1

Individual: Knowledge_Area_1
    Facts:  partOfKG  Knowledge_Group_1

Individual: Knowledge_Group_1
    Types: Knowledge_Group


Individual: Term_1
    Facts: partOfYear  Year_1

Individual: Year_1
    Types: Year

Строго говоря, вам не нужно свойство partOf в моем примере онтологии.Я просто добавил это для концептуальной ясности.Более того, в моем примере онтологии нет необходимости в переходных свойствах.

...