Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RDF/OWLで始める人生イベントソーシング

8843d0fb02a3688513a890bd23a5fa3c?s=47 acomagu
February 22, 2019

 RDF/OWLで始める人生イベントソーシング

RDF/OWLの便利さについて話しました。

8843d0fb02a3688513a890bd23a5fa3c?s=128

acomagu

February 22, 2019
Tweet

Transcript

  1. RDF/OWLで始める 人生イベントソーシング @acomagu

  2. 自己紹介 - 伊藤勇希 - 福島県伊達市出身 - 会津大学学部3年

  3. 自己紹介 - 伊藤勇希 - 音ゲー(CHUNITHM) - 書道 - 合唱 -

    TRPG - キャンプ - Plan9 - VTuber(にじさんじ) - ポーカー
  4. 自己紹介 - 好きな言語: - Golang - Typescript - 型がある言語

  5. 自己紹介 - 好きなエディタ - (Neo)Vim

  6. RDF/OWLで 人生イベントソーシング

  7. 今回の目的 RDF/OWLって面白いぞ! ということを伝えたい

  8. 研究でやってる わけじゃないです!!!

  9. RDF/OWLで 人生イベントソーシング

  10. イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!!

  11. イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!! 出来事をどんどん 保存していく!!!

  12. イベントソーシングとは? 絶対にUPDATEしないぞ!! 絶対にDELETEしないぞ!! 絶対にINSERTしかしないぞ!!! 人生の 出来事をどんどん 保存していく!!!

  13. RDFとは何か?

  14. RDFとは何か? ↓ [ - - ] 主語 述語 目的語

  15. RDFとは何か? ↓ [ - - ] Subject Predicate Object

  16. RDFとは何か? ↓ [ - - ] 1 2 3

  17. RDFとは何か? ↓ [ - - ] Triple

  18. [ - - ] Triple [ - - ] Triple

    [ - - ] Triple [ - - ] Triple [ - - ] Triple
  19. <#Yuki_Ito> foaf:age 22.

  20. S <#Yuki_Ito> foaf:age 22. P O

  21. S <#Yuki_Ito> foaf:age 22. P O 「伊藤勇希の年齢は22才である」

  22. <#Yuki_Ito> a foaf:Person. <#Yuki_Ito> foaf:age 22. <#Yuki_Ito> vcard:title “王”.

  23. <#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.

  24. <#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.

  25. RDFとは何か? ↓ [ - - ] Subject Predicate Object

  26. RDFとは何か? ↓ [ - - ] URI URI URI

  27. <#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.

  28. <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> “王”.

  29. <#Yuki_Ito> a foaf:Person; foaf:age 22; vcard:title “王”.

  30. @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 “王”.
  31. Webで公開するために生まれた データ記述言語

  32. @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 “王”.
  33. None
  34. なぜこういう仕組みが必要なのか?

  35. JSONより厳密で JSON Schemaよりゆるい「型」が 欲しかった

  36. (ここで言う)型とは どんな形式の値が入るか(プリミティブ型) どんな意味の値なのか(抽象型)

  37. (ここで言う)型とは どんな形式の値が入るか(プリミティブ型) どんな意味の値なのか(抽象型): RDF(Predicate)

  38. (ここで言う)型とは どんな形式の値が入るか(プリミティブ型): RDF Schema どんな意味の値なのか(抽象型): RDF(Predicate)

  39. None
  40. (ここで言う)型とは どんな形式の値が入るか(プリミティブ型): RDF Schema どんな意味の値なのか(抽象型): RDF(Predicate)

  41. RDFは何が「ゆるイイ」のか? 1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ

  42. 1.「誰でも語彙を公開でき、誰でも使える」

  43. @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 “王”.
  44. どの語彙を使うか? - IETFやW3Cなどによって標準化されたものを使用する - FOAF, Dublin Core, schema.org, VCard... -

    標準化はされていないが公開されているものを使う - 図書分類、位置情報、感情を表現するもの ... 無数にある - 自分で作る
  45. ontology.acomagu.me/ccs

  46. 2.「足りない語彙があれば付け足せる」

  47. 例: やりたいこと - 伊藤勇希の「名前」「年齢」「職業」の3つの情報を持っておきた い

  48. { “name”: “Yuki Ito”, “age”: 22 } { “type”: “object”,

    “properties”: { “name”: { … }, “age”: { … } } }
  49. { “name”: “Yuki Ito”, “age”: 22, “title”: “神” } {

    “type”: “object”, “properties”: { “name”: { … }, “age”: { … } } } ERROR!!
  50. [] 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
  51. [] 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!!
  52. 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 スキーマを見比べてみる
  53. 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 スキーマを見比べてみる
  54. 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では「このクラスにはこのプロパティがあるべき」という定義はできない
  55. 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、ゆるい...!
  56. [] a foaf:Person foaf:name “Yuki Ito” foaf:age 22 でも...

  57. [] a foaf:Person foaf:name “Yuki Ito” vcard:age 22 ERROR!! でも...

  58. 3.「プログラムが認識できないものがあっても、人間 の手で容易に対応させられる」

  59. OWLとは

  60. OWLとは RDF/RDFSの拡張

  61. [] a foaf:Person foaf:name “Yuki Ito” vcard:age 22 ERROR!! でも...

  62. [] a foaf:Person foaf:name “Yuki Ito” vcard:agefoaf:age 22 ? でも...

  63. [] 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 ...
  64. [] a foaf:Person; foaf:name “Yuki Ito”; vcard:age 22. でも...

  65. [] a foaf:Person; foaf:name “Yuki Ito”; vcard:age 22. vcard:age owl:equivalentProperty

    foaf:age. PASS!! でも...
  66. なぜこんなことができるか? - OWLでは、「別々の名前の個体(クラスやプロパティ、リソース など)が別々のものである(単一名仮定)」という定義が存在しな い

  67. None
  68. 1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ ↓

  69. 1. 誰でもWebで語彙(Predicateやクラス)を公開でき、誰でも使えるところ 2. 足りない語彙があれば「付け足せる」ところ 3. プログラムが認識できないものがあっても、人間の手で容易に対応させられるとこ ろ ↓ 全く異なるアプリケーション間での データの交換がしやすい

  70. どうやって人生の記録を 保存していくか?

  71. 1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む

  72. なんとかしてRDFデータを作る github.com/acomagu/twrdf

  73. なんとかしてRDFデータを作る - Evernoteなどのメモを全てRDF化しておく - Slackへの投稿をRDF化するようにする - etc. (結構シェルスクリプトでできる)

  74. とりあえずTriplestoreに突っ込む - GraphDBがおすすめ なんで? - SPARQLが使えるとすごい便利!!!

  75. 1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む

  76. 1. なんとかしてRDFデータを作る 2. とりあえずTriplestoreに突っ込む 3. 何かに書き出して使う!

  77. 何かに書き出して使う! - 自分の見やすい形式にすればいい - HTMLで公開する? - Evernoteに書き出す?

  78. tblog.acomagu.me

  79. 人生をRDFにすると良いところ (Evernoteに比べて) - あとからデータを楽に付け足せる - グラフ構造で俯瞰したり、位置情報のマッピングなどのツール がすでにある - SPARQLで必要な情報をすぐに取り出せる -

    簡単に別の形式に変換できる
  80. まとめ

  81. RDF/OWLは 「異なるアプリケーション間でデータを交換 する」ことを目的に作られた

  82. ゆるい型付きのデータ記述言語である

  83. 便利に使って 人生を豊かにしよう!!

  84. Thanks! Follow Me! @acomagu