Solid:存储 JSON 对象的正确方法

Solid: correct way to store a JSON object

我想在用户的 Solid pod 中存储一个标准的 JSON 对象。在完成 Solid 入门教程后,我发现我可以 get/set VCARD.note 参数中的对象,但我怀疑这不是正确的方法。

关于如何正确执行此操作的任何建议? JSON 对象会定期更新,通常会有 ~10-100 个密钥对。

这里有两个选项。

选项 1 - 存储为 RDF(推荐)

一般来说,建议不要将数据存储为标准 JSON 对象,而是将数据保存为 RDF。例如,如果您有一个 JSON 对象,例如

const user = {
  name: "Vincent",
};

假设您正在使用 JavaScript 库 @inrupt/solid-client,您将创建它所谓的“事物”,如下所示:

import { createThing, addStringNoLocale } from "@inrupt/solid-client";
import { foaf } from "rdf-namespaces";

let userThing = createThing();
userThing = addStringNoLocale(userThing, foaf.fn, "Vincent");

您可以在 https://docs.inrupt.com/developer-tools/javascript/client-libraries/tutorial/read-write-data/

阅读有关此方法的更多信息

选项 2 - 直接存储 JSON blob

另一种选择确实是直接在 Pod 中存储一个 JSON 文件。这是有效的,尽管它有点违背 Solid 的精神,并且要求您每次都覆盖整个文件,而不是允许您在更新数据时只更新单个属性。你可以这样做:

import { overwriteFile } from "@inrupt/solid-client";

const user = {
  name: "Vincent",
};

// This is assuming you're working in the browser;
// in Node, you'll have to create a Buffer instead of a Blob.
overwriteFile(
  "https://my.pod/location-of-the-file.json",
  new Blob([
    JSON.stringify(user),
  ]),
  { type: "application/json" },
).then(() => console.log("Saved the JSON file.}));

您可以在此处阅读有关此方法的更多信息:https://docs.inrupt.com/developer-tools/javascript/client-libraries/tutorial/read-write-files/