Print

Print


Consider e.g.: hasAnnotation (Note that I have chanced the rdf:type to
owl:ObjectProperty)

  <rdf:Resource rdf:about="http://bibframe.org/vocab/hasAnnotation">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
*    <rdfs:domain rdf:resource="http://bibframe.org/vocab/Work"/>*
*    <rdfs:domain rdf:resource="http://bibframe.org/vocab/Instance"/>*
*    <rdfs:domain rdf:resource="http://bibframe.org/vocab/Authority"/>*
    <rdfs:range rdf:resource="http://bibframe.org/vocab/Annotation"/>
    <rdfs:label>Has Annotation</rdfs:label>
  </rdf:Resource>


If we create two individuals, thingA and thingB

_:thingA rdf:type bf:Work
_:thingB rdf:type bf:Annotation

_:thingA bf:hasAnnotation _:thingB

And run a reasoner, we get the additional inferences:

_:thingA rdf:type bf:Work
_:thingA rdf:type bf:Authority
_:thingA rdf:type bf:Instance

This is because the ontology is asserting that anything that has an
Annotation must be a Work, an Authority, and an Instance.
If we try to assert that thingA is not an Instance, the reasoner will fail
due to inconsistency.

What was  probably intended was that if something has an Annotation, it is
a Work or an Authority or an Instance.

This would be expressed using a unionOf axiom - e.g.:

ObjectPropertyDomain(bf:hasAnnotation
                                         ObjectUnionOf(bf:Authority
bf:Instance bf:Work))

We can now safely assert that thingA is not an Instance, though we could
also assert that it is, since the classes are not disjoint.

We can even assert remove the assertion that thingA is a Work, and instead
assert that it is not an Instance or an Authority, and the  reasoner will
be able to infer that it must be a Work.

Simon