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.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
48
Restate x Stripe: 安心して眠れる決済システムを目指して
acomagu
0
9
Stripe SSoT をするべきか否か
acomagu
0
65
JP_Stripes: リコンサイル(突合処理)のテスト
acomagu
0
110
「境界付けられたコンテキスト間の関係」についてもっと語ろう
acomagu
0
130
地方 MaaS 事例: アプリの進化に伴って変化してきた Stripe 利用方法
acomagu
0
410
Stripe リコンサイルの勘所
acomagu
0
510
CDK 一発で全てのエラーログを Slack に流す
acomagu
0
2.2k
AWS CDK を支える Constructs について
acomagu
0
180
Other Decks in Technology
See All in Technology
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
Claude Code for NOT Programming
kawaguti
PRO
1
100
20260204_Midosuji_Tech
takuyay0ne
1
160
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
500
旅先で iPad + Neovim で iOS 開発・執筆した話
zozotech
PRO
0
100
Red Hat OpenStack Services on OpenShift
tamemiya
0
130
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
290
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
220
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
200
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1k
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
120
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
220
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
1
500
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
180
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
The untapped power of vector embeddings
frankvandijk
1
1.6k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Automating Front-end Workflow
addyosmani
1371
200k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Embracing the Ebb and Flow
colly
88
5k
The Curse of the Amulet
leimatthew05
1
8.7k
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