【问题标题】:How to create a container in SoLiD?如何在 SoLiD 中创建容器?
【发布时间】:2019-09-22 01:53:16
【问题描述】:

我正在运行一个独立的单用户 v5 Node 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 ...?)?

【问题讨论】:

  • 我认为 Inrupt 服务器仍在运行 solid-server 的 v4,而不是 v5,所以也许这就是问题所在?当然,您也可以使用 v4 在本地尝试。
  • 这显然是行为上的差异。但看起来我仍然应该能够显式地创建一个没有任何内容的新容器,这将使两者等效。只是没有很多容易找到的例子。

标签: solid


【解决方案1】:

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

因此,您 should be able to 通过向容器 URL 发送带有空正文的 PUT 请求来创建一个空容器,并在尾部附加一个斜杠以表明它是一个容器:PUT https://my.server:8443/network/001/call/

不幸的是,在撰写本文时,目前使用最广泛的 Solid 服务器软件(Node Solid Server)does not support this,因此需要在其中创建一个文件作为解决方法。这是可行的,因为 Solid 规范明确规定也应该创建中间容器。

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

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

【讨论】:

    【解决方案2】:

    我需要在我的 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.
    

    我从原始收件箱中取出了尸体。

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 1970-01-01
      • 2020-08-06
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多