我正在运行一个独立的单用户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 ...
?)?
答案 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.
我从原始收件箱中取出了正文。