$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RDF/OWLで始める人生イベントソーシング
Search
acomagu
February 22, 2019
Technology
0
2.8k
RDF/OWLで始める人生イベントソーシング
RDF/OWLの便利さについて話しました。
acomagu
February 22, 2019
Tweet
Share
More Decks by acomagu
See All by acomagu
Payment Records API を使って地域通貨を Stripe Dashboard に統合してみた
acomagu
0
29
Restate x Stripe: 安心して眠れる決済システムを目指して
acomagu
0
2
Stripe SSoT をするべきか否か
acomagu
0
55
JP_Stripes: リコンサイル(突合処理)のテスト
acomagu
0
100
「境界付けられたコンテキスト間の関係」についてもっと語ろう
acomagu
0
99
地方 MaaS 事例: アプリの進化に伴って変化してきた Stripe 利用方法
acomagu
0
360
Stripe リコンサイルの勘所
acomagu
0
500
CDK 一発で全てのエラーログを Slack に流す
acomagu
0
2.2k
AWS CDK を支える Constructs について
acomagu
0
180
Other Decks in Technology
See All in Technology
その意思決定、まだ続けるんですか? ~痛みを超えて未来を作る、AI時代の撤退とピボットの技術~
applism118
45
25k
なぜフロントエンド技術を追うのか?なぜカンファレンスに参加するのか?
sakito
4
1.3k
Pandocでmd→pptx便利すぎワロタwww
meow_noisy
2
1.1k
AI開発の定着を推進するために揃えるべき前提
suguruooki
1
450
AI駆動開発2025年振り返りとTips集
knr109
1
140
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
46k
Claude Code はじめてガイド -1時間で学べるAI駆動開発の基本と実践-
oikon48
22
13k
『星の世界の地図の話: Google Sky MapをAI Agentでよみがえらせる』 - Google Developers DevFest Tokyo 2025
taniiicom
0
440
Kill the Vibe?Architecture in the age of AI
stoth
1
130
『ソフトウェア』で『リアル』を動かす:クレーンゲームからデータ基盤までの統一アーキテクチャ / アーキテクチャConference 2025
genda
0
2.2k
事業状況で変化する最適解。進化し続ける開発組織とアーキテクチャ
caddi_eng
1
9.2k
[続・営業向け 誰でも話せるOCI セールストーク] AWSよりOCIの優位性が分からない編(2025年11月21日開催)
oracle4engineer
PRO
1
160
Featured
See All Featured
Code Review Best Practice
trishagee
73
19k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Navigating Team Friction
lara
190
16k
Music & Morning Musume
bryan
46
7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Building Adaptive Systems
keathley
44
2.8k
Docker and Python
trallard
46
3.7k
Why Our Code Smells
bkeepers
PRO
340
57k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Rails Girls Zürich Keynote
gr2m
95
14k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
It's Worth the Effort
3n
187
29k
Transcript
RDF/OWLで始める 人生イベントソーシング @acomagu
自己紹介 - 伊藤勇希 - 福島県伊達市出身 - 会津大学学部3年
自己紹介 - 伊藤勇希 - 音ゲー(CHUNITHM) - 書道 - 合唱 -
TRPG - キャンプ - Plan9 - VTuber(にじさんじ) - ポーカー
自己紹介 - 好きな言語: - Golang - Typescript - 型がある言語
自己紹介 - 好きなエディタ - (Neo)Vim
RDF/OWLで 人生イベントソーシング
今回の目的 RDF/OWLって面白いぞ! ということを伝えたい
研究でやってる わけじゃないです!!!
RDF/OWLで 人生イベントソーシング
イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!!
イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!! 出来事をどんどん 保存していく!!!
イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!! 人生の 出来事をどんどん 保存していく!!!
RDFとは何か?
RDFとは何か? ↓ [ - - ] 主語 述語 目的語
RDFとは何か? ↓ [ - - ] Subject Predicate Object
RDFとは何か? ↓ [ - - ] 1 2 3
RDFとは何か? ↓ [ - - ] Triple
[ - - ] Triple [ - - ] Triple
[ - - ] Triple [ - - ] Triple [ - - ] Triple
<#Yuki_Ito> foaf:age 22.
S <#Yuki_Ito> foaf:age 22. P O
S <#Yuki_Ito> foaf:age 22. P O 「伊藤勇希の年齢は22才である」
<#Yuki_Ito> a foaf:Person. <#Yuki_Ito> foaf:age 22. <#Yuki_Ito> vcard:title “王”.
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
RDFとは何か? ↓ [ - - ] Subject Predicate Object
RDFとは何か? ↓ [ - - ] URI URI URI
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
<https://acomagu.me#Yuki_Ito> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>; <http://xmlns.com/foaf/0.1/age> 22; <http://www.w3.org/2006/vcard/ns#title> “王”.
<#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.
@prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix vcard: <http://www.w3.org/.../ns#>. @base <https://acomagu.me>. <#Yuki_Ito> a
foaf:Person; foaf:age 22; vcard:title “王”.
Webで公開するために生まれた データ記述言語
@prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix vcard: <http://www.w3.org/.../ns#>. @base <https://acomagu.me>. <#Yuki_Ito> a
foaf:Person; foaf:age 22; vcard:title “王”.
None
なぜこういう仕組みが必要なのか?
JSONより厳密で JSON Schemaよりゆるい「型」が 欲しかった
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型) どんな意味の値なのか(抽象型)
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型) どんな意味の値なのか(抽象型): RDF(Predicate)
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型): RDF Schema どんな意味の値なのか(抽象型): RDF(Predicate)
None
(ここで言う)型とは どんな形式の値が入るか(プリミティブ型): RDF Schema どんな意味の値なのか(抽象型): RDF(Predicate)
RDFは何が「ゆるイイ」のか? 1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ
1.「誰でも語彙を公開でき、誰でも使える」
@prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix vcard: <http://www.w3.org/.../ns#>. @base <https://acomagu.me>. <#Yuki_Ito> a
foaf:Person; foaf:age 22; vcard:title “王”.
どの語彙を使うか? - IETFやW3Cなどによって標準化されたものを使用する - FOAF, Dublin Core, schema.org, VCard... -
標準化はされていないが公開されているものを使う - 図書分類、位置情報、感情を表現するもの ... 無数にある - 自分で作る
ontology.acomagu.me/ccs
2.「足りない語彙があれば付け足せる」
例: やりたいこと - 伊藤勇希の「名前」「年齢」「職業」の3つの情報を持っておきた い
{ “name”: “Yuki Ito”, “age”: 22 } { “type”: “object”,
“properties”: { “name”: { … }, “age”: { … } } }
{ “name”: “Yuki Ito”, “age”: 22, “title”: “神” } {
“type”: “object”, “properties”: { “name”: { … }, “age”: { … } } } ERROR!!
[] 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
[] 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!!
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 スキーマを見比べてみる
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 スキーマを見比べてみる
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では「このクラスにはこのプロパティがあるべき」という定義はできない
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、ゆるい...!
[] a foaf:Person foaf:name “Yuki Ito” foaf:age 22 でも...
[] a foaf:Person foaf:name “Yuki Ito” vcard:age 22 ERROR!! でも...
3.「プログラムが認識できないものがあっても、人間 の手で容易に対応させられる」
OWLとは
OWLとは RDF/RDFSの拡張
[] a foaf:Person foaf:name “Yuki Ito” vcard:age 22 ERROR!! でも...
[] a foaf:Person foaf:name “Yuki Ito” vcard:agefoaf:age 22 ? でも...
[] 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 ...
[] a foaf:Person; foaf:name “Yuki Ito”; vcard:age 22. でも...
[] a foaf:Person; foaf:name “Yuki Ito”; vcard:age 22. vcard:age owl:equivalentProperty
foaf:age. PASS!! でも...
なぜこんなことができるか? - OWLでは、「別々の名前の個体(クラスやプロパティ、リソース など)が別々のものである(単一名仮定)」という定義が存在しな い
None
1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ ↓
1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ ↓ 全く異なるアプリケーション間での データの交換がしやすい
どうやって人生の記録を 保存していくか?
1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む
なんとかしてRDFデータを作る github.com/acomagu/twrdf
なんとかしてRDFデータを作る - Evernoteなどのメモを全てRDF化しておく - Slackへの投稿をRDF化するようにする - etc. (結構シェルスクリプトでできる)
とりあえずTriplestoreに突っ込む - GraphDBがおすすめ なんで? - SPARQLが使えるとすごい便利!!!
1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む
1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む 3. 何かに書き出して使う!
何かに書き出して使う! - 自分の見やすい形式にすればいい - HTMLで公開する? - Evernoteに書き出す?
tblog.acomagu.me
人生をRDFにすると良いところ (Evernoteに比べて) - あとからデータを楽に付け足せる - グラフ構造で俯瞰したり、位置情報のマッピングなどのツール がすでにある - SPARQLで必要な情報をすぐに取り出せる -
簡単に別の形式に変換できる
まとめ
RDF/OWLは 「異なるアプリケーション間でデータを交換 する」ことを目的に作られた
ゆるい型付きのデータ記述言語である
便利に使って 人生を豊かにしよう!!
Thanks! Follow Me! @acomagu