可以在SPARQL中获得嵌套的json输出吗?

可以在SPARQL中获得嵌套的json输出吗?,sparql,marklogic,Sparql,Marklogic,我正在使用MarkLogic8.0-6.3 我遇到了一个场景,需要在SPARQL中嵌套JSON输出 例如,一个IRI有多个相同的谓词,在结果中,我希望数组中的多个值不是一个完整的三元组 例如: 假设三元组: @prefix p0: <http://www.mla.com/term/> . p0:7 <http://www.w3.org/2004/02/skos/core#narrower> p0:768 ,

我正在使用MarkLogic
8.0-6.3

我遇到了一个场景,需要在SPARQL中嵌套JSON输出

例如,一个IRI有多个相同的谓词,在结果中,我希望数组中的多个值不是一个完整的三元组

例如:

假设三元组:

@prefix p0: <http://www.mla.com/term/> .
p0:7 <http://www.w3.org/2004/02/skos/core#narrower> p0:768 ,
                                                    p0:769 ,
                                                    p0:770 ,
                                                    p0:771 .
上面的JSON只是为了解释这个问题。 实际上,我需要一个更复杂的json结构,而不是字符串数组,我需要一个json对象数组


我知道我可以读取响应并以任何格式重新创建整个json,但它会影响性能。

在MarkLogic 9的最新版本中,Optic API可以支持此要求:

  • 使用访问器从三元组中投影值列
  • 链a
    select()
    调用,用于收集作为对象属性的值
  • 使用链接一个
    groupBy()
    调用来聚合数组中的对象
  • 链接一个
    result()
    调用以获取输出
  • 有关详细信息,请参阅:

    以及:

    希望有帮助

    PREFIX skos-mla: <http://www.mlacustom.com#>
    PREFIX term: <http://www.mla.com/term/>
    
    select ?iri ?o {   
        graph<thesaurus-term>{         
            bind(term:7 as ?iri)
            term:7 skos:narrower ?o .
        }
    }
    
    {
        "iri": "http://www.mla.com/term/7",
        "narrowers": ["http://www.mla.com/term/768", "http://www.mla.com/term/769", "http://www.mla.com/term/770", "http://www.mla.com/term/771"]
    }