如何在Protégé中定义多个域和范围连接?

Bea*_*ind 2 rdf owl ontology protege4 protege

我是Protégé的新手。我正在开发一个本体。我的本体类的一部分通过“具有”关系与其他类连接。例如:

Activity has Location
Household has Location
Intervention has CloseWork
Run Code Online (Sandbox Code Playgroud)

我在Protege中将活动,家庭,位置,干预和CloseWork声明为类。我声明“具有”为ObjectProperty。为了显示类之间的关系,我设置了“具有” ObjectProperty的域和范围。例如:为了显示“活动具有位置”,我将“活动”设置为域,并将“位置”设置为范围。我将本体保存为RDF / XML语法。文件显示了我的“具有”对象属性,如下所示:

<owl:ObjectProperty rdf:about="www.ndssl.vbi.vt.edu/epidl#has">
    <rdfs:domain rdf:resource="www.ndssl.vbi.vt.edu/epidl#Activity"/>
    <rdfs:domain rdf:resource="www.ndssl.vbi.vt.edu/epidl#Household"/>
    <rdfs:range rdf:resource="www.ndssl.vbi.vt.edu/epidl#Location"/>
    <rdfs:domain rdf:resource="www.ndssl.vbi.vt.edu/epidl#Intervention"/>
    <rdfs:range rdf:resource="www.ndssl.vbi.vt.edu/epidl#CloseWork"/>
</owl:ObjectProperty>
Run Code Online (Sandbox Code Playgroud)

从上述RDF语句中,不可能找出哪个域连接到哪个范围(例如,活动具有位置)。请让我知道如何解决它。

Jee*_*tra 5

您不能使用rdfs:domainrdfs:range这样。按说域has组成ActivityHousehold并且Intervention您实际上声称使用的每一个人has财产的一个实例,所有三个这些类的,在同一时间。这可能不是您想要的。

相反,您需要使用OWL限制。在这种情况下,您需要一个owl:allValuesFrom限制。您在他们所持有的班级上表达这些。因此,例如,在类上,Activity您将表达某种效果(使用Turtle语法):

  :Activity rdfs:subClassOf [ a owl:Restriction ; 
                              owl:onProperty :has ; 
                              owl:allValuesFrom :Location . ]
Run Code Online (Sandbox Code Playgroud)

这表示如果类的实例Activity使用has属性,则该属性的值必须Location

冲洗并重复其他针对特定类别的限制。

另一种选择是使用更具体的属性,而不是毫无意义的一般“具有”关系。例如:

:hasLocation a owl:ObjectProperty ;
         rdfs:range :Location .

:hasCloseWork a owl:ObjectProperty ;
         rdfs:domain :Intervention ;
         rdfs:range :CloseWork .
Run Code Online (Sandbox Code Playgroud)

这种方法的另一个优点是您的数据在语义上变得更丰富,并且更易于查询(假设这是将来将来要执行的操作)。