Reputation: 423
I have a following problem to model in OWL using Protégé:
Multiple Song
s could be performed in different Performance
s. Each Song
could be arranged by different Arranger
in different Performance
.
I already know how to relate a Song
to a Performance
using object property. Now, how to map a Song
-Performance
pair to an Arranger
? (In relational database, I would call this as a "descriptive attribute" of a many-to-many Song
-Performance
relationship).
I know that I could use an annotation to an object property, but I would like to be able to infer something from this property. (For example: what Song
has an Arranger
arranged, and in which Performance
?) As far as I know, I am not able to do inference from an annotation.
Upvotes: 0
Views: 936
Reputation: 4001
It's not necessary to add properties of properties to model this scenario, although a property is an object (a uri) and therefore can include any property, not just annotation properties. rdfs:subPropertyOf is a good example. Statement reification isn't necessary either. It's a matter of creating an object that holds information about the song and performance.
Here is a model that represents an Arranger's relationship to a Song-Performance:
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 .
Given this list, an example instance is:
ex:Arranger-1 ex:arranged ex:SP1 .
ex:SP1 ex:performedIn ex:Performance_1 ;
ex:songPerformed ex:Song1 .
Then you can find which songs has an arranger arranged in a given performance through the following SPARQl query:
SELECT ?arranger ?song ?performance
WHERE {
?arranger a ex:Arranger ;
ex:arranged ?sp .
?sp ex:songPerformed ?song ;
ex:performedIn ?performance .
}
Upvotes: 1