SlideShare a Scribd company logo
takemikamiʼs note ‒ http://takemikami.com/
RDFチェックツール「rdflint」のご紹介
im@sparlのデータセットをコミュニティで運⽤するために
Copyright (C) Takeshi Mikami. All rights reserved. 1
三上威(アーリース情報技術株式会社 代表) twitter: @takemikami
2019.4.21アイマスハッカソン2019 in 名古屋 (o・∇・o)
尾張だよ〜
takemikamiʼs note ‒ http://takemikami.com/
副業紹介
• みかみんP (@takemikamas)
• フリーランスITエンジニア
• データ分析及び機械学習等の応⽤システム開発
• マーケティングデータ分析基盤のシステム開発
• 略歴
• 情報通信ネットワーク・確率論 @ 甲南⼤学理学部応⽤数学科
• EC, CRM等のシステム開発・構築 @ NEC系SIer
• 旅⾏系ECサイトのマーケティングデータ分析 @ DeNA
• データ分析及び機械学習等の応⽤システム開発 @ アーリース情報技術(株)
• 最近扱っている技術領域
• GCP, Hadoop, SparkMLlib, Python, R, TensorFlow/Keras
Copyright (C) Takeshi Mikami. All rights reserved. 2
発表者のプロフィールを紹介します
P
takemikamiʼs note ‒ http://takemikami.com/
本業紹介
• 担当
• 765AS: 萩原雪歩
• ミリオン: 箱崎星梨花
• デレマス: ⼩⽇向美穂
• IM@Study関連
• 何つながりなのかな?を探る⾃然⾔語処理
〜765PRO LIVE THEATERに通りがかる⼩⽇向美穂〜
@週刊IM@Study 2019年5⽉
• ima@sparqlではじめるR Markdownとgitbookによるレポート⽣成
@2017.9.2 あいますえんじにあ Meetup in 京都
• 担当アイドルに反応してLチカさせる予測モデル開発
@2017.5.17 アイマスエンジニア MeetUp In Tokyo
• RDFファイルの⾃動検査ツール https://github.com/imas/rdflint
Copyright (C) Takeshi Mikami. All rights reserved. 3
発表者の本業を紹介します
takemikamiʼs note ‒ http://takemikami.com/
テーマとアジェンダ
• テーマ
• RDFチェックツール「rdflint」の使い⽅の紹介と仕組みの概要
• アジェンダ
• RDFとトリプル
• rdflintで出来ること
Copyright (C) Takeshi Mikami. All rights reserved. 4
本資料のテーマ、アジェンダを⽰します
takemikamiʼs note ‒ http://takemikami.com/
rdflintとは
• 以下のチェックが⾃動化出来る
• RDF、Turtle(ttl)ファイルの⽂法チェック
• 未定義の主語が、⽬的語として使われていないかのチェック
• SPARQLクエリによるカスタムチェック
• CIに組み込んでPullRequestによるマスターデータ運⽤に利⽤可能
• Apache Jenaを利⽤して実装されている
Copyright (C) Takeshi Mikami. All rights reserved. 5
RDFファイルの⾃動検査ツール
リポジトリ → https://github.com/imas/rdflint
takemikamiʼs note ‒ http://takemikami.com/
RDFとトリプル
Copyright (C) Takeshi Mikami. All rights reserved. 6
takemikamiʼs note ‒ http://takemikami.com/
グラフデータベースのデータモデル
Copyright (C) Takeshi Mikami. All rights reserved. 7
グラフデータベースとLinked Open Data
グラフDBのデータモデルとしてプロパティグラフとトリプルを⽰します
プロパティグラフ トリプル
主語(Subject) ⽬的語(Object)
述語(Predicate)
頂点
辺
プロパティ
点、辺、プロパティで構成
点・辺にキー/値ペアのプロパティを持つ
→有向グラフ+プロパティ
主語、述語、⽬的語の集まりで構成
→⼀般的な有向グラフ
RDFではこちらの
データモデルを表現する
takemikamiʼs note ‒ http://takemikami.com/
トリプルによるデータの表現 グラフ表現
Copyright (C) Takeshi Mikami. All rights reserved. 8
グラフデータベースとLinked Open Data
トリプルによるデータ表現の例を⽰します
宮沢賢治 岩⼿県
花巻市
盛岡市
銀河鉄道の夜
ジョバンニ
カムパネルラ
1934年
宮沢賢治
花巻市
盛岡市⽣誕県
⽣誕市
著作品 名称
岩⼿県
県庁
所在地
所属
所属
名称
名称
名称
銀河鉄道の夜名称
初出年
登場⼈物
登場⼈物
リソースのURI
リテラル
凡例:
宮沢賢治と
銀河鉄道の夜に関する
データを例として
takemikamiʼs note ‒ http://takemikami.com/
トリプルによるデータの表現 関係とリテラル
• リソース間の関係を表現
• リソースに関連する値(リテラル)を表現
Copyright (C) Takeshi Mikami. All rights reserved. 9
グラフデータベースとLinked Open Data
トリプルによるデータ表現の例を⽰します
宮沢賢治 銀河鉄道の夜
1934年
著作品
銀河鉄道の夜
主語 述語 ⽬的語
初出年
主語 述語 ⽬的語
これらの集合が前スライドで⽰したようなグラフ表現になる
リソースのURI
リテラル
凡例:
takemikamiʼs note ‒ http://takemikami.com/
Resource Description Framework (RDF)
• 主語・述語・⽬的語かのセット(=トリプル)を記述できる
• 必要に応じて、RDFスキーマで語彙を拡張できる
• 語彙には、述語に使⽤されるものや、リソースのクラスを⽰すものがある
• SPARQL(SPARQL Protocol and RDF Query Language)などのクエリ⾔
語で問い合わせが出来る
Copyright (C) Takeshi Mikami. All rights reserved. 10
グラフデータベースとLinked Open Data
Resource Description Framework(RDF)について説明します
ウェブ上のリソースの
メタデータを記述するための枠組み
takemikamiʼs note ‒ http://takemikami.com/
RDFファイルの例
Copyright (C) Takeshi Mikami. All rights reserved. 11
箱崎星梨花に関するRDFの抜粋と、グラフ表現を⽰します
<rdf:Description rdf:about="detail/Hakozaki_Serika">
<imas:nameKana xml:lang="ja">はこざきせりか</imas:nameKana>
<schema:name xml:lang="ja">箱崎星梨花</schema:name>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">13</foaf:age>
<rdf:type rdf:resource="https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol"/>
<imas:cv rdf:resource="http://ja.dbpedia.org/resource/⿇倉もも"/>
</rdf:Description>
detail/Hakozaki_Serika
http://ja.dbpedia.org/resource/⿇倉もも
はこざきせりか
imasrdf/URIs/imas-schema.ttl#Idol
箱崎星梨花
13
imas:nameKana
imas:name
foaf:age
rdf:type
imas:cv
takemikamiʼs note ‒ http://takemikami.com/
rdflintで出来ること
Copyright (C) Takeshi Mikami. All rights reserved. 12
takemikamiʼs note ‒ http://takemikami.com/
rdflintで出来ること① 〜RDFファイルとして正しいか〜
Copyright (C) Takeshi Mikami. All rights reserved. 13
rdflintで出来ること: RDFファイルとして正しいかのチェック のイメージを⽰します
<rdf:Description rdf:about="detail/Hakozaki_Serika">
<imas:nameKana xml:lang="ja">はこざきせりか</imas:nameKana>
<schema:name xml:lang="ja">箱崎星梨花</schema:name>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">13</foaf:age>
<rdf:type rdf:resource="https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol"/>
<imas:cv rdf:resource="http://ja.dbpedia.org/resource/⿇倉もも"/>
</rdf:Description>
detail/Hakozaki_Serika
http://ja.dbpedia.org/resource/⿇倉もも
はこざきせりか
imasrdf/URIs/imas-schema.ttl#Idol
箱崎星梨花
13
imas:nameKana
imas:name
foaf:age
rdf:type
imas:cv
RDFファイルとして
正しいかチェック
takemikamiʼs note ‒ http://takemikami.com/
rdflintで出来ること② 〜主語の存在チェック〜
Copyright (C) Takeshi Mikami. All rights reserved. 14
rdflintで出来ること: 主語の存在チェック のイメージを⽰します
<rdf:Description rdf:about="detail/Hakozaki_Serika">
<imas:nameKana xml:lang="ja">はこざきせりか</imas:nameKana>
<schema:name xml:lang="ja">箱崎星梨花</schema:name>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">13</foaf:age>
<rdf:type rdf:resource="https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol"/>
<imas:cv rdf:resource="http://ja.dbpedia.org/resource/⿇倉もも"/>
</rdf:Description>
detail/Hakozaki_Serika
http://ja.dbpedia.org/resource/⿇倉もも
はこざきせりか
imasrdf/URIs/imas-schema.ttl#Idol
箱崎星梨花
13
imas:nameKana
imas:name
foaf:age
rdf:type
imas:cv
im@sparqlのデータセットで
管理されている主語の
存在チェック
im@sparqlのデータセットで
管理されている主語の
存在チェック
im@sparqlのデータセットで
管理されている主語の
存在チェック
im@sparqlのデータセットで
管理されている主語の
存在チェック
takemikamiʼs note ‒ http://takemikami.com/
rdflintで出来ること③ 〜SPARQLクエリによるチェック〜
Copyright (C) Takeshi Mikami. All rights reserved. 15
rdflintで出来ること: SPARQLクエリによるカスタムチェック のイメージを⽰します
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?s ?o
WHERE {
?s rdf:type ?o .
FILTER NOT EXISTS {
?s rdf:type <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol>
}
}
チェック⽤SPARQLクエリ
rdf:typeが「imasrdf/URIs/imas-schema.ttl#Idol」以外
の主語・述語を返却するクエリ
対象ファイル: RDFs/765AS.rdf
765ASのメンバを定義するファイル
やりたいこと: 765ASのアイドル定義⽤ファイルに
アイドル以外が定義されていないかチェックしたい
takemikamiʼs note ‒ http://takemikami.com/
rdflintで出来ること③ 〜SPARQLクエリによるチェック〜
Copyright (C) Takeshi Mikami. All rights reserved. 16
rdflintで出来ること: SPARQLクエリによるカスタムチェック のイメージを⽰します
while(rs.hasNext()) {
log.warn("アイドル以外の定義があります " + rs.next())
}
クエリ結果を警告として出⼒するスクリプト(groovy)
RDFs/765AS.rdf
warn アイドル定義⽤ファイル: アイドル以外の定義があります ( ?o =
<https://schema.org/MusicRecording> ) ( ?s =
<https://sparql.crssnky.xyz/imasrdf/RDFs/detail/%E9%AD%94%E6%B3%95%E3%82%92%E3%81%8B%E3%
81%91%E3%81%A6%21%20%28M%40STER%20VERSION%29_01> )
チェック結果の表⽰
※意図的に誤ったデータを追加して確認した結果です。
takemikamiʼs note ‒ http://takemikami.com/
検査の実⾏イメージ
Copyright (C) Takeshi Mikami. All rights reserved. 17
検査の実⾏イメージを⽰します
$ wget https://jitpack.io/com/github/imas/rdflint/0.0.4/rdflint-0.0.4-all.jar
rdflintのダウンロード
$ java -jar rdflint-0.0.4-all.jar -config .circleci/rdflint-config.yml
RDFs/Event.rdf
warn Undefined URI: https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Hakozaki_serika (Triple:
https://sparql.crssnky.xyz/imasrdf/RDFs/detail/765Caravan_2 - http://schema.org/actor -
https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Hakozaki_serika)
rdflint検査の実⾏
対象ファイル
エラー理由
※Hakozaki_serika → Hakozaki_Serika (⼤⽂字・⼩⽂字の誤り)
takemikamiʼs note ‒ http://takemikami.com/
SPARQLクエリによるチェックの設定イメージ
Copyright (C) Takeshi Mikami. All rights reserved. 18
SPARQLクエリによるチェックの設定イメージを⽰します
baseUri: https://sparql.crssnky.xyz/imasrdf/
rules:
- name: アイドル定義⽤ファイル
target: "RDFs/765AS.rdf"
query: |
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?s ?o
WHERE {
?s rdf:type ?o .
FILTER NOT EXISTS {
?s rdf:type <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol>
}
}
valid: |
while(rs.hasNext()) {
log.warn("アイドル以外の定義があります " + rs.next())
}
設定ファイル: .circleci/rdflint-config.yml
takemikamiʼs note ‒ http://takemikami.com/
インタラクティブモード
• コマンドラインでローカルにあるRDFファイルにSPARQL実⾏が出来る
Copyright (C) Takeshi Mikami. All rights reserved. 19
インタラクティブモードを紹介します
$ wget https://jitpack.io/com/github/imas/rdflint/0.0.4/rdflint-0.0.4-all.jar
rdflintのダウンロード
$ java -jar rdflint-0.0.4-all.jar -i -config .circleci/rdflint-config.yml
sparql >
rdflintインタラクティブモードの開始
takemikamiʼs note ‒ http://takemikami.com/
インタラクティブモードの実⾏イメージ
Copyright (C) Takeshi Mikami. All rights reserved. 20
インタラクティブモードの実⾏イメージを⽰す
$ java -jar rdflint-0.0.4-all.jar -i -config .circleci/rdflint-config.yml
sparql > PREFIX schema: <http://schema.org/>
> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#>
> SELECT ?星梨花の主語
> WHERE {
> ?星梨花の主語 rdf:type imas:Idol;
> schema:name ?アイドル名.
> filter(contains(?アイドル名,"箱崎星梨花"))
> }
>
--------------------------------------------------------------------
| 星梨花の主語 |
====================================================================
| <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Hakozaki_Serika> |
--------------------------------------------------------------------
rdflintインタラクティブモードでのクエリ実⾏

More Related Content

PPTX
本当のオブジェクト指向は可読性を上げる
PDF
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
PDF
ナレッジグラフとオントロジー
PDF
オントロジー工学に基づくセマンティック技術(2)ナレッジグラフ入門
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
オントロジーとは?
PDF
イミュータブルデータモデル(入門編)
PDF
ナレッジグラフ入門
本当のオブジェクト指向は可読性を上げる
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
ナレッジグラフとオントロジー
オントロジー工学に基づくセマンティック技術(2)ナレッジグラフ入門
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
オントロジーとは?
イミュータブルデータモデル(入門編)
ナレッジグラフ入門

What's hot (20)

PDF
RDF Semantic Graph「RDF 超入門」
PDF
ナレッジグラフ/LOD利用技術の入門(後編)
PPTX
世界一わかりやすいClean Architecture release-preview
PDF
Kotlinアンチパターン
PPTX
PPTX
セマンティック・ウェブのためのRdf owl入門解説.ch5
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
PPTX
大規模トラフィックにどのように備えて負荷対策を実施しているのか?
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PDF
イミュータブルデータモデルの極意
PDF
オントロジー工学に基づくセマンティック技術(1)オントロジー工学入門
PDF
ナレッジグラフ/LOD利用技術の入門(前編)
PPTX
世界一わかりやすいClean Architecture
PDF
Ormとの付き合い方
PDF
失敗から学ぶ機械学習応用
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
PPTX
画像処理AIを用いた異常検知
PPTX
AWSで作る分析基盤
PDF
Webアプリを並行開発する際のマイグレーション戦略
PPTX
データモデリング・テクニック
RDF Semantic Graph「RDF 超入門」
ナレッジグラフ/LOD利用技術の入門(後編)
世界一わかりやすいClean Architecture release-preview
Kotlinアンチパターン
セマンティック・ウェブのためのRdf owl入門解説.ch5
Cognitive Complexity でコードの複雑さを定量的に計測しよう
大規模トラフィックにどのように備えて負荷対策を実施しているのか?
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
イミュータブルデータモデルの極意
オントロジー工学に基づくセマンティック技術(1)オントロジー工学入門
ナレッジグラフ/LOD利用技術の入門(前編)
世界一わかりやすいClean Architecture
Ormとの付き合い方
失敗から学ぶ機械学習応用
BoostAsioで可読性を求めるのは間違っているだろうか
画像処理AIを用いた異常検知
AWSで作る分析基盤
Webアプリを並行開発する際のマイグレーション戦略
データモデリング・テクニック
Ad

Similar to RDFチェックツール「rdflint」のご紹介 (8)

PDF
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
PDF
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
PDF
RDF/OWLの概要及びOSS実装、及び活用イメージについて
PDF
rdflintのvscode拡張の紹介とその実装方法
PDF
セマンテックウェブとRDFDB
PDF
つながるデータShare
PPT
リンクトオープンデータ(LOD)の紹介と、その先にある参画・協働・復興促進
PPTX
RDF をプロパティグラフに 変換するマッピング言語 G2GML
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDF/OWLの概要及びOSS実装、及び活用イメージについて
rdflintのvscode拡張の紹介とその実装方法
セマンテックウェブとRDFDB
つながるデータShare
リンクトオープンデータ(LOD)の紹介と、その先にある参画・協働・復興促進
RDF をプロパティグラフに 変換するマッピング言語 G2GML
Ad

More from Takeshi Mikami (20)

PDF
適切なクラスタ数を機械的に求める手法の紹介
PDF
OAuth 2.0による認可の流れ
PDF
MapReduceによるConnected Components(連結成分)の見つけ方
PDF
データサイエンスアイドル「小日向美穂」と考える「つながり」
PDF
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
PDF
GitHubの機能を活用したGitHub Flowによる開発の進め方
PDF
HBase CompleteBulkLoadその仕組み&発生した問題
PDF
アーリース情報技術株式会社 会社案内 (2019/02/13)
PDF
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
PDF
SPARQL入門
PDF
センサーによるデータ計測と異常検知の基本
PDF
Webサイトのアクセスログによるユーザー属性推定
PDF
Google Cloud Dataflowによる データ変換処理入門
PDF
IoTでの機械学習活用イメージと強化学習のご紹介
PDF
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
PDF
SparkMLlibで始めるビッグデータを対象とした機械学習入門
PDF
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
PDF
レコメンドアルゴリズムの基本と周辺知識と実装方法
PDF
担当アイドルに反応してLチカさせる予測モデル開発
PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
適切なクラスタ数を機械的に求める手法の紹介
OAuth 2.0による認可の流れ
MapReduceによるConnected Components(連結成分)の見つけ方
データサイエンスアイドル「小日向美穂」と考える「つながり」
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
GitHubの機能を活用したGitHub Flowによる開発の進め方
HBase CompleteBulkLoadその仕組み&発生した問題
アーリース情報技術株式会社 会社案内 (2019/02/13)
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
SPARQL入門
センサーによるデータ計測と異常検知の基本
Webサイトのアクセスログによるユーザー属性推定
Google Cloud Dataflowによる データ変換処理入門
IoTでの機械学習活用イメージと強化学習のご紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
SparkMLlibで始めるビッグデータを対象とした機械学習入門
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
レコメンドアルゴリズムの基本と周辺知識と実装方法
担当アイドルに反応してLチカさせる予測モデル開発
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)

RDFチェックツール「rdflint」のご紹介

  • 1. takemikamiʼs note ‒ http://takemikami.com/ RDFチェックツール「rdflint」のご紹介 im@sparlのデータセットをコミュニティで運⽤するために Copyright (C) Takeshi Mikami. All rights reserved. 1 三上威(アーリース情報技術株式会社 代表) twitter: @takemikami 2019.4.21アイマスハッカソン2019 in 名古屋 (o・∇・o) 尾張だよ〜
  • 2. takemikamiʼs note ‒ http://takemikami.com/ 副業紹介 • みかみんP (@takemikamas) • フリーランスITエンジニア • データ分析及び機械学習等の応⽤システム開発 • マーケティングデータ分析基盤のシステム開発 • 略歴 • 情報通信ネットワーク・確率論 @ 甲南⼤学理学部応⽤数学科 • EC, CRM等のシステム開発・構築 @ NEC系SIer • 旅⾏系ECサイトのマーケティングデータ分析 @ DeNA • データ分析及び機械学習等の応⽤システム開発 @ アーリース情報技術(株) • 最近扱っている技術領域 • GCP, Hadoop, SparkMLlib, Python, R, TensorFlow/Keras Copyright (C) Takeshi Mikami. All rights reserved. 2 発表者のプロフィールを紹介します P
  • 3. takemikamiʼs note ‒ http://takemikami.com/ 本業紹介 • 担当 • 765AS: 萩原雪歩 • ミリオン: 箱崎星梨花 • デレマス: ⼩⽇向美穂 • IM@Study関連 • 何つながりなのかな?を探る⾃然⾔語処理 〜765PRO LIVE THEATERに通りがかる⼩⽇向美穂〜 @週刊IM@Study 2019年5⽉ • ima@sparqlではじめるR Markdownとgitbookによるレポート⽣成 @2017.9.2 あいますえんじにあ Meetup in 京都 • 担当アイドルに反応してLチカさせる予測モデル開発 @2017.5.17 アイマスエンジニア MeetUp In Tokyo • RDFファイルの⾃動検査ツール https://github.com/imas/rdflint Copyright (C) Takeshi Mikami. All rights reserved. 3 発表者の本業を紹介します
  • 4. takemikamiʼs note ‒ http://takemikami.com/ テーマとアジェンダ • テーマ • RDFチェックツール「rdflint」の使い⽅の紹介と仕組みの概要 • アジェンダ • RDFとトリプル • rdflintで出来ること Copyright (C) Takeshi Mikami. All rights reserved. 4 本資料のテーマ、アジェンダを⽰します
  • 5. takemikamiʼs note ‒ http://takemikami.com/ rdflintとは • 以下のチェックが⾃動化出来る • RDF、Turtle(ttl)ファイルの⽂法チェック • 未定義の主語が、⽬的語として使われていないかのチェック • SPARQLクエリによるカスタムチェック • CIに組み込んでPullRequestによるマスターデータ運⽤に利⽤可能 • Apache Jenaを利⽤して実装されている Copyright (C) Takeshi Mikami. All rights reserved. 5 RDFファイルの⾃動検査ツール リポジトリ → https://github.com/imas/rdflint
  • 6. takemikamiʼs note ‒ http://takemikami.com/ RDFとトリプル Copyright (C) Takeshi Mikami. All rights reserved. 6
  • 7. takemikamiʼs note ‒ http://takemikami.com/ グラフデータベースのデータモデル Copyright (C) Takeshi Mikami. All rights reserved. 7 グラフデータベースとLinked Open Data グラフDBのデータモデルとしてプロパティグラフとトリプルを⽰します プロパティグラフ トリプル 主語(Subject) ⽬的語(Object) 述語(Predicate) 頂点 辺 プロパティ 点、辺、プロパティで構成 点・辺にキー/値ペアのプロパティを持つ →有向グラフ+プロパティ 主語、述語、⽬的語の集まりで構成 →⼀般的な有向グラフ RDFではこちらの データモデルを表現する
  • 8. takemikamiʼs note ‒ http://takemikami.com/ トリプルによるデータの表現 グラフ表現 Copyright (C) Takeshi Mikami. All rights reserved. 8 グラフデータベースとLinked Open Data トリプルによるデータ表現の例を⽰します 宮沢賢治 岩⼿県 花巻市 盛岡市 銀河鉄道の夜 ジョバンニ カムパネルラ 1934年 宮沢賢治 花巻市 盛岡市⽣誕県 ⽣誕市 著作品 名称 岩⼿県 県庁 所在地 所属 所属 名称 名称 名称 銀河鉄道の夜名称 初出年 登場⼈物 登場⼈物 リソースのURI リテラル 凡例: 宮沢賢治と 銀河鉄道の夜に関する データを例として
  • 9. takemikamiʼs note ‒ http://takemikami.com/ トリプルによるデータの表現 関係とリテラル • リソース間の関係を表現 • リソースに関連する値(リテラル)を表現 Copyright (C) Takeshi Mikami. All rights reserved. 9 グラフデータベースとLinked Open Data トリプルによるデータ表現の例を⽰します 宮沢賢治 銀河鉄道の夜 1934年 著作品 銀河鉄道の夜 主語 述語 ⽬的語 初出年 主語 述語 ⽬的語 これらの集合が前スライドで⽰したようなグラフ表現になる リソースのURI リテラル 凡例:
  • 10. takemikamiʼs note ‒ http://takemikami.com/ Resource Description Framework (RDF) • 主語・述語・⽬的語かのセット(=トリプル)を記述できる • 必要に応じて、RDFスキーマで語彙を拡張できる • 語彙には、述語に使⽤されるものや、リソースのクラスを⽰すものがある • SPARQL(SPARQL Protocol and RDF Query Language)などのクエリ⾔ 語で問い合わせが出来る Copyright (C) Takeshi Mikami. All rights reserved. 10 グラフデータベースとLinked Open Data Resource Description Framework(RDF)について説明します ウェブ上のリソースの メタデータを記述するための枠組み
  • 11. takemikamiʼs note ‒ http://takemikami.com/ RDFファイルの例 Copyright (C) Takeshi Mikami. All rights reserved. 11 箱崎星梨花に関するRDFの抜粋と、グラフ表現を⽰します <rdf:Description rdf:about="detail/Hakozaki_Serika"> <imas:nameKana xml:lang="ja">はこざきせりか</imas:nameKana> <schema:name xml:lang="ja">箱崎星梨花</schema:name> <foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">13</foaf:age> <rdf:type rdf:resource="https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol"/> <imas:cv rdf:resource="http://ja.dbpedia.org/resource/⿇倉もも"/> </rdf:Description> detail/Hakozaki_Serika http://ja.dbpedia.org/resource/⿇倉もも はこざきせりか imasrdf/URIs/imas-schema.ttl#Idol 箱崎星梨花 13 imas:nameKana imas:name foaf:age rdf:type imas:cv
  • 12. takemikamiʼs note ‒ http://takemikami.com/ rdflintで出来ること Copyright (C) Takeshi Mikami. All rights reserved. 12
  • 13. takemikamiʼs note ‒ http://takemikami.com/ rdflintで出来ること① 〜RDFファイルとして正しいか〜 Copyright (C) Takeshi Mikami. All rights reserved. 13 rdflintで出来ること: RDFファイルとして正しいかのチェック のイメージを⽰します <rdf:Description rdf:about="detail/Hakozaki_Serika"> <imas:nameKana xml:lang="ja">はこざきせりか</imas:nameKana> <schema:name xml:lang="ja">箱崎星梨花</schema:name> <foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">13</foaf:age> <rdf:type rdf:resource="https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol"/> <imas:cv rdf:resource="http://ja.dbpedia.org/resource/⿇倉もも"/> </rdf:Description> detail/Hakozaki_Serika http://ja.dbpedia.org/resource/⿇倉もも はこざきせりか imasrdf/URIs/imas-schema.ttl#Idol 箱崎星梨花 13 imas:nameKana imas:name foaf:age rdf:type imas:cv RDFファイルとして 正しいかチェック
  • 14. takemikamiʼs note ‒ http://takemikami.com/ rdflintで出来ること② 〜主語の存在チェック〜 Copyright (C) Takeshi Mikami. All rights reserved. 14 rdflintで出来ること: 主語の存在チェック のイメージを⽰します <rdf:Description rdf:about="detail/Hakozaki_Serika"> <imas:nameKana xml:lang="ja">はこざきせりか</imas:nameKana> <schema:name xml:lang="ja">箱崎星梨花</schema:name> <foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">13</foaf:age> <rdf:type rdf:resource="https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol"/> <imas:cv rdf:resource="http://ja.dbpedia.org/resource/⿇倉もも"/> </rdf:Description> detail/Hakozaki_Serika http://ja.dbpedia.org/resource/⿇倉もも はこざきせりか imasrdf/URIs/imas-schema.ttl#Idol 箱崎星梨花 13 imas:nameKana imas:name foaf:age rdf:type imas:cv im@sparqlのデータセットで 管理されている主語の 存在チェック im@sparqlのデータセットで 管理されている主語の 存在チェック im@sparqlのデータセットで 管理されている主語の 存在チェック im@sparqlのデータセットで 管理されている主語の 存在チェック
  • 15. takemikamiʼs note ‒ http://takemikami.com/ rdflintで出来ること③ 〜SPARQLクエリによるチェック〜 Copyright (C) Takeshi Mikami. All rights reserved. 15 rdflintで出来ること: SPARQLクエリによるカスタムチェック のイメージを⽰します PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?s ?o WHERE { ?s rdf:type ?o . FILTER NOT EXISTS { ?s rdf:type <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol> } } チェック⽤SPARQLクエリ rdf:typeが「imasrdf/URIs/imas-schema.ttl#Idol」以外 の主語・述語を返却するクエリ 対象ファイル: RDFs/765AS.rdf 765ASのメンバを定義するファイル やりたいこと: 765ASのアイドル定義⽤ファイルに アイドル以外が定義されていないかチェックしたい
  • 16. takemikamiʼs note ‒ http://takemikami.com/ rdflintで出来ること③ 〜SPARQLクエリによるチェック〜 Copyright (C) Takeshi Mikami. All rights reserved. 16 rdflintで出来ること: SPARQLクエリによるカスタムチェック のイメージを⽰します while(rs.hasNext()) { log.warn("アイドル以外の定義があります " + rs.next()) } クエリ結果を警告として出⼒するスクリプト(groovy) RDFs/765AS.rdf warn アイドル定義⽤ファイル: アイドル以外の定義があります ( ?o = <https://schema.org/MusicRecording> ) ( ?s = <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/%E9%AD%94%E6%B3%95%E3%82%92%E3%81%8B%E3% 81%91%E3%81%A6%21%20%28M%40STER%20VERSION%29_01> ) チェック結果の表⽰ ※意図的に誤ったデータを追加して確認した結果です。
  • 17. takemikamiʼs note ‒ http://takemikami.com/ 検査の実⾏イメージ Copyright (C) Takeshi Mikami. All rights reserved. 17 検査の実⾏イメージを⽰します $ wget https://jitpack.io/com/github/imas/rdflint/0.0.4/rdflint-0.0.4-all.jar rdflintのダウンロード $ java -jar rdflint-0.0.4-all.jar -config .circleci/rdflint-config.yml RDFs/Event.rdf warn Undefined URI: https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Hakozaki_serika (Triple: https://sparql.crssnky.xyz/imasrdf/RDFs/detail/765Caravan_2 - http://schema.org/actor - https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Hakozaki_serika) rdflint検査の実⾏ 対象ファイル エラー理由 ※Hakozaki_serika → Hakozaki_Serika (⼤⽂字・⼩⽂字の誤り)
  • 18. takemikamiʼs note ‒ http://takemikami.com/ SPARQLクエリによるチェックの設定イメージ Copyright (C) Takeshi Mikami. All rights reserved. 18 SPARQLクエリによるチェックの設定イメージを⽰します baseUri: https://sparql.crssnky.xyz/imasrdf/ rules: - name: アイドル定義⽤ファイル target: "RDFs/765AS.rdf" query: | PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?s ?o WHERE { ?s rdf:type ?o . FILTER NOT EXISTS { ?s rdf:type <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol> } } valid: | while(rs.hasNext()) { log.warn("アイドル以外の定義があります " + rs.next()) } 設定ファイル: .circleci/rdflint-config.yml
  • 19. takemikamiʼs note ‒ http://takemikami.com/ インタラクティブモード • コマンドラインでローカルにあるRDFファイルにSPARQL実⾏が出来る Copyright (C) Takeshi Mikami. All rights reserved. 19 インタラクティブモードを紹介します $ wget https://jitpack.io/com/github/imas/rdflint/0.0.4/rdflint-0.0.4-all.jar rdflintのダウンロード $ java -jar rdflint-0.0.4-all.jar -i -config .circleci/rdflint-config.yml sparql > rdflintインタラクティブモードの開始
  • 20. takemikamiʼs note ‒ http://takemikami.com/ インタラクティブモードの実⾏イメージ Copyright (C) Takeshi Mikami. All rights reserved. 20 インタラクティブモードの実⾏イメージを⽰す $ java -jar rdflint-0.0.4-all.jar -i -config .circleci/rdflint-config.yml sparql > PREFIX schema: <http://schema.org/> > PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> > PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#> > SELECT ?星梨花の主語 > WHERE { > ?星梨花の主語 rdf:type imas:Idol; > schema:name ?アイドル名. > filter(contains(?アイドル名,"箱崎星梨花")) > } > -------------------------------------------------------------------- | 星梨花の主語 | ==================================================================== | <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Hakozaki_Serika> | -------------------------------------------------------------------- rdflintインタラクティブモードでのクエリ実⾏