注意
当ドキュメントはSPARQLの詳しい解説はしません。SPARQLについてはこちらから。
- クラスを探す
-
im@sparqlを使う人にとって、シンプルかつ自分の知識と照らし合わせやすい、一番最適なクエリはアイドルのプロフィールに関するデータだと思います。
ここでは、私の担当アイドルである如月千早さんを例としていますが、適宜ご自分のモチベーションに繋がるアイドルに変えると良いかと。
まずは、im@sparqlにはどのようなクラスの情報があるか調べましょう。
im@sparqlに限らず、だいたいのオープンデータでは各主語がどのような情報を持っているのか、ということをクラスで表しています。これもトリプルの形式で表しています。
前回の述語を調べるクエリを少し変えてクラスを調べます。
不特定の主語?主語
に対して、その主語はどのクラスのインスタンスなのかを示す述語rdf:type
の目的語?クラス
を尋ねます。 また、その目的語がラベルを示す述語rdfs:label
の目的語?クラス名
と、説明を示す述語rdfs:comment
の目的語?説明
を尋ねます。
お気付きでしょうか。optional
句の中のクエリが2行になっていることを。そして、2行目の主語が省略されていることを。トリプルが複数ある時に主語が同じ場合は、その主語を省略して書くことができます。その際、トリプルの区切りは";"
セミコロンになります。逆に主語を省略しない・別の主語に切り替える時は"."
ピリオドを使います。プログラミング言語というよりかは、英語に近いイメージですね。
結果はこちら。
半分以上がim@sparql独自クラスです。元々ある別のクラスを継承して宣言していますが、これについての説明は割愛します。 独自クラスの中に"アイドル"クラスがあると思います。IRIで言えば、imas:Idol
です。そこの?説明
も同時に見れると思います(ちゃんとした説明でないことも分かる)。
これで、アイドルを示すクラスのIRIを取得することができました。このクラスのインスタンスの中から千早さんのプロフィールを探しましょう。
- 目的の主語を探す
im@sparqlでは、ほとんどのアイドルのインスタンスに対してschema:name
による名前付けがされています。この述語から千早さんの目的語を持つ主語を見つけましょう。
?アイドルの主語 schema:name ?アイドル名.
を投げて目grepをするのもよいですが...いや、良くないので、filter
を使って必要なものだけを取り出そうと思います。filter
を通す条件はcontains
を使います。これは名前の通り、第1引数の文字列に第2引数の文字列が含まれていたらTrueが返ってくる関数です。
というわけで、千早さんを示す主語を見つけるクエリはこちら。
結果はこちら。
https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Kisaragi_Chihaya
が主語として得られたと思います。
察しの良い方はお気付きでしょうが、im@sparqlでの主語はhttps://sparql.crssnky.xyz/imasrdf/RDFs/detail/[ローマ字]
という形式を取っています。アイドルやスタッフ(社長も含め、im@sparqlでは裏方の人間をスタッフとしています)に限った話ですが。
衣装(imas:Clothes
)は、英語をカタカナ表記したものが多いのでそのまま英語に直したものだったり、ライブ(imas:Live
)は単純に名称をURIencodeかけただけだったりと、バラバラになってるのでその都度調べることをおすすめします。
また、im@sparqlの主語にそのままブラウザでアクセスすると、その主語が持つ述語と目的語を表示する機能があります。パッと確認したいときなどに使ってやってください。
- 主語からデータを取得する
ようやく主語を取得できました。あとはこれを使って取得するだけです。
もうサンプルクエリを示す必要があったのか...という感じですが...結果はこちら。
- クエリをまとめる
この流れを見て、「3ステップも踏まないといけないのか!!」と思ったのは少ないと思います。もちろんこの3つのクエリは1つにまとめることができます。
1つ目のfilter
まででアイドルを表すクラスを取得し、2つ目のfilter
までで、そのインスタンスの中から"千早"という名前を持つものを探しています。そして最後にマッチした主語に対して述語と目的語を尋ねているという形ですね。
以上で簡単なクエリを考えてみるパートは終了です。今回は千早さんのプロフィールにたどり着くための考え方の流れを示しました。1つ目のサンプルクエリから分かるようにim@sparqlには多くの独自クラスに基づいたデータが存在しています。ぜひ、自分の中の知識と照らし合わせながら様々なクエリを投げてみてください。きっと、SPARQLが自然と身につくはずです。