I built a Java pipeline that creates rdf triples from song lyrics and I would like to use an ontology to classify different types of songs.
I also wanted to count how many times each term occurs in the song (aside from the built-in cardinality which I have used to define the classes of songs). Finally, I wanted to be able to use a visual aid like graphDB or graphViz in Protege to compare what tagged words are more common in songs (this is why i have TaggedWordRelation class, to compare individuals specifically to one another).
I have the following statements in my Protege document that, when reasoned with Fact, Hermit, Pellet etc. locks my computer in an infinite-loop-esque manner. I can not get the reasoner to tell what kind of song it is:
Object Property: hasTaggedWordRelation
-domain:Song
-range:TaggedWord
Object Property: taggedWord
-domain: TaggedWordRelation
-range: Word
Class: Word is defined
Class: TaggedWordRelation is defined
Class: LoveWordRelation is defined
-subclass of TaggedWordRelation
-taggedWord some LoveWord
Class: LoveSong is defined
-subclass of Song
-hasTaggedWordRelation some LoveWordRelation
-hasTaggedWordRelation exactly 0 HateWordRelation
-hasTaggedWordRelation min 0 SexWordRelation
-hasTaggedWordRelation min 0 GodWordRelation
Class: ReligiousSong is defined
-subclass of Song
-hasTaggedWordRelation some LoveWordRelation
-hasTaggedWordRelation exactly 0 HateWordRelation
-hasTaggedWordRelation exactly 0 SexWordRelation
-hasTaggedWordRelation some GodWordRelation
Basically I have about 6 different type of Song, I want to infer (using a reasoner and the constraints), the subclass of a Song instance based on the individual taggedWordRelations it has (via the object property). The pipeline outputs Song instances but I want the reasoner to infer their class based on the cardinality constraints I defined in the subClassOf definitions. Protege's error explanation is saying something about my Object Properties not satisfying cardinality...