これは SPARQL Advent Calendar 2015 23日目の記事です。
普段は生命情報系のRDFを対象にSPARQLを叩いていますが、折角なのでこれまで触ったことがないデータを対象にSPARQLを投げてみようということで、今年11月に試験提供が開始されたNHK番組LODを選びました。
SPARQLのやさしい解説はしていませんので、よくわからない方はSPARQL本を是非ご参照ください!(宣伝)
#NHK番組LODとは
NHK番組LODは、番組放送データの新しい活用方法の調査・研究を目的として、ひとまずLODチャレンジJapan2015用に期間限定(2015年11月12日~2016年7月18日)で提供されているデータのようです。
利用方法 | データ仕様 | SPARQLサンプル
ドキュメントを読んだりちょっと触ればわかりますが、ざっくり特徴をまとめると以下のような感じです。
- WebAPIでデータ取得でき、リクエストURLにSPARQLを埋め込める
- API利用には事前にAPIキーの取得が必要
- DBpediaのSPARQLエンドポイントようなGUIは用意されていない
- API成功時のレスポンスはSPARQLの仕様に準拠したフォーマットが採用されている
- クロスドメイン通信は許可されていない(javascript(ajax)では利用出来ない)
- 放送予定の番組データが提供されている(だいたい2〜3日分ぐらい?原則毎日更新)
- 放送局(東京,帯広,沖縄...)毎の放送データが提供されている
#SPARQL例
##サンプル1:ある放送局の放送予定番組一覧を取得する
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX nhklod: <http://lod2015.nhk.jp/nhklod/>
PREFIX nhklod-area: <http://lod2015.nhk.jp/nhklod/area/>
PREFIX nhklod-service: <http://lod2015.nhk.jp/nhklod/service/>
PREFIX nhklod-genre: <http://lod2015.nhk.jp/nhklod/genre/>
SELECT ?start_time ?service_name ?title
{
?program
rdf:type nhklod:Program ;
nhklod:title ?title ;
nhklod:start_time ?start_time ;
nhklod:area ?areaIRI ;
nhklod:service ?serviceIRI .
?areaIRI nhklod:area_name "神戸"^^xsd:string .
?serviceIRI nhklod:service_name ?service_name .
FILTER ( STR(?service_name) IN ("NHK総合1", "NHKEテレ1") )
}
ORDER BY ?start_time
上記のSPARQLは神戸放送局の"NHK総合1"または"NHKEテレ1"チャンネルでの放送予定(リアルタイムではない)の番組一覧を取得しています。読みやすいように"神戸"と書いていますが、実際には?areaIRIを直接エリアコード(データ仕様)で指定する方がシンプルなクエリになります。
nhklod:area nhklod-area:280 ;
また、データ仕様のチャンネル名は全角半角が実際のデータと異なっていますのでご注意ください(指摘中)。
結果(jsonをテーブル形式にしたもの)
start_time | service_name | title |
---|---|---|
2015-12-23T01:40:00+09:00 | NHKEテレ1 | 放送休止 |
2015-12-23T04:10:00+09:00 | NHK総合1 | NHKプレマップ「おやすみ日本 眠いいね!」29(火)夜11:25から |
・・・・ | ・・ | ・・・・ |
情報提供:NHK |
##サンプル2:番組内容をテキスト検索する
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX nhklod: <http://lod2015.nhk.jp/nhklod/>
PREFIX nhklod-area: <http://lod2015.nhk.jp/nhklod/area/>
PREFIX nhklod-service: <http://lod2015.nhk.jp/nhklod/service/>
PREFIX nhklod-genre: <http://lod2015.nhk.jp/nhklod/genre/>
SELECT ?start_time ?service_name ?title ?content
{
?program
rdf:type nhklod:Program ;
nhklod:title ?title ;
nhklod:content ?content ;
nhklod:start_time ?start_time ;
nhklod:area ?areaIRI ;
nhklod:service/nhklod:service_name ?service_name .
?areaIRI nhklod:area_name "神戸"^^xsd:string .
FILTER (REGEX (?content, "ディーン") && REGEX (?content, "フジオカ") )
}
ORDER BY ?start_time
上記のクエリは番組内容のテキストから"ディーン"及び"フジオカ"が含まれる番組リストを取得しています。これで、ディーン・フジオカがいっぱい出てきそうな日だけ朝ドラを観る、なんてことも可能だーーー!!(つべこべ言わず毎日観ましょう)
結果(jsonをテーブル形式にしたもの)
start_time | service_name | title | content |
---|---|---|---|
2015-12-23T07:30:00+09:00 | NHKBSプレミアム | 連続テレビ小説 あさが来た(75)「東京物語」 | あさ(波瑠)とうめ(友近)は、東京の五代友厚(ディーン・フジオカ)の事務所を訪れる。そこに現れたのは、政府の要人で内務卿を務める大久保利通(柏原収史)であった。あさは、三人でこれからの日本について語る。居眠りしていたうめが目を覚ますと、その様子に驚いて…。改めて大阪のためにがんばろうと思う、あさ。一方、大阪の新次郎(玉木宏)は千代の世話をしながらあさのことを心配に思って…。 |
2015-12-23T07:30:00+09:00 | NHKBSプレミアム(104ch) | 連続テレビ小説 あさが来た(75)「東京物語」 | あさ(波瑠)とうめ(友近)は、東京の五代友厚(ディーン・フジオカ)の事務所を訪れる。そこに現れたのは、政府の要人で内務卿を務める大久保利通(柏原収史)であった。あさは、三人でこれからの日本について語る。居眠りしていたうめが目を覚ますと、その様子に驚いて…。改めて大阪のためにがんばろうと思う、あさ。一方、大阪の新次郎(玉木宏)は千代の世話をしながらあさのことを心配に思って…。 |
・・・・ | ・・ | ・・・・ | ・・・・ |
情報提供:NHK |
##サンプル3:2つの放送局の片方でしかやってない番組を調べる
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX nhklod: <http://lod2015.nhk.jp/nhklod/>
PREFIX nhklod-area: <http://lod2015.nhk.jp/nhklod/area/>
PREFIX nhklod-service: <http://lod2015.nhk.jp/nhklod/service/>
PREFIX nhklod-genre: <http://lod2015.nhk.jp/nhklod/genre/>
SELECT DISTINCT ?title ?genre
WHERE {
?program_area1 rdf:type nhklod:Program ;
nhklod:title ?title ;
nhklod:area nhklod-area:270 .
MINUS
{
?program_area2 rdf:type nhklod:Program ;
nhklod:title ?title ;
nhklod:area nhklod-area:130 .
}
?program_area1 nhklod:genre/nhklod:genre_name ?genre
}
ちょっとマニアックなクエリですが、大阪(270)で放送されているが、東京(130)では放送されていない番組をピックアップしています。
どうせ関西だしお笑い番組でも映しとけ、みたいな結果を期待していましたが、そこまで大きな番組の違いはありませんでした。画一放送、さすが公共放送の鑑ですね(?)。
結果(jsonをテーブル形式にしたもの)
title | genre |
---|---|
関西のニュース・気象情報 | 定時・総合 |
関西の気象情報 | 天気 |
関西のニュース・気象情報 | 天気 |
関西のニュース | ローカル・地域 |
関西845~関西のニュースと気象情報~ | ローカル・地域 |
ニュースほっと関西▽デスクが“斬る”3来年の政治展望▽あさが来たで大にぎわい! | ローカル・地域 |
おはよう関西 ▼“遊び”で社員育成!技術とアイディア磨く | ローカル・地域 |
平成27年度 NHK新人お笑い大賞~堺市立美原文化会館から中継~ | 芸能・ワイドショー |
助けて!きわめびと「“笑顔”の写真を撮りたい」 | 暮らし・住まい |
ぐるっと関西 おひるまえ ▽年末年始のヒストリアの秘話 | 暮らし・住まい |
ぐるっと関西 おひるまえ ▽年末年始のヒストリアの秘話 | 番組紹介・お知らせ |
助けて!きわめびと「“笑顔”の写真を撮りたい」 | トークバラエティ |
平成27年度 NHK新人お笑い大賞~堺市立美原文化会館から中継~ | お笑い・コメディ |
助けて!きわめびと「“笑顔”の写真を撮りたい」 | ドキュメンタリー/教養 |
情報提供:NHK |
#まとめ
他のLODと繋がりそうなURIはありませんでしたが、ユースケースの一つとしては、地域的な要素、時間的な要素、番組内容に含まれる単語等で番組を探し出してユーザに通知するとかかなぁと思いました。
ご興味のある方は、是非もっと調べつくしてLODチャレンジJapan2015へご応募を!