I'm starting to use OWL 2 punning some.  The OWL 2 New Features standard doesn't say a whole lot.  I would appreciate a recommendation if anyone knows a good tutorial on punning (in either the domain of OWL or humor, bonus points for jokes that meta-pun the two domains).  Here is my initial impression of how this works, with some questions.

My simple mental model is that an IRI can be interpreted differently in different contexts.  Depending on the call made to an OntModel, the same IRI could be returned as a class by one method and as an individual by another.  Here is a simple test case.

    Declaration( Class( :myClass ) )
    Declaration( Class( :mySubclass ) )
    SubClassOf( :mySubclass :myClass )
    ClassAssertion( :myClass :myThing )
    ClassAssertion( :mySubclass :mySubThing )
    ## Here is the pun
    ClassAssertion( :mySubclass :mySubclass )
    ## Presumably OWL2-DL is not powerful enough to define Russell's paradox.

In both Protege and Jena, :mySubclass will appear in a list of classes and also in a list of individuals for class :mySubclass. When I ask an OntModel for a list of classes, it returns :mySubclass as an OntClassImpl.  When I ask for a list of individual members of :mySubClass, it returns :mySubClass as an IndividualImpl.  It depends on what I ask for.  Is that generally correct?

What is necessary and sufficient to cause an IRI to have both an interpretation as a class and as an individual?  Adding the following is sufficient to cause both Protege and Jena to say :myClass is a member of owl:Thing, and a request to Jena to return a list of individual members of owl:Thing returns :myClass as an IndividualImpl.  Does declaring any (OWL) object property triple (other than special OWL meta-properties used by OntModel) cause the declared (Triple/Sentence) object to have an interpretation as an individual?

    Declaration( ObjectProperty( :subToSuper ))
    ObjectPropertyAssertion( :subToSuper :mySubclass :myClass )

What about subjects and objects of triples?  I could find no methods in OntModel or OntClass that would return triples. Methods like Model#listObjectsOfProperty return Nodes.  Is it up to either my code or the user to determine whether a subject or object IRI is to be interpreted as a class or an individual in cases where it would matter?




Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to