Description
Definitions
The following definitions are used in the message below.
-
RDF named graph: a RDF graph that is assigned to a URL in a Solid POD. Example: the file "example.ttl" containing a RDF graph in the LDP container "/example" is a RDF named graph.
-
RDF resource: Interchangeable with "RDF named graph".
-
RDF document: A RDF resource which can contain triples made of different subjects like:
<ex:subject1> <ex:p> <ex:o>.
<ex:subject2> <ex:p> <ex:o>.
<ex:subject3> <ex:p> <ex:o>.
Problem
I'm asking the question of the title because some current storage server implementations (1) can't manage RDF graphs containing more than one RDF subject! This could be an issue as people won't be able to express different perspectives in their POD (see this message from H. Story).
For instance, some servers like the previously mentioned ones are not able to treat the following example requests (I've only tried with SemApps so far and I'm pretty sure it's the same for DjangoLDP):
POST
:
curl -X POST -H "Content-Type: text/turtle" \
-d "<ex:subject1> <ex:p> <ex:o>. <ex:subject2> <ex:p> <ex:o>." \
http://localhost:3000/
Response: ERROR
- or
PUT
:
curl -X PUT -H "Content-Type: text/turtle" \
-d "<ex:subject1> <ex:p> <ex:o>. <ex:subject2> <ex:p> <ex:o>." \
http://localhost:3000/myfile.ttl
Response: ERROR
But they are able to treat the previous requests when only one RDF subject is passed like:
POST
:
curl -X POST -H "Content-Type: text/turtle" \
-d "<ex:subject1> <ex:p> <ex:o>. <ex:subject1> <ex:p2> <ex:o>." \
http://localhost:3000/
Response: OK
- or
PUT
:
curl -X PUT -H "Content-Type: text/turtle" \
-d "<ex:subject1> <ex:p> <ex:o>. <ex:subject1> <ex:p2> <ex:o>." \
http://localhost:3000/myfile.ttl
Response: OK
It is like these servers are designed with a 1-1 relationship between the URL of the RDF resource and the (only one) subject contained in the graph of the same resource.
Using the previous definitions we can say that these servers are supporting RDF named graphs but not RDF documents.
Questions
- So I'm wondering if these servers are correctly implementing the Solid specifications? Is this requirement, of supporting multiple subjects when passing RDF graphs, clearly expressed somewhere in the specs?
Because this is breaking interoperability, I think. Indeed, some apps could want to write RDF graphs talking about different subjects, right?
- Moreover, is supporting "RDF documents" is a clear requirement of Solid?
Because even if these servers would accept RDF graphs with multiple subjects they could just decide to create one RDF resource per subject. Doing so will also be a problem because the different RDF resources won't be linked to each other (it still miss the notion of "document"). While it is hard to conceive (what location header to return when POSTing, the unecessary resource URL when PUTing - which is btw already unnecessary in their case), I guess it could happen if this is not cleary specified.