3

我的本地机器上有一个 Sparql Endpoint(openrdf sesame)。我能够在 json 中获得查询(6)的结果(使用 sparql-client 节点模块)。现在,我需要把这个 json 转换成 json-ld,这样我就可以很容易地在玉文件中显示它。如何在我的 node.js 应用程序中不使用 rdfstore-js 来做到这一点?我确实阅读了有关 jsonld 节点模块的信息。json 数据非常庞大,因此我无法为其指定上下文。

rdfstore-js 的问题:由于端点在我的本地机器上,我面临跨域问题。因此,我尝试将数据从远程 sparql 端点加载到存储中,但它不起作用。 https://github.com/antoniogarrote/rdfstore-js/issues/20

或者,我愿意接受可以在没有 json-ld 的情况下显示数据的建议。

编辑:阅读 Gregg 的建议后,我尝试使用 CONSTRUCT 查询。但是,芝麻服务器以文本/纯文本形式返回查询响应。我通过为 json-ld 提供接受标头来尝试内容协商。但它会失败 - 给我“找不到可接受的文件格式”。

谢谢!


我现在正在使用 http nodejs 模块,如下所示。我得到文本/纯文本的响应。有没有办法将纯文本转换为 json-ld ?

var queryString = syllPrefix+" CONSTRUCT { ?uri ?p ?o } where  { ?uri a syll:Person . ?uri ?p ?o}";
var encodedquerystring = encodeURIComponent(queryString);
var options = {
        host: 'localhost',
        port: 8080,
        path: '/openrdf-sesame/repositories/myrepo?query=' +encodedquerystring,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'text/plain',
        },
      };


var req = http.get(options, function(res) {
  //  console.log("Got response: " + res.statusCode);
   // console.log('HEADERS: ' + JSON.stringify(res.headers));
    var data = "";
    res.on('data', function (chunk) {
      data += chunk;
    });
    res.on('end', function () {
      console.log (data);
    });
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
  });
  req.end();
4

2 回答 2

4

Sesame 不支持开箱即用的 JSON-LD 格式。您需要将 Sesame 兼容的 JSON-LD 编写器库(例如jsonld-java)安装到现有的 Sesame 安装中。

为此,获取jsonld-javajsonld-java-sesamejar 文件及其依赖项(不幸的是,这有点麻烦,因为您还需要包括几个第三方依赖项,例如 Apache 库和 Jackson - 但您可以从Maven Central下载所有内容) 并将它们放入 Tomcat 内的 Sesame 部署目录中。通常,此目录应类似于[TOMCAT_DIR]/webapps/openrdf-sesame/WEB-INF/lib. 完成此操作后,您需要重新启动 Tomcat 以让 Sesame 识别新的编写器。

完成此操作后,提供正确的 Accept 标头(媒体类型application/ld+json)应该会在您的图形查询中获得 JSON-LD 结果。

或者,您可以尝试使用RDF 1.1 JSON Alternate Serialization格式,它不是 JSON-LD 那样的真正标准,但Sesame 支持。媒体类型application/rdf+json

于 2014-02-24T11:23:29.663 回答
4

要从 sparql-client(至少是 Ruby 版本)获取 JSON-LD,请使用 CONSTRUCT 或 DESCRIBE 而不是 SELECT 或 ASK。如果您直接使用,则可以将结果图序列化为 JSON-LD(在支持此的平台上,例如 Python、Ruby 或 Java),或者如果它是远程连接,则 HTTP 服务应该允许您进行内容协商对于使用 application/ld+json 的结果。

将 SELECT 或 ASK 转换为 JSON-LD 的问题更大,并且需要一个结果集词汇表。application/sparql+json 不容易直接解释为

于 2014-02-22T21:47:55.230 回答