如何在SoLiD中创建一个容器?

时间:2019-05-03 13:46:33

标签: solid

我正在运行一个独立的单用户v5节点Solid Server。以该单一用户身份登录时,我可以在不存在的容器中创建文档,然后服务器为我创建该容器。

例如

POST https://my.server:8443/network/001/call/call-001

@prefix c0: <http://example.org/foo/call#> .
@prefix foo: <http://example.org/foo/> .

<https://my.server:8443/network/001/call/call-0001>
  a foo:call;
  c0:caller "401-555-0001";
  c0:created "2019-05-02T19:54:10.007Z";
  c0:id "call-0001";
  c0:network-id "001";
  c0:receiver "555-555-0002";
  c0:updated "2019-05-02T19:54:10.007Z” .

当我将其发布到我自己的单用户服务器上时,并且容器/network/001/call不存在,它将为我创建它。但是,当我将其发布到Inrupt服务器(我拥有POD,但不拥有该服务器,并且它不在单用户模式下)时,出现错误:

  

500:补丁后无法写入文件:错误:ENOENT:没有此类文件或目录,请打开'/var/solid/user.inrupt.net/network/001/call/call-001'

所以-我很好奇为什么它会在一种情况下创建容器,而不是在另一种情况下创建容器,但是我想从短期来看,答案还是我应该在将容器放入容器之前显式地创建容器。不幸的是,目前面向任务的文档似乎有点不足,因此,这个问题的标题-如何在SoLiD服务器上创建容器(POST ...?)?

2 个答案:

答案 0 :(得分:0)

回到这一点,我现在对Solid有了更多的了解,能够正确回答这个问题。

因此,您should be able to通过向容器URL发送带有空主体的PUT请求来创建一个空容器,并在末尾附加了斜杠以表明它是一个容器:{{1} }。

不幸的是,在撰写本文时,此软件是当前使用最广泛的Solid Server软件(节点Solid Server)does not support,因此,它需要在其中创建文件作为解决方法。之所以可行,是因为Solid规范明确指出还应该创建中间容器。

(当然,您可以使用a library that abstracts over this for you。)

您在最初的问题描述中遇到的错误似乎是NSS v4中的一个错误,目前已修复。

答案 1 :(得分:0)

我需要在 inrupt.net Solid 服务器(当时的版本 Solid 5.6.3)上的个人资料中创建另一个收件箱。我试过这样的 PUT 请求,它奏效了:

PUT /inbox2 HTTP/1.1
Cookie: (cookie from browser where I'm logged in)
Link: <.acl>; rel="acl", <.meta>; rel="describedBy", <http://www.w3.org/ns/ldp#Container>; rel="type", <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"
Content-Type: text/turtle
Host: inbox2.inrupt.net
Content-Length: 274
@prefix : <#>.
@prefix inbox: <>.
@prefix ldp: <http://www.w3.org/ns/ldp#>.
@prefix terms: <http://purl.org/dc/terms/>.
@prefix XML: <http://www.w3.org/2001/XMLSchema#>.
@prefix st: <http://www.w3.org/ns/posix/stat#>.
inbox:
a ldp:BasicContainer, ldp:Container.

我从原始收件箱中取出了正文。