Equivalent, The Same, Equal

This is a summary of the different flavours of equivalence in RDF
Schema and DAML.

daml:equivalentTo
   The same in every way. If a symbol denoting a resource is
substituted for a symbol denoting an equivalent resource in this
sense, then the statement maintains it's semantics.

daml:sameClassAs
   As daml:equivalentTo, only this time, the range and domain is
rdfs:Class.

daml:samePropertyAs
   As daml:equivalentTo, only this time, the range and domain is
rdf:Property.

daml:sameIndividualAs
   As daml:equivalentTo, only this time, the range and domain is
daml:Thing.

rdfs:subClassOf
   Contains the same or less members as. Cyclic classes are not
necessarily equivalent to each other, but must contain the same
members. This leads to another, weaker, form of equivalence:-

:equivInSetMembershipTo
   Contains the same members as. This is a super property of
sameClassAs, but not equivalentTo, because the domain and range of
this property is rdfs:Class. This is also a sub property of
rdfs:subClassOf.

log:equalTo
  Used in CWM. Apparently means "has the same URI as", but perhaps
includes literals.

List of stuff which we hold to be true:-

daml:equivalentTo
   rdfs:domain rdfs:Resource; rdfs:range rdfs:Resource .
daml:sameClassAs rdfs:subPropertyOf
   daml:equivalentTo, :equivInSetMembershipTo, rdfs:subClassOf;
   rdfs:domain rdfs:Class; rdfs:range rdfs:Class .
daml:samePropertyAs rdfs:subPropertyOf
   daml:equivalentTo, rdfs:subPropertyOf;
   rdfs:domain rdf:Property; rdfs:range rdf:Property .
daml:sameIndividualAs rdfs:subPropertyOf daml:equivalentTo;
   rdfs:domain daml:Thing; rdfs:range daml:Thing .
:equivInSetMembershipTo rdfs:subPropertyOf rdfs:subClassOf .
rdfs:subClassOf a daml:TransitiveProperty;
   rdfs:domain rdfs:Class; rdfs:range rdfs:Class .

# "equivalentTo" stuff

{ ?a daml:equivalentTo ?b . ?a ?p ?q } log:implies { ?b ?p ?q } .
{ ?a daml:equivalentTo ?b . ?p ?a ?q } log:implies { ?p ?b ?q } .
{ ?a daml:equivalentTo ?b . ?p ?q ?a } log:implies { ?p ?q ?b } .

# "equivalentTo" is the inverse of itself

daml:equivalentTo a :ReversibleProperty .
:ReversibleProperty rdfs:subClassOf rdf:Property .
{ ?y a :ReversibleProperty } log:implies { ?y daml:inverseOf ?y } .
{ ?y daml:inverseOf ?y . ?x ?y ?z } log:implies { ?z ?y ?x } .

# Set Membership Equivalence

{ ?x a ?y . ?y :equivInSetMembershipTo ?z } log:implies { ?x a ?z } .

# that basically follows from:-

{ ?x a ?y . ?y rdfs:subClassOf ?z } log:implies { ?x a ?z } .

# but *not*:-

{ ?x a ?y . ?y daml:equivalentTo ?z } log:implies { ?x a ?z } .

# although that *is* true.

# The usual implications of transitivity, and domain/ranges

daml:TransitiveProperty rdfs:subClassOf rdf:Property .
{ ?x ?y :z . ?z ?y ?p . ?y a daml:TransitiveProperty }
   log:implies { ?x ?y ?p } .

rdfs:range a rdf:Property;
   rdfs:domain rdf:Property; rdfs:range rdfs:Class .
rdfs:domain a rdf:Property;
   rdfs:domain rdf:Property; rdfs:range rdfs:Class .
rdfs:subPropertyOf rdfs:domain rdf:Property; rdfs:range rdf:Property .
rdfs:subClassOf rdfs:domain rdfs:Class; rdfs:range rdf:Class .
{ ?x ?y ?z . ?y rdfs:range ?p } log:implies { ?z a ?p } .
{ ?x ?y ?z . ?y rdfs:domain ?p } log:implies { ?x a ?p } .

After getting CWM to -think about it, we end up with:-

    :equivInSetMembershipTo     a rdf:Property;
         rdfs:subPropertyOf rdfs:subClassOf .

    daml:Thing     a rdfs:Class .

    daml:TransitiveProperty     a rdfs:Class;
         rdfs:subClassOf rdf:Property .

    daml:equivalentTo     a :ReversibleProperty,
                rdf:Property;
         daml:inverseOf daml:equivalentTo;
         rdfs:domain rdfs:Resource;
         rdfs:range rdfs:Resource .

    daml:sameClassAs     a rdf:Property;
         rdfs:domain rdfs:Class;
         rdfs:range rdfs:Class;
         rdfs:subPropertyOf :equivInSetMembershipTo,
                daml:equivalentTo,
                rdfs:subClassOf .

    daml:sameIndividualAs     a rdf:Property;
         rdfs:domain daml:Thing;
         rdfs:range daml:Thing;
         rdfs:subPropertyOf daml:equivalentTo .

    daml:samePropertyAs     a rdf:Property;
         rdfs:domain rdf:Property;
         rdfs:range rdf:Property;
         rdfs:subPropertyOf daml:equivalentTo,
                rdfs:subPropertyOf .

    rdf:Class     a rdfs:Class .

    rdf:Property     a rdf:Class,
                rdfs:Class .

    rdfs:Class     a rdfs:Class .

    rdfs:Resource     a rdfs:Class .

    rdfs:domain     a rdf:Property;
         rdfs:domain rdf:Property;
         rdfs:range rdfs:Class .

    rdfs:range     a rdf:Property;
         rdfs:domain rdf:Property;
         rdfs:range rdfs:Class .

    rdfs:subClassOf     a daml:TransitiveProperty,
                rdf:Property;
         rdfs:domain rdfs:Class;
         rdfs:range rdf:Class,
                rdfs:Class .

    rdfs:subPropertyOf     a rdf:Property;
         rdfs:domain rdf:Property;
         rdfs:range rdf:Property .

N.B. Some of this stuff was lifted from RDF Lint [1], which really
needs updating.

Cheers,

[1] http://infomesh.net/2001/05/rdflint/

--
Kindest Regards,
Sean B. Palmer
@prefix : <http://webns.net/roughterms/> .
:Sean :hasHomepage <http://purl.org/net/sbp/> .

Received on Friday, 16 November 2001 20:06:32 UTC