JSON-LD + Hydra链接发现

托马斯·普鲁斯基维奇(Tomasz Pluskiewicz)

我一直在考虑如何根据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从JSON-LD文档中发现属性的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输入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章