- From: Henry Story <henry.story@bblfish.net>
- Date: Sun, 20 Jan 2013 10:02:19 +0100
- To: Steve K Speicher <sspeiche@gmail.com>, public-ldp-wg@w3.org
- Message-Id: <FDCFA37F-6A43-475A-99FB-6CA9D2679283@bblfish.net>
On 19 Jan 2013, at 16:50, Henry Story <henry.story@bblfish.net> wrote:
>
> On 19 Jan 2013, at 14:57, Steve Speicher <sspeiche@gmail.com> wrote:
>
>> On Fri, Jan 18, 2013 at 6:11 PM, Henry Story <henry.story@bblfish.net> wrote:
>>>
>>> On 18 Jan 2013, at 22:23, Steve Speicher <sspeiche@gmail.com> wrote:
>>>
>>>> Henry's simple aggregation proposal [1] is close to the model I have
>>>> in mind. I have a few comments:
>>>>
>>>> 1) ldp:Collection - this seems unnecessary in vocabulary. We now need
>>>> to define semantics of it. For talking/terminology it is ok. it
>>>> would be simpler to just have ldp:Container and ldp:Aggregation. I
>>>> don't really see one as a subclass as the other.
>>>>
>>>> 2) Why do we need ldp:member and ldp:contains? What if my model
>>>> already has terms defined like foaf:knows? Do I need to insert
>>>> another triple for each entry of the container vs. just using
>>>> ldp:containerMemberPredicate? If I did have my foaf:knows, would it
>>>> be expected that I would link to ldp:member? If so simply use
>>>> owl:SubPropertyOf ?
>>>
>>> I should perhaps have chosen a different namespace for these, and not
>>> ldp. Perhaps ldpTst or something.
>>>
>>> The point of having these three classes, and these two relations,
>>> is just to help with clarity. These don't have to be adopted
>>> officially. Having a ldp:contains and an ldp:member, and having
>>> these have different rdf:domains, does not mean we cannot then make
>>> them owl:sameAs some well known vocabulary later, or adopt them for
>>> ldp.
>>>
>> One primary difference with the owl:sameAs approach is the global
>> nature of that statement. Perhaps there are cases with my specific
>> application where the predicate is only a 'containment' predicate for
>> the current associated container, not every and all instances. The
>> ldp:memberPredicate minimizes the scope.
>
> Do you accept the following rule?
>
> CONSTRUCT { ?rel rdfs:subPropertyOf rdf:member .}
> WHERE {
> ?collection a ldpx:Collection;
> ldp:membershipPredicate ?rel .
> }
>
> If so then that would seem to be consistent with claim :c1
> of my recent response to Arnaud's mail in this same thread
> http://lists.w3.org/Archives/Public/public-ldp-wg/2013Jan/0125.html
>
>
> {
> ldpx:contains rdfs:subPropertyOf rdfs:member .
> ldpx:member rdfs:subPropertyOf rdfs:member .
> } defendedBy [ = g1; foaf:member Arnaud ];
> owl:sameAs :c1 .
>
>
>>
>>> I just find rdfs:member a bit confusing because it comes with a baggage
>>> of semantics which is probably not what we want here, or if it is
>>> we need to discover that. In any case I did not think it was a good
>>> idea to bring that baggage into the discussion when discussion the
>>> concept of containership, membership, and aggregations.
>>>
>>>
>>>>
>>>> 3) What are the semantics of these collections?
>>>>
>>>> <1> a :Collection;
>>>> :contains <a>;
>>>> :member <b>.
>>>
>>> That was left undecided in what I said. It may be possible for
>>> a collection to exist with both, or not.
>>>
>>>>
>>>> <2> a :Container;
>>>> :member <c>, <d>.
>>>
>>> member had a domain of a ldp:Aggregation. So the definition only
>>> allows that if there is an intersection between ldp:Aggregation
>>> and ldp:Container
>>>
>>
>> Didn't catch the domain restriction.
>>
>>>>
>>>> <3> a :Aggregation;
>>>> :contains <e>, <f>.
>>>
>>> same as above, but check the definition for :contains in
>>> http://www.w3.org/2012/ldp/wiki/Issue-34_-_Aggregation:_simple_proposal
>>>
>>>>
>>>> <4> a :Container, :Aggregation;
>>>> :contains <g>, <h>.
>>>
>>> you can either decide that contains can be a relation on both container and
>>> Aggregation, or find a relation the is a super property of contains to do the
>>> job.
>>>
>>>> I'd recommend that if there is a conflict, then aggregation is the
>>>> default. Though I don't feel strongly about it.
>>>
>>> I had not thought through this. But as you see having the above vocabulary
>>> written out does make it possible to pose those questions clearly.
>>> I think one would have to work from first principles and some intuitions.
>>>
>>> So currently the :contains relation means that if you delete the :Container,
>>> all its contents, that is after binding the ?container variable in the
>>> query below with the name of your container
>>>
>>> SELECT ?c
>>> WHERE { ?container :contains ?c }
>>>
>>>
>>> then all the answers to the above query get deleted too.
>>> This is what you'd expect say if you take a filing cabinet and say
>>> throw it on the fire. The cabinet burns and so does
>>> the content. That is why I think we are using the word "Container"
>>> and "content"
>>>
>>> It is also what you'd expect if you take a file hierarchy view of a url.
>>> so if you delete the "img/" container in
>>>
>>> http://example.co/people/joe/img/2012/22-soldiers.jpg
>>>
>>> then you have made it impossible to write anything after
>>> http://example.co/people/joe/img/.*
>>>
>>> Btw we notice that if you delete a container you delete it's
>>> contents but as a consequence also the members of some aggregations
>>> (they suddenly won't refer to anything anymore) - and it would make
>>> sense for a consistent server to delete the elements of those aggregations.
>>>
>>> Ok, so those are some intuitions one can build on.
>>>
>>>
>>>>
>>>> 4) Can I convert a Container to an Aggregation (or vice versa)? It
>>>> would seem that it might make sense to go from Container->Aggregation
>>>> but not the other way, otherwise we'd have to define a bunch of rules.
>>>
>>> I am not sure what you mean. Say you have a
>>
>> I'm not sure how to explain it much differently other than, if I have
>> a ldp:Container in hand (as a client) and I want it to have
>> ldp:Aggregation semantics, do I need to create a new ldp:Aggregation,
>> add members from Container.
>
> I think I found some very good arguments that ldpx:Container and ldpx:Aggregation
> are disjoint. Again see the claim c3 and its defense here:
>
> http://lists.w3.org/Archives/Public/public-ldp-wg/2013Jan/0125.html
>
> ( Perhaps I should add these to the wiki )
>
> If that argument is right then you need to create a new
> ldp:Aggregation. But perhaps there is no need to pull in one
> by one all the members of the collection into the aggregation.
>
> Perhaps your aggregation could refer to your collection by
> reference. One would like to say something like:
>
> <aggReg> a ldpx:Aggregation;
> owl:superClassOf <.> ;
> ldpx:member <http://some.remote/thing> .
>
> ie: <aggReg> has all the members of <.> + <http://some.remote/thing> .
>
> The difficulty with that is that:
>
> 1) We need to work out if an ldpx:Container can be an rdfs:Class
> What would that entail? ( is that not implied by our using
> rdf:member in the current spec? )
Just looked up the definition, and I discovered that that is not the
case.
[[
The rdfs:domain of rdfs:member is rdfs:Resource. The rdfs:range of rdfs:member is rdfs:Resource.
]]
http://www.w3.org/TR/rdf-schema/#ch_member
> 1.1) If it can be then of course an the above would mean that an
> ldpx:Container cannot be disjoint with an ldpx:Aggregation
I think that even if it were the reasoning would in fact be wrong: I
would be mixing two different classes.
ldpx:Aggregation and ldpx:Container are both rdfs:Classes
containing individuals that are themselves collections.
So there may be no ldpx:Aggregation that is an ldpx:Container,
but that does not mean that individual ldpx aggreations may not
have overlapping or the same members as individual ldpx:Containers.
ldpx:Collections are not Sets, and their identity is not defined
by their membership.
in any case the "<> owl:superClassOf <.>" relation won't work (at present
for the reasons above) One would need to invent a relation to
incorporate the members.
>
> There may be other ways of expressing that all the members of one
> ldpx:Collection are members of the other though. But some such way
> would make it easy to create aggregations that contain all the members
> of a collection plus some links.
>
>
>> Or do I PATCH the ldp:Container with <c>
>> rdf:type ldp:Aggregation?
>
> The possibility of PATCHing an LDPContainer is another
> thing again.
>
>
>>
>>> <http://example.co/people/joe/img/> a Container.
>>>
>>> then you DELETE
>>>
>>> <http://example.co/people/joe/img/>
>>>
>>> and then you could have
>>>
>>> <http://example.co/people/joe/img/> a Aggregation.
>>>
>>> It seems ok. The way I am thinking it at present, as I write my server
>>> is that anything that ends in a / is a Container and everything else
>>> an LDPR of which some can be (or define) an LDPA.
>>>
>>>>
>>>> 5) Interaction model for resource creation: I would assume the way to
>>>> create a resource and add it to a collection would not change for
>>>> Aggregation, POST representation to collection, resource created and
>>>> added to collection. Right?
>>>
>>> Is that not clear in the examples here:
>>> http://www.w3.org/2012/ldp/wiki/Issue-34_-_Aggregation:_simple_proposal
>>>
>>> ?
>>> Are you asking if you can also POST a graph to an Aggregation?
>>>
>>
>> I'm asking if semantics are the same for POSTing to a Container. I
>> would think it would be desirable that they both would have the same
>> semantics. I can see why LDPRs would be different, it would seem odd
>> that POST to Aggregation would be different than POST to Container.
>
> I think POST to an LDPA that is an LDPR and POST to an LDPC clearly have
> different semntics as I argued above and in reply to Arnaud in this thread.
> In one case you create a resource, in the other case you don't ( eg
> you add a link to some remote resource ). There were 3 more reasons I have.
> Those are very different things in terms of protocol logic.
>
> But to tell you the truth I only discovered this whilst arguing it out
> in this thread.
>
>>
>>> If as suggested today in ISSUE-45 you can POST some RDF to a LDPR to
>>> append the triples to that LDPR, then POSTing the triple
>>>
>>> <#ion> :member <http://bblfish.net/>
>>>
>>> to
>>>
>>> <http://localhost:9000/2013/aggReg>
>>>
>>> would add that triple to the <aggReg#ion> aggregation, which
>>> would be a way to add content to the aggregation. Notice that you
>>> don't thereby create a new resource to do a GET on.
>>>
>>>
>>>
>>>>
>>>> [1] - http://www.w3.org/2012/ldp/wiki/Issue-34_-_Aggregation:_simple_proposal
>>>>
>>>> --
>>>> - Steve Speicher
>>>>
>>>
>>> Social Web Architect
>>> http://bblfish.net/
>>>
>>
>> --
>> - Steve Speicher
>
> Social Web Architect
> http://bblfish.net/
>
Social Web Architect
http://bblfish.net/
Attachments
- application/pkcs7-signature attachment: smime.p7s
Received on Sunday, 20 January 2013 09:02:51 UTC