8

I'm currently playing a bit with the OWL and especially with restrictions. I'm trying to create a query that does the following:

Suppose that I have a class 'Cinema' that has a property 'movies' (that contains objects of type 'Movie'). The class 'Movie' contains a property named 'genre'. Now I want to create a class ActionCinemas that only has movies with the genre 'action'.

I'm really not sure how to do this. I was thinking about doing something with intersections or the cardinality but I'm not sure of that.

Could anyone give me a hand in this?

Devos50
  • 2,025
  • 4
  • 25
  • 56

1 Answers1

12

You need a combination of an allValuesFrom restriction and a hasValue restriction, e.g like this:

Turtle syntax:

 my:ActionCinema a owl:Class ;
      rdfs:subClassOf my:Cinema,
                      [ a owl:Restriction; 
                        owl:onProperty my:hasMovie ;
                        owl:allValuesFrom [ a owl:Restriction ; 
                                            owl:onProperty my:hasGenre ;
                                            owl:hasValue my:Action ]
                      ] .

Manchester OWL syntax:

Class: ActionCinema
   SubClassOf: Cinema that hasMovie only ( hasGenre value Action )
Jeen Broekstra
  • 21,642
  • 4
  • 51
  • 73
  • Why do you use conjunction (`that`) instead a comma between `Cinema` and `hasMovie` in Manchester OWL syntax? – whirlwin Mar 20 '13 at 14:37
  • @whirlwin Both say the basically the same thing, so it's a matter of taste, I just think the first (using 'that') is more clear and concise. – Jeen Broekstra Mar 20 '13 at 20:42