opencaesar / owl-adapter

The OML adapter for OWL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] - vocabulary bundle closure is incomplete

jsjuni opened this issue · comments

Description

Under some conditions, the vocabulary bundle closure algorithm fails to assert disjointness among classes that are clearly disjoint under the disjointness policy (i.e., having no common named subclass).

Steps to Reproduce

Consider this example taxonomy extracted from KerML:
original

It is evident on inspection that Performance and Object share no common subclass and should therefore be found disjoint. If we create a vocabulary bundle for this example and create a description bundle with an instance typed by both Performance and Object, the reasoner finds the ontology consistent.

Expected Behavior

The ontology should be found inconsistent.

Analysis

The vocabulary bundle closure algorithm transforms the original taxonomy into this tree:
step-12-final

The disjointness axioms generated by vocabulary bundle closure are as follows:

  • Disjoint Children of Anything:
    • Link ∖ (BinaryLinkObject ∪ LinkObject ∪ (Transfer ∖ (FlowTransferBefore ∪ TransferBefore)))
    • Occurrence ∖ (FlowTransferBefore ∪ TransferBefore ∪ (Transfer ∖ (FlowTransferBefore ∪ TransferBefore)))
    • Transfer ∖ (FlowTransferBefore ∪ TransferBefore)
  • Disjoint Children of Link ∖ (BinaryLinkObject ∪ LinkObject ∪ (Transfer ∖ (FlowTransferBefore ∪ TransferBefore))):
    • BinaryLink ∖ (BinaryLinkObject ∪ FlowTransferBefore ∪ (Transfer ∖ (FlowTransferBefore ∪ TransferBefore)) ∪ (TransferBefore ∖ FlowTransferBefore))
    • FlowTransferBefore
    • TransferBefore ∖ FlowTransferBefore
  • Disjoint Children of Occurrence ∖ (FlowTransferBefore ∪ TransferBefore ∪ (Transfer ∖ (FlowTransferBefore ∪ TransferBefore))):
    • BinaryLinkObject
    • LinkObject ∖ BinaryLinkObject
    • Object ∖ (BinaryLinkObject ∪ LinkObject)
    • Performance ∖ (FlowTransferBefore ∪ (Transfer ∖ (FlowTransferBefore ∪ TransferBefore)) ∪ (TransferBefore ∖ FlowTransferBefore))
  • Disjoint Children of Transfer ∖ (FlowTransferBefore ∪ TransferBefore):
    • FlowTransfer
    • MessageTransfer ∖ FlowTransferBefore

It is not obvious whether these axioms imply disjointness of Performance and Object, but the reasoner result indicates they do not.

The problem is that the current bundle closure algorithm emits only the disjointness axioms. The subclass relations in the transformed tree, however, are not mere rearrangements of the original. Instead they express an alternate representation of the taxonomy resulting from having applied the disjointness policy. The transformed tree conveys important information about disjointness.

The fix is straightforward. The OML-to-OWL converter invokes vocabulary bundle closure and emits the disjointness axioms by traversing the transformed tree. It is a simple matter to also emit subclass axioms at each vertex. With this change in place, the reasoner finds the expected inconsistency.