LD + Hydra链接发现
我一直在想如何使用JSON-LD来根据HATEOAS原理来驱动应用程序。
例如,我可以有一个简单的入口点对象,它定义了一个链接:
{
"@context": {
"users": { "@id": "http://example.com/onto#users", "@type": "@id" }
},
"@id": "http://example.com/api",
"users": "http://example.com/users"
}
#users
谓词将被定义为使用Hydra的Link
:
{
"@context": "http://www.w3.org/ns/hydra/context.jsonld",
"@id": "http://example.com/onto#users",
"@type": "Link"
}
迄今为止所有的好处:应用程序获取资源,然后onto#users
资源将取消引用来发现语义。
问题是实现者应该如何从JSON-LD文档中发现users
属性的URI。 当然,在我的例子中,它明确地定义在@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输入。
链接地址: http://www.djcxy.com/p/79463.html