我在使用Protégé进行OWL建模时遇到以下问题:
可以在不同的Song
s中执行多个Performance
。每个Song
可以由不同Arranger
的不同Performance
排列。
我已经知道如何使用对象属性将Song
与Performance
相关联。现在,如何将Song
- Performance
对映射到Arranger
? (在关系数据库中,我将其称为多对多Song
- Performance
关系的“描述性属性”。
我知道我可以对对象属性使用注释,但我希望能够从该属性推断出某些东西。 (例如:Song
排列了Arranger
,Performance
是什么?)据我所知,我无法从注释中进行推理。
答案 0 :(得分:1)
虽然属性是一个对象(一个uri),但没有必要添加属性属性来建模这个场景,因此可以包含任何属性,而不仅仅是注释属性。 rdfs:subPropertyOf就是一个很好的例子。声明的具体化也是不必要的。这是一个创建一个包含歌曲和表演信息的对象的问题。
这是一个表示编曲者与歌曲表演的关系的模型:
ex:SongPerformance a owl:Class .
ex:Arranger a owl:Class .
ex:arranged rdfs:domain ex:Arranger ;
rdfs:range ex:SongPerformance .
ex:songPerformed rdfs:domain ex:SongPerformance ;
rdfs:range ex:Arranger .
ex:performedIn rdfs:domain ex:SongPerformance ;
rdfs:range ex:Arranger .
鉴于此列表,示例实例为:
ex:Arranger-1 ex:arranged ex:SP1 .
ex:SP1 ex:performedIn ex:Performance_1 ;
ex:songPerformed ex:Song1 .
然后,您可以通过以下SPARQl查询找到哪些歌曲在给定的演奏中排列了编曲:
SELECT ?arranger ?song ?performance
WHERE {
?arranger a ex:Arranger ;
ex:arranged ?sp .
?sp ex:songPerformed ?song ;
ex:performedIn ?performance .
}