Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RDF/OWLで始める人生イベントソーシング
Search
acomagu
February 22, 2019
Technology
0
2.7k
RDF/OWLで始める人生イベントソーシング
RDF/OWLの便利さについて話しました。
acomagu
February 22, 2019
Tweet
Share
More Decks by acomagu
See All by acomagu
Stripe SSoT をするべきか否か
acomagu
0
47
JP_Stripes: リコンサイル(突合処理)のテスト
acomagu
0
83
「境界付けられたコンテキスト間の関係」についてもっと語ろう
acomagu
0
80
地方 MaaS 事例: アプリの進化に伴って変化してきた Stripe 利用方法
acomagu
0
270
Stripe リコンサイルの勘所
acomagu
0
450
CDK 一発で全てのエラーログを Slack に流す
acomagu
0
2.1k
AWS CDK を支える Constructs について
acomagu
0
170
DDDとは結局何なのか
acomagu
0
300
API Gateway HTTP API について
acomagu
0
140
Other Decks in Technology
See All in Technology
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
2
210
生成AIで小説を書くためにプロンプトの制約や原則について学ぶ / prompt-engineering-for-ai-fiction
nwiizo
4
1.9k
~宇宙最速~2025年AWS Summit レポート
satodesu
1
1.8k
Wasm元年
askua
0
140
Delegating the chores of authenticating users to Keycloak
ahus1
0
120
AIエージェント最前線! Amazon Bedrock、Amazon Q、そしてMCPを使いこなそう
minorun365
PRO
15
5.2k
GeminiとNotebookLMによる金融実務の業務革新
abenben
0
230
Lambda Web Adapterについて自分なりに理解してみた
smt7174
3
110
Welcome to the LLM Club
koic
0
170
生成AI時代 文字コードを学ぶ意義を見出せるか?
hrsued
1
470
Tech-Verse 2025 Keynote
lycorptech_jp
PRO
0
120
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
1
160
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Statistics for Hackers
jakevdp
799
220k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
GitHub's CSS Performance
jonrohan
1031
460k
Being A Developer After 40
akosma
90
590k
How GitHub (no longer) Works
holman
314
140k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
KATA
mclloyd
29
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.4k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
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