我一直在考虑如何根据HATEOAS原理使用JSON-LD来驱动应用程序。
例如,我可以有一个简单的入口点对象,该对象定义一个链接:
{
"@context": {
"users": { "@id": "http://example.com/onto#users", "@type": "@id" }
},
"@id": "http://example.com/api",
"users": "http://example.com/users"
}
并且使用Hydra将
#users
谓词定义为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输入。
关于angularjs - JSON-LD + Hydra链接发现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23996953/