我是Protégé的新手。我正在开发一个本体论。我的本体类的一部分通过“has”关系与其他类连接。例如:
Activity has Location
Household has Location
Intervention has CloseWork
我将Activity,Household,Location,Intervention和CloseWork声明为Protege中的类。我将“has”声明为ObjectProperty。为了显示类之间的关系,我设置了“has”ObjectProperty的域和范围。例如:要显示“Activity has Location”,我将Activity设置为域,将Location设置为范围。我将我的Ontology保存为RDF / XML语法。文件显示我的“has”对象属性,如下所示:
<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>
从上面的RDF语句中,无法确定哪个域连接到哪个范围(例如,Activity有位置)。请让我知道如何解决它。
答案 0 :(得分:4)
您不能以这种方式使用rdfs:domain
和rdfs:range
。通过说has
的域名由Activity
,Household
和Intervention
组成,您实际上断言使用has
属性的每个人都是这三个类的所有三个同时。这可能不是你想要的。
您需要使用OWL限制。在这种情况下,您需要owl:allValuesFrom
限制。你在他们所持有的课堂上表达这些。因此,例如,在类Activity
上,您将表达某些内容(在Turtle语法中):
:Activity rdfs:subClassOf [ a owl:Restriction ;
owl:onProperty :has ;
owl:allValuesFrom :Location . ]
这表示如果类Activity
的实例使用has
属性,则该属性的值必须为{{ 1}}。
冲洗并重复其他特定类别的限制。
另一种选择是使用更具体的属性,而不是一个相当无意义的一般性的“关联”。例如:
Location
这种方法的另一个优点是,您的数据在语义上变得更加丰富,并且更容易查询(假设这是您将来某个时候想要做的事情)。