从 sparql 查询返回面向对象的 json

2024-01-31

如果我想在SPARQL中询问一些不同的属性A和B, 其中有一个唯一的 A,并且每个 A 可能有多个 B。

我得到的查询结果如下:

A1, B1
A1, B2
A1, B3
A1, B4
A2, B5

我希望这个查询结果的外观更多是这样的形式:

A1: B1,B2,B3,B4
A2: B5

在SPARQL中有没有办法做到这一点?这个叫什么?


SPARQL 的 JSON 输出记录在SPARQL 1.1 查询结果 JSON 格式 http://www.w3.org/TR/sparql11-results-json/,特别是部分3.2.2 RDF术语编码 http://www.w3.org/TR/sparql11-results-json/#select-encode-terms描述如何在 JSON 中对 RDF 进行编码。请注意,JSON 输出实际上只是用于对 SPARQL 查询的结果进行编码,而不是用于创建与特定对象模型相对应的 JSON 对象。你最好的选择可能是获取你得到的结果并自己操纵它们。不过,SPARQL 方面仍然有一些事情可能会有所帮助。

group_concat用于组合值

也就是说,也许以下内容可以帮助您获得更适合您的东西。如果你有这样的数据:

@prefix : <http://example.org/> .

:object :hasA1 :b1, :b2, :b3, :b4 ;
        :hasA2 :b5 .

和这样的查询:

prefix : <http://example.org/>

select ?subject ?property ?object
where {
  values ?property { :hasA1 :hasA2 }
  ?subject ?property ?object .
}

你会得到如下结果:

$ arq --data data.n3 --query query.sparql
-------------------------------
| subject | property | object |
===============================
| :object | :hasA1   | :b4    |
| :object | :hasA1   | :b3    |
| :object | :hasA1   | :b2    |
| :object | :hasA1   | :b1    |
| :object | :hasA2   | :b5    |
-------------------------------

您可以使用group_concat合并所有值hasA1使用如下查询将其转换为单个值:

prefix : <http://example.org/>

select ?subject ?property (group_concat(?object;separator=',') as ?cobject)
where {
  values ?property { :hasA1 :hasA2 }
  ?subject ?property ?object .
}
group by ?subject ?property 

并得到如下结果:

$ arq --data data.n3 --query query.sparql
------------------------------------------------------------------------------------------------------------------
| subject | property | cobject                                                                                   |
==================================================================================================================
| :object | :hasA2   | "http://example.org/b5"                                                                   |
| :object | :hasA1   | "http://example.org/b4,http://example.org/b3,http://example.org/b2,http://example.org/b1" |
------------------------------------------------------------------------------------------------------------------

如果您要求 JSON 格式的结果,您将得到以下输出,其中might为您工作,取决于您的实体类型b1b4是。具体来说,如果它们是字符串,并且连接有意义,那么这可能没问题。如果它们是其他东西,可能就没那么有用了。

$ arq -out JSON --data data.n3 --query query.sparql
{
  "head": {
    "vars": [ "subject" , "property" , "cobject" ]
  } ,
  "results": {
    "bindings": [
      {
        "subject": { "type": "uri" , "value": "http://example.org/object" } ,
        "property": { "type": "uri" , "value": "http://example.org/hasA2" } ,
        "cobject": { "type": "literal" , "value": "http://example.org/b5" }
      } ,
      {
        "subject": { "type": "uri" , "value": "http://example.org/object" } ,
        "property": { "type": "uri" , "value": "http://example.org/hasA1" } ,
        "cobject": { "type": "literal" , "value": "http://example.org/b4,http://example.org/b3,http://example.org/b2,http://example.org/b1" }
      }
    ]
  }
}

group_concat with construct

有 RDF 的 JSON 序列化,虽然 SPARQL 引擎可能不支持它们,但您可以使用construct查询生成一些结构更像您所需形式的 RDF,然后使用 RDF 序列化转换器转换为 JSON 格式。例如,耶拿的rdfcat支持RDF/JSON http://jena.apache.org/documentation/io/rdf-json.html输出。用一个construct像这样查询:

prefix : <http://example.org/>

construct { 
 ?subject ?property ?cobject
}
where {
  select ?subject ?property (group_concat(?object;separator=',') as ?cobject)
  where {
    values ?property { :hasA1 :hasA2 }
    ?subject ?property ?object .
  }
  group by ?subject ?property 
}

(See 我们可以将 CONSTRUCT 与 SPARQL 1.1 中的聚合结合起来吗? http://answers.semanticweb.com/questions/11916/can-we-combine-construct-with-aggregates-in-sparql-11在answers.semanticweb.com 上获取有关此查询中为何存在嵌套查询的解释。)这会生成以下形式的 RDF:

$ arq --out RDF/XML --data data.n3 --query query.sparql 
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://example.org/">
  <rdf:Description rdf:about="http://example.org/object">
    <hasA1>http://example.org/b4,http://example.org/b3,http://example.org/b2,http://example.org/b1</hasA1>
    <hasA2>http://example.org/b5</hasA2>
  </rdf:Description>
</rdf:RDF>

我们可以通过管道将其通过rdfcat得到一些 RDF/JSON ,这可能最终更接近您正在寻找的内容:

$ arq --out RDF/XML --data data.n3 --query query.sparql | rdfcat -out RDF/JSON /dev/stdin 
{ 
  "http://example.org/object" : { 
    "http://example.org/hasA2" : [ { 
      "type" : "literal" ,
      "value" : "http://example.org/b5"
    }
     ] ,
    "http://example.org/hasA1" : [ { 
      "type" : "literal" ,
      "value" : "http://example.org/b4,http://example.org/b3,http://example.org/b2,http://example.org/b1"
    }
     ]
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 sparql 查询返回面向对象的 json 的相关文章

  • json_decode 返回 null 并带有不同的引号

    json decode foo bar true 这有效 但是这个返回NULL json decode foo bar true The json last error 输出4 JSON ERROR SYNTAX 我检查了以下问题的一些答案
  • 如何将从 MySQL 获取的数据以 JSON 形式返回到 php 文件中?

    我必须将从 MySQL 表中获取的数据作为 JSON 返回到 php 文件中 这是我连接到 mysql 并从中获取数据的代码 现在我怎么能将它作为 JSON 返回呢
  • 使用XMLHttpRequest自动网页刷新内存泄漏

    问候 我一直在为一些使用 8 位微控制器的硬件开发网络界面 该网页使用 HTML javascript JSON 和 XHR XMLHttpRequest 进行通信 我想做的是创建一个页面 使用 setInterval 使用控制器中的新值每
  • 在 Django 中处理 ajax json 对象 - 'QueryDict' 对象没有属性 'read' 错误

    我正在尝试解析 Django 视图中的 json 对象 该对象已通过 ajax 通过 post 方法从客户端传递过来 JS post update vendor merchandise types JSON stringify json o
  • 如何限制 JSON 访问?

    我有一个 Web 应用程序 可以从新创建的 JSON API 中提取数据 我的静态 HTML 页面通过 JavaScript 从静态 HTML 页面动态调用 JSON API 如何限制对 JSON API 的访问 以便只有我 我的网站 可以
  • 将 JSON 数组转换为 bash 数组并保留空格

    我想将 JSON 文件转换为 bash 字符串数组 稍后我可以对其进行迭代 我的JSON结构如下 USERID TMCCP CREATED DATE 31 01 2020 17 52 USERID TMCCP CREATED DATE 31
  • ImportError:在 Google 应用引擎中找不到 django.utils

    当我在 google app engine 项目中使用 django utils 中的 simplejson 时 出现此错误 Traceback most recent call last File base python27 runtim
  • 如何将序列化的 JSON 视图数据输出为对象数组,而不是包装在外部对象中?

    我正在将 CakePHP 数组的返回值转换为 JSON 目前如下 platformusers id 1 name user1 id 3 name user3 我希望它是这样的 id 1 name user1 id 3 name user3
  • 使用 JQuery getJSON 方法

    我正在尝试使用 JQuery getJSON 函数解析 JSON 数据 REST 查询是 http query yahooapis com v1 public yql q select 20woeid 20from 20geo places
  • 获取列名称以及 JSON 响应

    我有三个实体类 我编写了包含两个表的联接的查询 表 费用类别 Entity Table name ExpensesCategories public class ExpensesCategories Id GeneratedValue st
  • jq - 按值排序

    我有以下结构 ID XX guid 1 ID YY guid 2 我尝试过运行 jq sort by guid conn json 但是我收到一个错误 Cannot index string with string guid 请您告诉我如何
  • Foreach Ajax Json - Jquery

    谁能帮我 我有一个数组 stars Chris Pine Keira Knightley Kevin Costner 我想做的是 foreach star 我想将输入附加到 div 和 foreach star 它们在输入中具有值 这就是我
  • 如何使用重复的键动态生成 JSON 对象?

    我知道这听起来不可能 但我的老板告诉我 我必须使用 jQuery 通过 AJAX 后调用发送 JSON 并且必须具有重复的键 问题是 如果我写这样的东西 post someurl key1 value1 key2 value2 key2 v
  • 使用把手显示来自 parse.com 的 json 响应

    我想将 json 响应传递给车把 我已经查看了解析文档和 stackoverflow 问题 但我似乎无法弄清楚这一点 这是回应 results address 755 W Yale createdAt 2013 02 09T01 12 15
  • PostgreSQL:有效地将 JSON 数组拆分为行

    我有一个表 表 A 其中包含一个包含 JSON 编码数据的文本列 JSON 数据始终是一个包含一到几千个普通对象的数组 我有另一个表 表 B 其中有几列 包括数据类型为 JSON 的列 我想从表 A 中选择所有行 将 json 数组拆分为其
  • 如何将 JSON 数据从 Android 发送到 php url?

    我想将登录信息从我的应用程序发送到 php url 因为这我的应用程序将崩溃 任何人都可以帮助我解决这个问题 这是我的服务器登录方法 我想将数据发送到此登录方法 Method public method login Parameters 3
  • 检查 JSON 模式中不同的嵌套属性

    有没有办法在嵌套 JSON 模式中实现相当于 CHECK 约束的 Postgres 假设我们有具有两个属性的数据 每个属性都有嵌套属性 JSON Schema 如何使第一个对象所需的内容依赖于第二个对象 我的真实案例场景是为 GeoJSON
  • 优化数据可视化 Web 应用程序的性能

    我正在重写 3 年前编写的数据可视化网络工具 从那时起 浏览器的 JavaScript 引擎变得更快 所以我正在考虑将部分工作从服务器转移到客户端 在页面上 数据在表格和地图 或图表 中可视化 它使用相同的数据 但以不同的方式 因此准备显示
  • Java GSON:获取JSONObject下所有键的列表

    我已经将 GSON 作为 Java 中的 JSON 解析器 但密钥并不总是相同 例如 我有以下 JSON 我已经知道的对象 键1 值1 键2 值2 AnotherObject anotherKey1 anotherValue1 anothe
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一

随机推荐