- From: Alexandre Bertails <alexandre@bertails.org>
- Date: Thu, 9 Oct 2014 16:39:33 -0400
- To: Miguel Aragón <miguel.aragon@base22.com>
- Cc: David Wood <david@3roundstones.com>, Andrei Sambra <andrei@w3.org>, public-ldp-comments@w3.org
On Thu, Oct 9, 2014 at 4:34 PM, Miguel Aragón <miguel.aragon@base22.com> wrote: > Oh, please tell me why :) Because that is not how the group decided how to do things? Pardon me if I sound condescendant, really, but what you are doing with your platform (driving the interaction with RDF) was discussed *many* times in this working group and what came out of this is fundamentally not what you are describing. The specification is very clear on that. See the pointer I gave earlier. What you are asking is something very different than what is achieved in LDP. Alexandre > > On Oct 9, 2014, at 3:33 PM, Alexandre Bertails <alexandre@bertails.org> wrote: > >> On Thu, Oct 9, 2014 at 4:32 PM, Miguel Aragón <miguel.aragon@base22.com> wrote: >>> In our server resources are basically named graphs that contain a resource that shares the same name as the graph and additional resources that extend that resource (think, # resources). So for us, if you send a document like: [[ <somethingElse> a ldp:RDFSource. ]] to the URI: http://example.org/container/ we take that as if you are trying to create: >>> >>> graph <http://example.org/container/somethingElse> { >>> <http://example.org/container/somethingElse> a ldp:RDFSource. >>> } >>> >>> That’s the way our platform works (not the way I think). >> >> Ah, then I am afraid that this is just not LDP... >> >> Alexandre >> >>> >>> On Oct 9, 2014, at 3:27 PM, Alexandre Bertails <alexandre@bertails.org> wrote: >>> >>>> On Thu, Oct 9, 2014 at 4:24 PM, Miguel Aragón <miguel.aragon@base22.com> wrote: >>>>> I’m sorry Alexandre, could you elaborate? I didn’t understand your response. >>>> >>>> Sure, but let me ask you a question first. You seem to think that the >>>> presence of the triple [[ <somethingElse> a ldp:RDFSource. ]] in what >>>> you post should create the resource <somethingElse>, module relative >>>> URI resolution. >>>> >>>> Is that what you think? >>>> >>>> Alexandre >>>> >>>>> >>>>> On Oct 9, 2014, at 3:21 PM, Alexandre Bertails <alexandre@bertails.org> wrote: >>>>> >>>>>> On Thu, Oct 9, 2014 at 4:18 PM, Miguel Aragón <miguel.aragon@base22.com> wrote: >>>>>>> Hi Dave, >>>>>>> >>>>>>> I’m ok with that, I just don’t want the LDP Spec to force us to support null >>>>>>> URIs and relative URIs without a base. >>>>>>> >>>>>>> If that’s the case then the LDP test suite needs to be modified because it >>>>>>> sends both null URIs and relative URIs without a base (which may not be >>>>>>> allowed by all servers). >>>>>> >>>>>> Miguel, you just do not control what resource get created using RDF, >>>>>> nor you control its interaction model... >>>>>> >>>>>> Alexandre >>>>>> >>>>>>> >>>>>>> On Oct 9, 2014, at 3:14 PM, David Wood <david@3roundstones.com> wrote: >>>>>>> >>>>>>> On Oct 9, 2014, at 16:04, Miguel Aragón <miguel.aragon@base22.com> wrote: >>>>>>> >>>>>>> The approach that I’m offering allows applications to be moved from one >>>>>>> service to another. The problems with relative URIs are these: >>>>>>> >>>>>>> If non empty, relative URIs (ex. <something>) are accepted, it doesn't make >>>>>>> much sense to support the Slug header. What would happen if both of them >>>>>>> were used? >>>>>>> >>>>>>> Example: >>>>>>> Slug: something >>>>>>> <somethingElse> a ldp:RDFSource. >>>>>>> >>>>>>> By allowing the client to send both null URIs and non empty, relative URIs, >>>>>>> a weird behaviour would be expected: >>>>>>> >>>>>>> If a null URI was used. The base of the document needs to be: (parent’s URI) >>>>>>> + (slug created) >>>>>>> If a non empty, relative URI was specified. The base of the document needs >>>>>>> to be: (parent’s URI) <- making sure that it ends in a “/" >>>>>>> >>>>>>> The logic needed for this behaviour will impose an unnecessary overhead for >>>>>>> each request. >>>>>>> As far as we know, specifying relative URIs and not defining a base URI >>>>>>> results in an invalid RDF document. >>>>>>> If the server supported the creation of multiple resources on a single >>>>>>> request, null URIs will overlap with each other. >>>>>>> Common parsers (like Jena) don't treat null URIs and relative URIs >>>>>>> consistently. >>>>>>> >>>>>>> >>>>>>> Hi Miguel, >>>>>>> >>>>>>> Thank you for clarifying your position. >>>>>>> >>>>>>> I think the thing that you are missing here is that the server always has >>>>>>> the final say. It is up to the server to decide what to do with a Slug or >>>>>>> when a base URI is missing. It might reject the request, use what it has or >>>>>>> something else. This is in accordance with Web Architecture. >>>>>>> >>>>>>> For example, this issue report records what we (Callimachus Project) decided >>>>>>> to do: >>>>>>> https://github.com/3-Round-Stones/callimachus/issues/163 >>>>>>> >>>>>>> Still, if LDP wants to specify this more tightly to assist interoperability, >>>>>>> it will need to be careful. Deciding quickly could break a lot of services >>>>>>> that are close to LDP compliance now. >>>>>>> >>>>>>> Regards, >>>>>>> Dave >>>>>>> -- >>>>>>> http://about.me/david_wood >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Oct 9, 2014, at 2:58 PM, David Wood <david@3roundstones.com> wrote: >>>>>>> >>>>>>> On Oct 9, 2014, at 15:51, Miguel Aragón <miguel.aragon@base22.com> wrote: >>>>>>> >>>>>>> You say you like them, but you haven’t addressed the problems that I >>>>>>> described. I’m not saying they should be prohibited, I’m saying it shouldn’t >>>>>>> be mandatory to support them. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Hi Miguel, >>>>>>> >>>>>>> I honestly don’t see the problem you say you outlined and I did in fact give >>>>>>> you a use case since you said you don’t have one. Relative resolution of >>>>>>> URIs to the base allows portability in both data and applications built on >>>>>>> that data. >>>>>>> >>>>>>> Why is it difficult to support the generation of a URI based on the >>>>>>> concatenation of a base URI and a relative URI? I am not trying to be >>>>>>> difficult, I just don’t understand why that is hard. >>>>>>> >>>>>>> Regards, >>>>>>> Dave >>>>>>> -- >>>>>>> http://about.me/david_wood >>>>>>> >>>>>>> >>>>>>> On Oct 9, 2014, at 2:43 PM, Andrei Sambra <andrei@w3.org> wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 10/09/2014 03:42 PM, David Wood wrote: >>>>>>> >>>>>>> On Oct 9, 2014, at 15:11, Steve Speicher <sspeiche@gmail.com> wrote: >>>>>>> >>>>>>> On Thu, Oct 9, 2014 at 3:05 PM, Miguel Aragón <miguel.aragon@base22.com> >>>>>>> wrote: >>>>>>> Hi Nandana, thanks for responding. >>>>>>> >>>>>>> Null URIs are actually very problematic, and (not null) relative URIs just >>>>>>> make the problem worse. With the approach that we have: Generic Request >>>>>>> URIs, hash URIs can be used in the same way: >>>>>>> >>>>>>> Method: POST >>>>>>> URL: http://example.org/container/ >>>>>>> Slug: miguel >>>>>>> Body: >>>>>>> @base <http://example.org/generic-requests/123123123123>. >>>>>>> <> a foaf:PersonalProfileDocument; >>>>>>> foaf:primaryTopic <#me>. >>>>>>> >>>>>>> Is resolved to >>>>>>> >>>>>>> <http://example.org/container/miguel> a foaf:PersonalProfileDocument; >>>>>>> foaf:primaryTopic <http://example.org/container/miguel#me>. >>>>>>> >>>>>>> I honestly don’t see the case for using relative URIs (null or not null) at >>>>>>> all. They bring many problems to the server and make the request document an >>>>>>> invalid RDF document. >>>>>>> >>>>>>> I believe this is a general misconception, the base URI to use for >>>>>>> resolution just instead carried outside the entity body. Many RDF libraries >>>>>>> allow you to supply the absolute base URI to use for resolution when handing >>>>>>> off the model, this topic was discussed on the list some time ago [1]. >>>>>>> >>>>>>> Since it is a common stumbling block and not that clear, I would suggest we >>>>>>> include additional guidance in the best practices and guidance document [2]. >>>>>>> >>>>>>> >>>>>>> >>>>>>> For what it is worth, we just love relative URIs. This is because they allow >>>>>>> us to easy move applications from one service to another. We would be quite >>>>>>> unhappy if we could not both use relative URIs and be LDP compliant. >>>>>>> >>>>>>> >>>>>>> +1 >>>>>>> >>>>>>> Relative URIs are incredibly useful. >>>>>>> >>>>>>> -- Andrei >>>>>>> >>>>>>> >>>>>>> Regards, >>>>>>> Dave >>>>>>> -- >>>>>>> http://about.me/david_wood >>>>>>> >>>>>>> >>>>>>> >>>>>>> - Steve >>>>>>> >>>>>>> [1]: http://lists.w3.org/Archives/Public/public-ldp-wg/2014Apr/0008.html >>>>>>> [2]: >>>>>>> https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp-bp/ldp-bp.html#use-relative-uris >>>>>>> >>>>>>> >>>>>>> On Oct 9, 2014, at 1:55 PM, Nandana Mihindukulasooriya <nmihindu@fi.upm.es> >>>>>>> wrote: >>>>>>> >>>>>>> Hi Miguel, >>>>>>> >>>>>>> I guess the most common use case for the (not null) relative URIs is usage >>>>>>> of hash URIs. For example, something like this. >>>>>>> >>>>>>> <> a foaf:PersonalProfileDocument; >>>>>>> foaf:primaryTopic <#me> . >>>>>>> >>>>>>> I think this case is less problematic because typically the profile document >>>>>>> <> will become something like <http://ex.org/container/miguel> and the >>>>>>> <#me> becomes <http://ex.org/container/miguel#me>. >>>>>>> >>>>>>> But if you have something like >>>>>>> >>>>>>> <> a foaf:PersonalProfileDocument; >>>>>>> ex:property <anotherResource> . >>>>>>> >>>>>>> This is a bit problematic because the resolution of it is a bit dependent of >>>>>>> ending slash. The above snippet resolved against the base >>>>>>> <http://ex.org/container/miguel> will become >>>>>>> >>>>>>> (a) <http://ex.org/container/miguel> a foaf:PersonalProfileDocument; >>>>>>> ex:property <http://ex.org/container/anotherResource> . >>>>>>> >>>>>>> and the same is resolved against the base <http://ex.org/container/miguel/> >>>>>>> will become >>>>>>> >>>>>>> (b) <http://ex.org/container/miguel/> a foaf:PersonalProfileDocument; >>>>>>> ex:property <http://ex.org/container/miguel/anotherResource> . >>>>>>> >>>>>>> However, I think LDP clients should never use the (a) with the slug to refer >>>>>>> to itself because it can always use the null URI to refer to itself. We also >>>>>>> discourage the use of dot segment relative URIs in the LDP BP. I wonder what >>>>>>> are practical usages of non-hash relative URIs in POSTed content (before >>>>>>> creation when the base of the document is unknown still). >>>>>>> >>>>>>> Best Regards, >>>>>>> Nandana >>>>>>> >>>>>>> On Thu, Oct 9, 2014 at 6:25 PM, Miguel Aragon <miguel.aragon@base22.com> >>>>>>> wrote: >>>>>>> Hello to everyone >>>>>>> Based on the design and implementation process that my team and I have >>>>>>> experience, I've several comments about the LDP Spec that I'd like to share >>>>>>> with you. But first lets make sure that we talk in the same language: >>>>>>> >>>>>>> Concepts >>>>>>> Note: Keep in mind that these are the concepts that are working for us. By >>>>>>> no means I'm criticising the "Academic point of view" >>>>>>> Relative URI: A relative URI that was not resolved to an absolute URI >>>>>>> because the document didn't specified a base URI (@base). >>>>>>> Null URI: an empty, relative URI. >>>>>>> >>>>>>> Creation of LDP RDF Sources (LDPRS) >>>>>>> There are several key points in section 5.1 Introduction that need to be >>>>>>> considered: >>>>>>> An LDPRS can be created by issuing a POST to an LDPC. >>>>>>> The client can specify a Slug header to provide a hint of the URI desired >>>>>>> for the new resource. >>>>>>> The examples show that a null URI can be used for the resource to be >>>>>>> created. The resulting URI will be forged by the server. >>>>>>> The LDP test suite goes beyond this and uses relative URIs in the resources >>>>>>> that are POSTed to the server. (ex. <something> a ldp:RDFSource. ). >>>>>>> At first we followed this approach, but when we started using JSON-LD as our >>>>>>> main RDF format, we started encountering several problems with it: >>>>>>> If non empty, relative URIs (ex. <something>) are accepted, it doesn't make >>>>>>> much sense to support the Slug header. What would happen if both of them >>>>>>> were used? >>>>>>> >>>>>>> Example: >>>>>>> Slug: something >>>>>>> <somethingElse> a ldp:RDFSource. >>>>>>> >>>>>>> By allowing the client to send both null URIs and non empty, relative URIs, >>>>>>> a weird behaviour would be expected: >>>>>>> If a null URI was used, forge a slug for the new resource and take the LDPC >>>>>>> URI as a base for the URI of the resource to be created. >>>>>>> If a non empty, relative URI was specified, treat that as a hint for the >>>>>>> desired slug and use the LDPC URI as a base for the URI of the resource to >>>>>>> be created. >>>>>>> The logic needed for this behaviour will impose an unnecessary overhead for >>>>>>> each request. >>>>>>> As far as we know, specifying relative URIs and not defining a base URI >>>>>>> results in an invalid RDF document. >>>>>>> If the server supported the creation of multiple resources on a single >>>>>>> request, null URIs will overlap with each other. >>>>>>> Common parsers (like Jena) don't treat null URIs and relative URIs >>>>>>> consistently. >>>>>>> Some of the possible approaches for addressing these problems are: >>>>>>> The obvious solution would be to use fully qualified URIs on every request. >>>>>>> But the client doesn't always know what the resulting URI will be. >>>>>>> Another approach would be to use a placeholder, a fully qualified URI that >>>>>>> the server knows it's acting just as a placeholder (Ex. >>>>>>> <http://example.org/placeholder>). But that would mean the client is >>>>>>> constantly specifying new triples for the same resource (in an academic >>>>>>> point of view). And the problem of multiple resources on a single request >>>>>>> wouldn't be solved by this approach. >>>>>>> After some thought, we came with the concept of "Generic Request URI". >>>>>>> >>>>>>> Generic Request URI >>>>>>> A URI that has as a base, a known and never changing URI, and that ends with >>>>>>> a slug that is different for every Generic Request URI created (in our case >>>>>>> a timestamp). >>>>>>> Example >>>>>>> A template of the form: http://example.org/generic-requests/<timestamp> >>>>>>> would create URIs like: >>>>>>> <http://example.org/generic-requests/1412868212000> >>>>>>> <http://example.org/generic-requests/1412868258000> >>>>>>> <http://example.org/generic-requests/1412868262000> >>>>>>> Using a Generic Request URI when creating resources covers the following >>>>>>> problems: >>>>>>> It standardises the URIs the server will receive. >>>>>>> If the client wants to specify a hint, it would do so by passing a Slug >>>>>>> header. >>>>>>> Each request describes a unique resource and thus it is academically >>>>>>> correct. >>>>>>> Multiple resources can be created by declaring each one with a different >>>>>>> Generic Request URI. >>>>>>> >>>>>>> >>>>>>> So an LDP server would accept requests with the following forms: >>>>>>> A resource with a fully qualified URI. In this case the client attempts to >>>>>>> create a resource with a known URI so a Slug header isn't allowed and if the >>>>>>> URI is already in use the server would respond with 409 Conflict. >>>>>>> A resource with a Generic Request URI and no slug specified. The server >>>>>>> would use the URI of the parent resource as a base and forge a slug for the >>>>>>> new resource however the server is configured to do so. >>>>>>> A resource with a Generic Request URI and a Slug header. The server would >>>>>>> use the Slug header as a hint for the URI of the new resource to be created. >>>>>>> I've more comments and concepts to share, but I will write another email for >>>>>>> them. >>>>>>> >>>>>>> -- >>>>>>> Miguel Aragón >>>>>>> Mobile: +52 (811) 798 9357 >>>>>>> Skype: miguel.araco >>>>>>> Email: miguel.aragon@base22.com >>>>>>> CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, is >>>>>>> for the sole use of the intended recipient(s) and may contain confidential >>>>>>> and privileged information. Any unauthorized review, use, disclosure or >>>>>>> distribution is prohibited. If you are not the intended recipient, please >>>>>>> contact the sender by reply e-mail and destroy all copies of the original >>>>>>> message. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> >>> >
Received on Thursday, 9 October 2014 20:40:01 UTC