(1)CookpadのmoritoshデータとApache-JenaのSPARQL
料理レシピオントロジーについてのシリーズは、前回の連載「Cookpadレシピオントロジー」の第10回「タートルファイル生成プログラム」までで、タートルファイルで、Cookpadの料理レシピの内容をデータファイルを設定することで、タートルファイル形式のオントロジー(個物)ファイルを生成できるようにしたのであった。データにはCookpadにおけるmoritoshさん(筆者である)のレシピを例にしており、連載10回目までで「鰈(カレイ)の唐揚げ」「シャリアピン牛もも肉ステーキ」「パイナップル」「玄米ご飯ひき肉」の4つのオントロジーデータを作成したのだった。
その後、全116レシピのうち、50レシピまでのオントロジーデータを作成した。そのときに分析とか他のアプリケーションでの応用について考えていたのだが、まずはデータを検索できることが必要と考えたのであった。OWLオントロジー(RDFトリプル)を検索するため問い合わせ言語をSPARQL(SPARQL Protocol and RDF Query Language)という。まずはこれを採り上げなければならないのであった。
SPARQL検索の例を示すために、ここではJena ApacheのSPARQLを利用する。
Apache Jenaは、セマンティック・ウェブとリンクとデータアプリケーションのためのオープンソースのJavaフレームワーク(A free and open source Java framework for building Semantic Web and Linked Data applications.)である。要はRDFやOWLを扱うためのAPIライブラリを提供しているのである。そのJavaクラスファイルにARQというSPARQL検索エンジンが入っており、コマンドラインからもSPARQL検索できる。
ホームページは次である。
筆者は加藤文彦、他『オープンデータ時代の標準Web API SPARQL』(インプレスR&D、2015)も参照した。
Java実行環境が必要である。筆者の環境はWindows 11であり、Javaランタイムはjava version 25 (2025-09-16 LTS)である。
まずはApache Jenaのパッケージをインストールする。ホームページにアクセスし、Downloadボタン(メニュー)があるのでクリックして移動する。Apache Jena Releasesの画面で、Apache Jena Binary Distributionsという見出しがあるので、そこにある apache-jena-5.6.0.zip をダウンロードする。zipを解凍して、そのなかのフォルダをc:\に配置する。たとえば c:\jena を作って 、そこに apache-jena-5.6.0 を配置する。
Windows11の場合、Windowsメニュー(マーク)を右クリックして設定を選択し、システムを選択して、上部の検索枠に”詳細設定”を記入してリターン。システムの詳細設定の表示をクリックする。システムのプロパティウィンドウが出るので、下部の環境変数(N)...をクリックし、システムの環境変数(S)欄で、新規(W)...より変数JENA_HOMEを C:\jena\apache-jena-5.6.0 を設定する。Pathを選択して、編集(I)...をクリックし、 %JENA_HOME%\bat\ を追加する。
コマンドプロンプトを起動して、試しに
> sparql
と入力すれば、No query string or query file という出力が現れ、パスが通っていることが分かるだろう。
なお、このプログラムの出力はUTF-8であり、通常のコマンドプロンプトでは文字化けする。リダイレクトして使えば問題は無いのだが、コマンドプロンプト上で出力を目視確認したいなら、cmd.exeのショートカットを作って、そのプロパティのリンク先を
C:\Windows\System32\cmd.exe /f:on /k "chcp 65001"
と設定すればよい。こちらからコマンドプロンプトを起動すれば、日本語出力が見れる。
試しに cookpad_moritosh_50recipe.ttlをおいてあるフォルダで、t00.rqというテキストファイルを作り、内容を次のように記載してみよう。
# すべてのトリプル
SELECT ?s ?p ?o
WHERE
{
?s ?p ?o
}
コマンドプロンプトで
> sparql --data=cookpad_moritosh_50recipe.ttl --query=t00.rq
と入力すれば次のような結果を得るだろう。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| s | p | o |
===========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
| <http://www.onto.org/life/food/cookpad_moritosh/石鯛(イシダイ)の刺身_ステップ10> | <http://www.onto.org/life/food/recipe#title> | "ステップ10"@ja |
| <http://www.onto.org/life/food/cookpad_moritosh/石鯛(イシダイ)の刺身_ステップ10> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> | <http://www.w3.org/2002/07/owl#NamedIndividual> |
| <http://www.onto.org/life/food/cookpad_moritosh/石鯛(イシダイ)の刺身_ステップ10> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> | <http://www.onto.org/life/food/recipe#ステップ> |
~
ちなみに、sparqlの問い合わせ文t00.rqの内容は、主語?s、述語?p、目的語?oのすべての組み合わせを検索するものである。?s, ?p, ?oが変数であり、SELECTの後に記載することで出力対象になる。
次回から、検索例を示してSPARQL問い合わせ文と出力を解説していく。