gpt4 book ai didi

angularjs - JSON-LD+Hydra 链接发现

转载 作者:行者123 更新时间:2023-12-04 12:31:47 25 4
gpt4 key购买 nike

我一直在思考如何根据 HATEOAS 原则使用 JSON-LD 来驱动应用程序。

例如,我可以有一个简单的入口点对象,它定义了一个链接:

{
"@context": {
"users": { "@id": "http://example.com/onto#users", "@type": "@id" }
},
"@id": "http://example.com/api",
"users": "http://example.com/users"
}

#users谓词将被定义为 Link使用九头蛇:
{
"@context": "http://www.w3.org/ns/hydra/context.jsonld",
"@id": "http://example.com/onto#users",
"@type": "Link"
}

到目前为止一切顺利:应用程序获取资源,然后是 onto#users资源将被取消引用以发现语义。

问题是实现者应该如何发现 users 的 URI来自 JSON-LD 文档的属性。当然在 @context中有明确的定义。在我的示例中,但该 URI 可以声明为 QName:
"@context": {
"onto": "http://example.com/onto#",
"users": { "@id": "onto:users", "@type": "@id" }
}

或者可以使用外部上下文或多个/嵌套上下文。

Javacript JSON-LD 库中是否有返回任何给定属性的绝对 URI 的功能?或者有什么简单的方法可以找到它?无论 @context 如何,都可以使用的方式是结构化的?就像是
var jsonLd = /* some odc */
var usersUri = jsonLd.uriOf('users');
expect(usersUri).toBe('http://example.com/onto#users');

换句话说,我想我正在寻找一个统一的 API 来阅读 @context .

最佳答案

以下是如何使用 JavaScript JSON-LD (jsonld.js) 库执行您的要求:

var jsonld = require('jsonld');

var data = {
"@context": {
"onto": "http://example.com/onto#",
"users": {"@id": "onto:users", "@type": "@id"}
},
"users": "http://example.com/users"
};

jsonld.processContext(null, [null, data['@context']], function(err, ctx) {
if(err) {
console.log('error', err);
return;
}
var value = jsonld.getContextValue(ctx, 'users', '@id');
console.log('users', value);
});

然而,这是否是一个好主意值得怀疑。听起来您可能只想使用 jsonld.expand(),它将所有属性转换为完整的 URL。或者,您可以使用 jsonld.compact() 使用您的应用程序众所周知的上下文来转换任何 JSON-LD 输入。

关于angularjs - JSON-LD+Hydra 链接发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23996953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com