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