Hi Reto, Few things apart from the Marmotta behavior. If you want to create a Container, you should specify the interaction model you want using a Link header. That is what the server has to honour not the type mentioned in the POSTed content [1].
So the request should be curl -D -X POST -H "Link: <http://www.w3.org/ns/ldp/BasicContainer>; rel='type'" --data @simpleldpc.ttlhttp://localhost:8080/ldp In addition, the DirectContainer that you post is invalid. According to 5.4.1.3 ~ 5.4.1.5 [2] , a Direct Container MUST define ldp:membershipResource and (ldp:hasMemberRelation/ldp:isMemberOfRelation). However, IMO the implementations have the freedom to add those triples on creation time of the container, so it might be valid to POST a partial representation of a container if the servers adds the necessary triples on creation. Best Regards, Nandana [1] http://www.w3.org/TR/ldp/#ldpc-post-createrdf [2] http://www.w3.org/TR/ldp/#ldpdc-containres On Fri, Jul 4, 2014 at 10:37 PM, Reto Gmür <[email protected]> wrote: > Hi, > > Playing around with marmotta I tried to create a new LDPC. > > I describe my container in a file > > $ cat simpleldpc.ttl > @prefix dct: <http://purl.org/dc/terms/> . > @prefix ldp: <http://www.w3.org/ns/ldp#>. > > <.> a ldp:DirectContainer ; > sct:title "My first LDPC" . > > > Post this to the container which is there by default at > http://localhost:8080/ldp > > $ curl -D - -X POST --data @simpleldpc.ttl http://localhost:8080/ldp > HTTP/1.1 201 Created > Server: Apache Marmotta/3.3.0-SNAPSHOT (build 2+) > Last-Modified: Fri, 04 Jul 2014 20:25:07 GMT > ETag: W/"1404505507000" > Location: http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3 > Link: <https://wiki.apache.org/marmotta/LDPImplementationReport/2014-03-11 > >; > rel="describedby" > Link: <http://www.w3.org/ns/ldp#Container>; rel="type" > Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" > Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" > Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" > Content-Length: 0 > Date: Fri, 04 Jul 2014 20:25:07 GMT > > > looks good to me, let's access the newly created resource: > > $ curl -D - http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3 > HTTP/1.1 200 OK > Server: Apache Marmotta/3.3.0-SNAPSHOT (build 2+) > Last-Modified: Fri, 04 Jul 2014 20:25:07 GMT > ETag: "e7fbd1bca63f04ca23b8f0092b5c2f3" > Link: <https://wiki.apache.org/marmotta/LDPImplementationReport/2014-03-11 > >; > rel="describedby" > Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" > Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" > Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" > Link: <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3>; > rel="meta" > Link: <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3>; > rel="describedby" > Link: <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3>; > rel="content" > Content-Type: text/turtle > Transfer-Encoding: chunked > Date: Fri, 04 Jul 2014 20:26:19 GMT > > @prefix ldp: <http://www.w3.org/ns/ldp#> . > @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . > @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . > @prefix dcterms: <http://purl.org/dc/terms/> . > @prefix : <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3> > . > > <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3> > ldp:interactionModel ldp:Container ; > a ldp:Resource , ldp:NonRDFSource , ldp:RDFSource ; > dcterms:modified "2014-07-04T20:25:07.000Z"^^xsd:dateTime ; > dcterms:created "2014-07-04T20:25:07.000Z"^^xsd:dateTime ; > dcterms:isFormatOf < > http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3> ; > dcterms:hasFormat < > http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3> ; > dcterms:format "application/x-www-form-urlencoded" . > > > The new resource has none of the two properties in the posted file. But it > is both an ldp:RDFSource and an ldp:NonRDFSource! > > Let's see if it can nonetheless be used as a container, posting something > against it: > > $ curl -D - -X POST --data @simplecontainer.ttl > http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3 > HTTP/1.1 405 Method Not Allowed > Server: Apache Marmotta/3.3.0-SNAPSHOT (build 2+) > Last-Modified: Fri, 04 Jul 2014 20:25:07 GMT > ETag: "e7fbd1bca63f04ca23b8f0092b5c2f3" > Link: <https://wiki.apache.org/marmotta/LDPImplementationReport/2014-03-11 > >; > rel="describedby" > Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" > Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" > Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" > Link: <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3>; > rel="meta" > Link: <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3>; > rel="describedby" > Link: <http://localhost:8080/ldp/f1f7816b-c90f-4b6e-aa76-48ad445d86d3>; > rel="content" > Content-Type: application/octet-stream > Content-Length: 36 > Date: Fri, 04 Jul 2014 20:31:39 GMT > > POST to NonRdfSource is not allowed > > > So creating an LDPC this way doesn't seem to work, instead I'm having quite > a weird resource lacking all the originally posted triples. > > Why this behavior? What is the recommended way to create new LDPC in > marmotta? > > Cheers, > Reto >
