- From: <henry.story@bblfish.net>
- Date: Wed, 5 Mar 2014 21:45:49 +0100
- To: ashok.malhotra@oracle.com
- Cc: public-ldp-wg@w3.org
- Message-Id: <06263DD7-2882-4679-A811-7A3B15701AD4@bblfish.net>
On 5 Mar 2014, at 11:25, henry.story@bblfish.net wrote:
>
> On 5 Mar 2014, at 01:35, ashok malhotra <ashok.malhotra@oracle.com> wrote:
>
>> In programming languages, subclass relationships come with certain guarantees
>> such as : a method that runs on an instance of the parent class will also run on
>> an instance of the subclass.
>>
>> What are the equivalent guarantees on RDF subclasses?
>> In other words, what are the rules on behavior between a parent class and a subclass?
>
> classes in RDF are (very close to ) mathematical Sets. They don't change, they don't have
> behavior. All members of a subclass are members of a subclass.
>
> So if something is true of all members of a superclass then it is true of all members
> of a subclass for example. RDFS and owl map out a lot of these rules.
>
> For example in the ontology I wrote up we had
>
> ldp:membershipResource a rdf:Property,
> rdfs:domain ldp:IndirectContainer .
>
> ldp:hasMemberRelation a rdf:Property;
> rdfs:domain ldp:IndirectContainer .
>
> ldp:insertedContentRelation a rdf:Property, owl:FunctionalProperty;
> rdfs:domain ldp:IndirectContainer .
>
> This allows us do conclude from { ?c ldp:membershipResource ?r } that { ?c a ldp:IndirectContainer }.
>
> What we want to say is something stronger though, namely that every ldp:IndirectContainer has these
> three relations. We could say:
>
> ldp:IndirectContainer a rdfs:Class, owl:Class;
> rdfs:subClassOf ldp:Container,
> [ a rdf:Restriction;
> owl:onProperty ldp:hasMemberRelation;
> owl:cardinality 1;
> ],
> [ a rdf:Restriction;
> owl:onProperty ldp:insertedContentRelation;
> owl:cardinality 1;
> ],
> [ a rdf:Restriction;
> owl:onProperty ldp:membershipResource;
> owl:cardinality 1;
> ].
>
> This would tell us that every IndirectContainer has only 1 of these three relations.
> But then we can no longer say that the ldp:contains relations is a restriction on
> the ldp:hasMemberRelation, since then we'd have two of each relation, which by the
> above restriction would be owl:sameAs each other.
>
> To take out example
>
> <http://example.org/netWorth/> a ldp:DirectContainer;
> dcterms:title "The assets of JohnZSmith";
> ldp:membershipResource <http://example.org/netWorth/nw1/>;
> ldp:hasMemberRelation o:asset;
> ldp:contains <a1>, <a2>.
>
> It would then follow that
>
> o:asset owl:sameAs ldp:contains .
>
> which is not what we want.
>
Ok I tried this out, and it does not seem to be the problem I thought. I wrote out the
ontology with the cardinality restrictions in the following file
https://github.com/bblfish/ldp/blob/master/ldp.ttl
and then tested it with pellet. First I get the correct hierarchy
$ sh pellet.sh classify --input-format Turtle ../LDP/ldp.ttl
Classifying 10 elements
Classifying: 100% complete in 00:00
Classifying finished in 00:00
owl:Thing
rdf:Property
rdfs:Resource
ldp:BasicContainer
ldp:Resource
ldp:Source
ldp:Container
ldp:IndirectContainer
ldp:DirectContainer
ldp:BasicContainer
And then I don't get the feared ldp:contains owl:sameAs o:asset entailment
$ cat ldp.entail.ttl
@prefix o: <http://example.org/ontology/>.
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
ldp:contains owl:sameAs o:asset .
owl:sameAs owl:sameAs owl:sameAs .
21:32:57 - ~/Programming/OWL/pellet-2.3.1
hjs@bblfish[0]$ sh pellet.sh entail --verbose --entailment-file ldp.entail.ttl ../LDP/ldp.ttl
There are 1 input files:
../LDP/ldp.ttl
Start loading
Finished loading in 00:00:00.560
Input size: Classes = 10, Properties = 15, Individuals = 7
Expressivity: SRON
Loading entailment file:
ldp.entail.ttl
Check entailments for (2) axioms
Start Checking
Finished Checking in 00:00:00.046
Non-entailments (1):
1) asset sameAs contains
Timer summary:
Name | Total (ms)
=====================
main | 845
loading | 560
Checking | 46
that is I think because the ldp:IndirectContainer is really just responsible for the membership triples and not the
containment triples. Even though both are similar in that they are consequences bound to happen on a successful
POST, the IndirectContainer "membership predicates" (rules) only deal with one set of relations... It is only in the
BasicContainer that they happen to be the same.
The bindingRules makes this easier to understand in my view, but this still seems to work. With the binding
rules version I was working on, it should be easy to show that a BasicContainer is also following the same
principle as the other containers.
Sorry for setting off the alarm...
Henry
Received on Wednesday, 5 March 2014 20:46:57 UTC