SPARQLthon46/sparql-rest-api
提供:TogoWiki
API Blueprint のような簡単な DSL (Markdown) で SPARQL 検索の結果を取得する REST API サーバを構築できると便利そう。
# GET /organism?tax_id + Response 200 (application/json) ```sparql http://dev.togogenome.org/sparql-test SELECT ?organism WHERE { GRAPH <http://togogenome.org/graph/taxonomy> { <http://identifiers.org/taxonomy/{{tax_id}}> :organism ?organism_id . ?organism rdfs:label ?organism . } } ```
SERVICE 句の効率が悪い(もしくはサポートされていないエンドポイントの)ために、 多段の SPARQL クエリを共通の変数名でカスケードできるようにしてみたらどうか。
# GET /pathway?protein_id + Response 200 (application/json) ```sparql http://dev.togogenome.org/sparql-test SELECT ?pathway_id WHERE { GRAPH <http://togogenome.org/graph/uniprot> { <http://identifiers.org/uniprot/{{protein_id}}> :pathway ?pathway_id . } } ``` ```sparql http://sparql.uniprot.org/sparql SELECT ?pathway WHERE { {{pathway_id}} rdfs:label ?pathway . } ```
イメージとしては、上記のような Markdown を spec.md など適当なファイルに保存して、
node sparql-rest-api-server.js spec.md --port 8080
のように起動すると http://localhost:8080/organism?9606 などが実行できるサーバが起動して
[ "Homo sapiens" ]
のような JSON が返ってくる感じ。
TODO:
- 結果は JSON でよいか
- 結果が1つの場合と複数の場合で分けるべきか (or 必ず1要素でも配列で返すのか)
- そもそも値だけの配列の JSON より、入力変数を伴うキー付きのハッシュの JSON の方がうれしいかも↓?
[ { "protein_id": "queryの入力id", "pathway": "queryの出力id" } ]