【问题标题】:Is it possible to get the nested json output in SPARQL?是否可以在 SPARQL 中获取嵌套的 json 输出?
【发布时间】:2018-07-30 06:28:04
【问题描述】:

我正在使用 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 .

SPARQL 查询:

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 .
    }
}

上述查询将返回 4 个三元组作为输出。

我想要的是它应该只返回一个 json 结构,例如

{
    "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"]
}

以上 JSON 只是为了说明问题。 实际上,我需要一个更复杂的 json 结构,而不是字符串数组,我需要一个 json 对象数组。

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

【问题讨论】:

    标签: sparql marklogic


    【解决方案1】:

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

    1. 使用 op.fromSPARQL() 访问器从三元组投影值列。
    2. 使用op.jsonObject() 链接select() 调用以将值收集为对象的属性。
    3. 使用op.arrayAggregate() 链接groupBy() 调用以聚合数组中的对象。
    4. 链接result() 调用以获取输出。

    有关详细信息,请参阅:

    http://docs.marklogic.com/op.jsonObject

    和:

    http://docs.marklogic.com/op.arrayAggregate

    希望对您有所帮助,

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 2014-09-11
      • 2020-05-26
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多