亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 rdf4j 將元組轉換為 json

使用 rdf4j 將元組轉換為 json

HUH函數 2022-05-25 09:51:39
問題如下:在解析 sparql 查詢時,我得到了簡化的 ast,我需要將其傳遞給第三方庫進行進一步處理,但開箱即用的功能 (rdf4j) 不允許在機器中傳輸 ast - 可讀格式,只有tex,我想以json格式接收。        StringBuilder qb = new StringBuilder();        qb.append("    PREFIX has_vaccine_allergen: <http://purl.obolibrary.org/obo/VO_0000531>\n" +                "    PREFIX chicken_egg_protein_allergen: <http://purl.obolibrary.org/obo/VO_0000912>   \n" +                "    SELECT distinct ?vaccine_label ?vaccine \n" +                "    FROM <http://purl.obolibrary.org/obo/merged/VO>\n" +                "    WHERE {\n" +                "        ?vaccine rdfs:label ?vaccine_label .\n" +                "        ?vaccine rdfs:subClassOf ?vaccine_restriction .\n" +                "        ?vaccine_restriction owl:onProperty has_vaccine_allergen:; owl:someValuesFrom chicken_egg_protein_allergen: .\n" +                "\t}");        SPARQLParser parser = new SPARQLParser();        ParsedTupleQuery q = (ParsedTupleQuery)parser.parseQuery(qb.toString(), null);        TupleExpr te = q.getTupleExpr();        System.out.println(te);代碼執行結果:SelectQuery[PrefixDecl (prefix=has_vaccine_allergen), PrefixDecl (prefix=chicken_egg_protein_allergen), SelectQuery]Distinct   Projection      ProjectionElemList         ProjectionElem "vaccine_label"         ProjectionElem "vaccine"      Join         Join            Join               StatementPattern                  Var (name=vaccine)                  Var (name=_const_9285ccfc_uri, value=http://www.w3.org/2000/01/rdf-schema#label, anonymous)                  Var (name=vaccine_label)               StatementPattern                  Var (name=vaccine)                  Var (name=_const_4592be07_uri, value=http://www.w3.org/2000/01/rdf-schema#subClassOf, anonymous)                  Var (name=vaccine_restriction)我需要把它變成 json 格式
查看完整描述

1 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

首先:TupleExpr對象(及其下面的樹)不是抽象語法樹(AST),而是 RDF4J 的查詢代數模型。如果您希望直接處理 SPARQL 查詢的 AST,您可以使用它SyntaxTreeBuilder.parseQuery(queryString)來接收實際的 AST。也就是說,在 AST 或代數模型上進行查詢重新處理都可以工作,這在一定程度上取決于您的輸出到底應該做什么,哪個是最佳選擇。

對于 AST 或查詢代數模型,RDF4J 具有抽象的訪問者實現,您可以根據自己的需要自由擴展。對于 AST 樹,AbstractASTVisitor是一個很好的起點(確保選擇正確的樹,RDF4J 有兩個:一個用于 SeRQL,一個用于 SPARQL)。對于查詢代數模型,開始的地方是AbstractQueryModelVisitor. 在 RDF4J 代碼庫本身中有大量的實現示例。典型的模式是您覆蓋meet要定義自己行為的方法,super.meet()并在處理不是葉子的節點時注意在最后調用。


查看完整回答
反對 回復 2022-05-25
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號