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