我正在运行一个独立的单用户v5节点实心服务器。当我以单个用户的身份登录时,我可以在一个不存在的容器中创建一个文档,而服务器则为我创建一个容器。
例如:
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‘
所以-我很好奇为什么它会在一种情况下而不是另一种情况下创建容器,但我想短期内答案也是,我应该在把东西放入容器之前显式地创建容器。不幸的是,目前看来,面向任务的文档似乎有点缺乏,因此这个问题的标题--如何创建容器(POST ...)?在SoLiD服务器上?
发布于 2020-12-16 14:24:50
回到这个问题上,我现在对实心有了更多的了解,才能正确地回答这个问题。
因此,您可以通过向Container发送一个带有空体的应该能够请求来创建一个空容器,并附加一个尾随斜杠以指示它是一个容器:PUT https://my.server:8443/network/001/call/。
不幸的是,在编写本报告时,目前使用最广泛的Solid服务器软件(Node ) 不支持这一点,因此它需要在其中创建一个文件作为解决办法。这是可行的,因为固态规范明确指出,也应该创建中间容器。
(当然,您可以使用一个为你提供摘要的图书馆。)
您在初始问题描述中遇到的错误似乎是NSS的v4中的一个bug,到目前为止已经修复。
发布于 2021-02-07 11:35:06
我需要在inrupt.net Solid服务器上的配置文件中创建另一个收件箱(当时的版本是Solid 5.6.3 )。我试着提出这样的请求,结果成功了:
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.我从原来的收件箱里取下了身体。
https://stackoverflow.com/questions/55971135
复制相似问题