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

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

acomagu
February 22, 2019

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

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

acomagu

February 22, 2019
Tweet

More Decks by acomagu

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

  3. 自己紹介
    - 伊藤勇希
    - 音ゲー(CHUNITHM)
    - 書道
    - 合唱
    - TRPG
    - キャンプ
    - Plan9
    - VTuber(にじさんじ)
    - ポーカー

    View full-size slide

  4. 自己紹介
    - 好きな言語:
    - Golang
    - Typescript
    - 型がある言語

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. RDFとは何か?

    View full-size slide

  14. RDFとは何か?

    [ - - ]
    主語 述語 目的語

    View full-size slide

  15. RDFとは何か?

    [ - - ]
    Subject Predicate Object

    View full-size slide

  16. RDFとは何か?

    [ - - ]
    1 2 3

    View full-size slide

  17. RDFとは何か?

    [ - - ]
    Triple

    View full-size slide

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

    View full-size slide

  19. <#Yuki_Ito> foaf:age 22.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. RDFとは何か?

    [ - - ]
    Subject Predicate Object

    View full-size slide

  26. RDFとは何か?

    [ - - ]
    URI URI URI

    View full-size slide

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

    View full-size slide



  28. ;
    22;
    “王”.

    View full-size slide

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

    View full-size slide

  30. @prefix foaf: .
    @prefix vcard: .
    @base .
    <#Yuki_Ito> a foaf:Person;
    foaf:age 22;
    vcard:title “王”.

    View full-size slide

  31. Webで公開するために生まれた
    データ記述言語

    View full-size slide

  32. @prefix foaf: .
    @prefix vcard: .
    @base .
    <#Yuki_Ito> a foaf:Person;
    foaf:age 22;
    vcard:title “王”.

    View full-size slide

  33. なぜこういう仕組みが必要なのか?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  41. @prefix foaf: .
    @prefix vcard: .
    @base .
    <#Yuki_Ito> a foaf:Person;
    foaf:age 22;
    vcard:title “王”.

    View full-size slide

  42. どの語彙を使うか?
    - IETFやW3Cなどによって標準化されたものを使用する
    - FOAF, Dublin Core, schema.org, VCard...
    - 標準化はされていないが公開されているものを使う
    - 図書分類、位置情報、感情を表現するもの ... 無数にある
    - 自分で作る

    View full-size slide

  43. ontology.acomagu.me/ccs

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  46. {
    “name”: “Yuki Ito”,
    “age”: 22
    }
    {
    “type”: “object”,
    “properties”: {
    “name”: { … },
    “age”: { … }
    }
    }

    View full-size slide

  47. {
    “name”: “Yuki Ito”,
    “age”: 22,
    “title”: “神”
    }
    {
    “type”: “object”,
    “properties”: {
    “name”: { … },
    “age”: { … }
    }
    }
    ERROR!!

    View full-size slide

  48. [] 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

    View full-size slide

  49. [] 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!!

    View full-size slide

  50. 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
    スキーマを見比べてみる

    View full-size slide

  51. 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
    スキーマを見比べてみる

    View full-size slide

  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
    スキーマを見比べてみる
    RDFでは「このクラスにはこのプロパティがあるべき」という定義はできない

    View full-size slide

  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
    スキーマを見比べてみる
    RDF、ゆるい...!

    View full-size slide

  54. [] a foaf:Person
    foaf:name “Yuki Ito”
    foaf:age 22
    でも...

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  57. OWLとは
    RDF/RDFSの拡張

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  60. [] 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
    ...

    View full-size slide

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

    View full-size slide

  62. [] a foaf:Person;
    foaf:name “Yuki Ito”;
    vcard:age 22.
    vcard:age owl:equivalentProperty foaf:age.
    PASS!!
    でも...

    View full-size slide

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

    View full-size slide

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


    View full-size slide

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


    全く異なるアプリケーション間での
    データの交換がしやすい

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  74. tblog.acomagu.me

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  79. Thanks!
    Follow Me! @acomagu

    View full-size slide