0

I have a following problem to model in OWL using Protégé:

Multiple Songs could be performed in different Performances. 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.

Saiful
  • 423
  • 5
  • 9
  • In other ontology editors, like TopBraid, you can reify a triple. That's not possible in Protégé, but you can achieve similar results with other means, using equivalent classes for example. If you provide more details of your data and what you want to achieve, it would be easier to propose a solution. – Ivo Velitchkov Jun 22 '16 at 07:58
  • 3
    Standard reading material for this type of problem: [Defining N-ary Relations on the Semantic Web](https://www.w3.org/TR/swbp-n-aryRelations/). – Joshua Taylor Jun 22 '16 at 18:10
  • I'd say this could be considered a duplicate of [How can I express additional information (time, probability) about a relation in RDF?](http://stackoverflow.com/questions/32923213/how-can-i-express-additional-information-time-probability-about-a-relation-in/33619395), which also includes some more possibilities outside of Protege (e.g., in Triple and Quad-Stores). – Joshua Taylor Jun 22 '16 at 18:11

1 Answers1

1

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 .
}
scotthenninger
  • 3,921
  • 1
  • 15
  • 24
  • "Statement reification isn't necessary either. It's a matter of creating an object that holds information about the song and performance." That additional object is essentially a reification of the (implicit) higher-arity relation performance(arranger, performance, song). But I agree that conceptually it may help to think of it as a completely new type of object that has a bunch of properties. – Joshua Taylor Jun 22 '16 at 18:09
  • "Statement reification" is a specific kind of reification that is a statement about a statement, using `rdf:subject`, `rdf:predcate`, and `rdf:object`. It's often defined as a member of `rdf:Statement`, hence the term "statement reification". I was being clear that this kind of reification is not needed, contrary to one of the comments. – scotthenninger Jun 22 '16 at 19:14
  • Yes, reification has a narrower specific technical usage in RDF, that's described in section [5.3 Reification Vocabulary](https://www.w3.org/TR/2014/REC-rdf-schema-20140225/#ch_reificationvocab) of the standard. Reification (e.g., https://en.wikipedia.org/wiki/Reification_(computer_science) and https://en.wikipedia.org/wiki/Reification_(knowledge_representation)) is also a more broadly applicable term where something that you can't directly talk about it abstracted into something that you can. – Joshua Taylor Jun 22 '16 at 20:08
  • 1
    My point was just that whether one uses the RDF Reification vocabulary or not, the approach here is still reification (in the broad sense): turning a statement (that can't be directly referenced) into something that can (an object about which statements can be made). – Joshua Taylor Jun 22 '16 at 20:10
  • Understood. Or one can just say it's a normal function of an object property (relationship), that references an object encapsulating the data. – scotthenninger Jun 22 '16 at 20:34