Rdf 返回JSON层次结构的单个SPARQL查询

Rdf 返回JSON层次结构的单个SPARQL查询,rdf,sparql,triplestore,stardog,Rdf,Sparql,Triplestore,Stardog,我正在对Stardog数据检索进行一些测试,我不确定如何解决以下问题: 我有一个Stardog数据库,我通过HTTP URL(http://localhost:5820/myDB/query?query=...)和Accept=“application/sparql results+json” 我创建了一个SPARQL查询,如下所示: select distinct ?p ?childname where { ?p a ex:Person . OPTIONAL {

我正在对Stardog数据检索进行一些测试,我不确定如何解决以下问题:

我有一个Stardog数据库,我通过HTTP URL(
http://localhost:5820/myDB/query?query=...
)和
Accept=“application/sparql results+json”

我创建了一个SPARQL查询,如下所示:

select distinct ?p ?childname 
where { 
    ?p a ex:Person . 
        OPTIONAL { ?p ex:hasChild ?child .
        ?child rdfs:label ?childname . }
}
我的问题是这给了我每个孩子一个对象,比如(注意符号是说明性的):

我可以用组_CONCAT“解决”这个问题,但这只会连接字符串:

{ p = XXX
childname = AAA, BBB, ....
}
我需要获得正确的JSON结构:

{ p = XXX
   { childname = AAA }
   { childname = BBB }
 .....
}
当然,我可以运行两个SPARQL查询,一个用于获取?p,另一个用于获取?childname的列表,但在我的情况下,这实际上是不可能的(没有详细输入为什么不)


如何使用JSON中的单个URL获得这些结果?

JSON-LD中的结果可能是无需后处理即可获得的最接近所需格式的结果。您需要将查询重写为CONSTRUCT,并使用
Accept:application/ld+json

此查询的结果是一系列绑定,每个绑定都有一个p值,还可以选择一个childname值。正如您所注意到的,您可以使用GROUPBY,但您必须将这些值组合起来;你将无法获得你想要的格式。你必须对结果进行后处理。
{ p = XXX
   { childname = AAA }
   { childname = BBB }
 .....
}