RDF/OWLで始める人生イベントソーシング
by
acomagu
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
RDF/OWLで始める 人生イベントソーシング @acomagu
Slide 2
Slide 2 text
自己紹介 - 伊藤勇希 - 福島県伊達市出身 - 会津大学学部3年
Slide 3
Slide 3 text
自己紹介 - 伊藤勇希 - 音ゲー(CHUNITHM) - 書道 - 合唱 - TRPG - キャンプ - Plan9 - VTuber(にじさんじ) - ポーカー
Slide 4
Slide 4 text
自己紹介 - 好きな言語: - Golang - Typescript - 型がある言語
Slide 5
Slide 5 text
自己紹介 - 好きなエディタ - (Neo)Vim
Slide 6
Slide 6 text
RDF/OWLで 人生イベントソーシング
Slide 7
Slide 7 text
今回の目的 RDF/OWLって面白いぞ! ということを伝えたい
Slide 8
Slide 8 text
研究でやってる わけじゃないです!!!
Slide 9
Slide 9 text
RDF/OWLで 人生イベントソーシング
Slide 10
Slide 10 text
イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!!
Slide 11
Slide 11 text
イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!! 出来事をどんどん 保存していく!!!
Slide 12
Slide 12 text
イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!! 人生の 出来事をどんどん 保存していく!!!
Slide 13
Slide 13 text
RDFとは何か?
Slide 14
Slide 14 text
RDFとは何か? ↓ [ - - ] 主語 述語 目的語
Slide 15
Slide 15 text
RDFとは何か? ↓ [ - - ] Subject Predicate Object
Slide 16
Slide 16 text
RDFとは何か? ↓ [ - - ] 1 2 3
Slide 17
Slide 17 text
RDFとは何か? ↓ [ - - ] Triple
Slide 18
Slide 18 text
[ - - ] Triple [ - - ] Triple [ - - ] Triple [ - - ] Triple [ - - ] Triple
Slide 19
Slide 19 text
<#Yuki_Ito> foaf:age 22.
Slide 20
Slide 20 text
S <#Yuki_Ito> foaf:age 22. P O
Slide 21
Slide 21 text
S <#Yuki_Ito> foaf:age 22. P O 「伊藤勇希の年齢は22才である」
Slide 22
Slide 22 text
<#Yuki_Ito> a foaf:Person. <#Yuki_Ito> foaf:age 22. <#Yuki_Ito> vcard:title “王”.
Slide 23
Slide 23 text
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
Slide 24
Slide 24 text
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
Slide 25
Slide 25 text
RDFとは何か? ↓ [ - - ] Subject Predicate Object
Slide 26
Slide 26 text
RDFとは何か? ↓ [ - - ] URI URI URI
Slide 27
Slide 27 text
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
Slide 28
Slide 28 text
; 22; “王”.
Slide 29
Slide 29 text
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
Slide 30
Slide 30 text
@prefix foaf: . @prefix vcard: . @base . <#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
Slide 31
Slide 31 text
Webで公開するために生まれた データ記述言語
Slide 32
Slide 32 text
@prefix foaf: . @prefix vcard: . @base . <#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
なぜこういう仕組みが必要なのか?
Slide 35
Slide 35 text
JSONより厳密で JSON Schemaよりゆるい「型」が 欲しかった
Slide 36
Slide 36 text
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型) どんな意味の値なのか(抽象型)
Slide 37
Slide 37 text
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型) どんな意味の値なのか(抽象型): RDF(Predicate)
Slide 38
Slide 38 text
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型): RDF Schema どんな意味の値なのか(抽象型): RDF(Predicate)
Slide 39
Slide 39 text
No content
Slide 40
Slide 40 text
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型): RDF Schema どんな意味の値なのか(抽象型): RDF(Predicate)
Slide 41
Slide 41 text
RDFは何が「ゆるイイ」のか? 1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ
Slide 42
Slide 42 text
1.「誰でも語彙を公開でき、誰でも使える」
Slide 43
Slide 43 text
@prefix foaf: . @prefix vcard: . @base . <#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
Slide 44
Slide 44 text
どの語彙を使うか? - IETFやW3Cなどによって標準化されたものを使用する - FOAF, Dublin Core, schema.org, VCard... - 標準化はされていないが公開されているものを使う - 図書分類、位置情報、感情を表現するもの ... 無数にある - 自分で作る
Slide 45
Slide 45 text
ontology.acomagu.me/ccs
Slide 46
Slide 46 text
2.「足りない語彙があれば付け足せる」
Slide 47
Slide 47 text
例: やりたいこと - 伊藤勇希の「名前」「年齢」「職業」の3つの情報を持っておきた い
Slide 48
Slide 48 text
{ “name”: “Yuki Ito”, “age”: 22 } { “type”: “object”, “properties”: { “name”: { … }, “age”: { … } } }
Slide 49
Slide 49 text
{ “name”: “Yuki Ito”, “age”: 22, “title”: “神” } { “type”: “object”, “properties”: { “name”: { … }, “age”: { … } } } ERROR!!
Slide 50
Slide 50 text
[] a foaf:Person foaf:name “Yuki Ito” foaf:age 22 foaf:Person a rdfs:Class foaf:name a rdfs:Property rdfs:domain foaf:Person foaf:age a rdfs:Property rdfs:domain foaf:Person
Slide 51
Slide 51 text
[] a foaf:Person foaf:name “Yuki Ito” foaf:age 22 vcard:title “神” foaf:Person a rdfs:Class foaf:name a rdfs:Property rdfs:domain foaf:Person foaf:age a rdfs:Property rdfs:domain foaf:Person PASS!!
Slide 52
Slide 52 text
JSON Schema { “type”: “object”, “properties”: { “name”: { … }, “age”: { … } } } RDF Schema foaf:Person a rdfs:Class foaf:name a rdfs:Property rdfs:domain foaf:Person foaf:age a rdfs:Property rdfs:domain foaf:Person スキーマを見比べてみる
Slide 53
Slide 53 text
JSON Schema { “type”: “object”, “properties”: { “name”: { … }, “age”: { … } } } RDF Schema foaf:Person a rdfs:Class foaf:name a rdfs:Property rdfs:domain foaf:Person foaf:age a rdfs:Property rdfs:domain foaf:Person スキーマを見比べてみる
Slide 54
Slide 54 text
JSON Schema { “type”: “object”, “properties”: { “name”: { … }, “age”: { … } } } RDF Schema foaf:Person a rdfs:Class foaf:name a rdfs:Property rdfs:domain foaf:Person foaf:age a rdfs:Property rdfs:domain foaf:Person スキーマを見比べてみる RDFでは「このクラスにはこのプロパティがあるべき」という定義はできない
Slide 55
Slide 55 text
JSON Schema { “type”: “object”, “properties”: { “name”: { … }, “age”: { … } } } RDF Schema foaf:Person a rdfs:Class foaf:name a rdfs:Property rdfs:domain foaf:Person foaf:age a rdfs:Property rdfs:domain foaf:Person スキーマを見比べてみる RDF、ゆるい...!
Slide 56
Slide 56 text
[] a foaf:Person foaf:name “Yuki Ito” foaf:age 22 でも...
Slide 57
Slide 57 text
[] a foaf:Person foaf:name “Yuki Ito” vcard:age 22 ERROR!! でも...
Slide 58
Slide 58 text
3.「プログラムが認識できないものがあっても、人間 の手で容易に対応させられる」
Slide 59
Slide 59 text
OWLとは
Slide 60
Slide 60 text
OWLとは RDF/RDFSの拡張
Slide 61
Slide 61 text
[] a foaf:Person foaf:name “Yuki Ito” vcard:age 22 ERROR!! でも...
Slide 62
Slide 62 text
[] a foaf:Person foaf:name “Yuki Ito” vcard:agefoaf:age 22 ? でも...
Slide 63
Slide 63 text
[] a foaf:Person foaf:name “Yuki Ito” vcard:age 22 [] a foaf:Person foaf:name “黄前久美子” vcard:age 22 [] a foaf:Person foaf:name “しまりん” vcard:age 22 ...
Slide 64
Slide 64 text
[] a foaf:Person; foaf:name “Yuki Ito”; vcard:age 22. でも...
Slide 65
Slide 65 text
[] a foaf:Person; foaf:name “Yuki Ito”; vcard:age 22. vcard:age owl:equivalentProperty foaf:age. PASS!! でも...
Slide 66
Slide 66 text
なぜこんなことができるか? - OWLでは、「別々の名前の個体(クラスやプロパティ、リソース など)が別々のものである(単一名仮定)」という定義が存在しな い
Slide 67
Slide 67 text
No content
Slide 68
Slide 68 text
1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ ↓
Slide 69
Slide 69 text
1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ ↓ 全く異なるアプリケーション間での データの交換がしやすい
Slide 70
Slide 70 text
どうやって人生の記録を 保存していくか?
Slide 71
Slide 71 text
1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む
Slide 72
Slide 72 text
なんとかしてRDFデータを作る github.com/acomagu/twrdf
Slide 73
Slide 73 text
なんとかしてRDFデータを作る - Evernoteなどのメモを全てRDF化しておく - Slackへの投稿をRDF化するようにする - etc. (結構シェルスクリプトでできる)
Slide 74
Slide 74 text
とりあえずTriplestoreに突っ込む - GraphDBがおすすめ なんで? - SPARQLが使えるとすごい便利!!!
Slide 75
Slide 75 text
1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む
Slide 76
Slide 76 text
1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む 3. 何かに書き出して使う!
Slide 77
Slide 77 text
何かに書き出して使う! - 自分の見やすい形式にすればいい - HTMLで公開する? - Evernoteに書き出す?
Slide 78
Slide 78 text
tblog.acomagu.me
Slide 79
Slide 79 text
人生をRDFにすると良いところ (Evernoteに比べて) - あとからデータを楽に付け足せる - グラフ構造で俯瞰したり、位置情報のマッピングなどのツール がすでにある - SPARQLで必要な情報をすぐに取り出せる - 簡単に別の形式に変換できる
Slide 80
Slide 80 text
まとめ
Slide 81
Slide 81 text
RDF/OWLは 「異なるアプリケーション間でデータを交換 する」ことを目的に作られた
Slide 82
Slide 82 text
ゆるい型付きのデータ記述言語である
Slide 83
Slide 83 text
便利に使って 人生を豊かにしよう!!
Slide 84
Slide 84 text
Thanks! Follow Me! @acomagu