Question

I am building an ontology in TopBraidComposer which has a class hierarchy and a couple of rules that work great on their own. In my ontology, I'm working on a class level, so all the definitions I create only relate to classes, not individuals. Now I want to infer subclass definitions like this one:

anonymous subclass

I tried the following SPARQL query which seemed to do the job:

SPARQL test

Then I added said query as a SPIN rule to the owl:Thing class like this:

SPIN rule 1

After pressing enter, it is automatically converted to the following form:

SPIN rule 2

It looks reasonable but when I now start the inferencing process, it doesn't terminate anymore when it did before I added the test rule. When I force stop the reasoning, I can see that the desired triple has been added to the Test class numerous times.

How can I infer an anonymous superclass in SPIN?

Edit:

A workaround is to bind the restrictions to classes. The logic then seems to work but it doesn't show up like the anonymous superclasses do; neither in TBC nor in Protege.

Was it helpful?

Solution

After a long search, I found out the solution is really simple:

a simple check for an existing relationship will prevent an infinite loop:

FILTER NOT EXISTS {
  ?test rdfs:subClassOf _:b0 .
} .

which will be auto corrected by TBC to

FILTER NOT EXISTS {
  ?test rdfs:subClassOf _:0 .
} .

That's it, the rule will work.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top