6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SPARQLにおける文字列連結とURI化

Last updated at Posted at 2014-08-21

調べても意外に載っていなかったので,ちょこっと書きます。
SPARQLのクエリでは,出力する文字列を編集してURI化できます。

SELECT文の場合

ここでは,これまで文字列だったObjectをURIにして出力するというクエリを書きます。
以下の例では,casNumberが文字列(例:"13292-46-1")だったものを,http://bio2rdf.org/cas:13292-46-1 のようにURIにします。

PREFIX dbowl: <http://dbpedia.org/ontology/> #prefixを使って簡略的に書きます。
SELECT distinct ?oo
WHERE {?s dbowl:casNumber ?o.
FILTER ( !(?o = "")) #空白文字を除く
BIND (URI(CONCAT("http://bio2rdf.org/cas:",?o)) as ?oo)
      }
ORDER BY ?o #番号順に並び替え

CONSTRUCT文の場合

ちなみにRDFの形で出力したい場合には,CONSTRUCTを使えばOKです。

PREFIX dbowl: <http://dbpedia.org/ontology/>
CONSTRUCT
{?s dbowl:casNumber ?oo}
WHERE {?s dbowl:casNumber ?o.
FILTER ( !(?o = ""))
BIND (URI(CONCAT("http://bio2rdf.org/cas:",?o)) as ?oo)
      }
ORDER BY ?o

元データまで変更する場合

もとのRDFデータまで変更したい場合には(RDFのトリプルストアによっては挿入・削除の機能をサポートしています。)以下のようにUpdate用のクエリを投げれば,もとのデータまで変更してくれます。

PREFIX dbowl: <http://dbpedia.org/ontology/>

DELETE {?s dbowl:casNumber ?o }
INSERT {?s dbowl:casNumber ?oo }
WHERE {?s dbowl:casNumber ?o.
FILTER ( !(?o = ""))
BIND (URI(CONCAT("http://bio2rdf.org/cas:",?o)) as ?oo)
      }

これが出来ると,もともとは文字列だったけれどもURIを発見した時や,もう少しその文字列に説明を加えたい場合(URIにするとObjectをSubjectやPredicateに出来る)外部で公開されているデータと繋げたい場合(URIの方が繋げやすい)に便利です。

おまけ

こちらにデータを載せておいたので,お気軽にSPARQLクエリを投げてみてください。

CONSTRUCTは使えません。悪しからず…
元データを変更した場合にはもとに戻しておいてください(え)

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?