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

[email protected]ハンズオン

crssnky
April 10, 2019

 [email protected]ハンズオン

crssnky

April 10, 2019
Tweet

More Decks by crssnky

Other Decks in Technology

Transcript

  1. 1

    View Slide

  2. 2
    (WWW関連の標準化団体)
    が規格するRDF用クエリ言語
    W3C
    PREFIX schema:
    PREFIX rdf:
    PREFIX imas:
    PREFIX rdfs:
    select distinct ?predicate ?object
    where{
    ?class_iri rdf:type ?class.
    ?class rdfs:label ?class_label.
    filter(contains(?class_label,"アイドル"))
    ?idol_iri rdf:type imas:Idol;
    schema:name ?idol_name.
    filter(contains(?idol_name,"千早"))
    ?idol_iri ?predicate ?object
    }

    View Slide

  3. 3
    Resource Description Framework
    あるリソースのメタデータを記述するための枠組み
    RDF
    主語 目的語
    述語

    View Slide

  4. 4
    “croMisa”
    名前
    如月千早
    担当
    23
    right
    年齢
    利き手
    Resource Description Framework
    あるリソースのメタデータを記述するための枠組み
    RDF

    View Slide

  5. 5
    ??
    名前
    如月千早
    担当
    23
    right
    年齢
    Resource Description Framework
    あるリソースのメタデータを記述するための枠組み
    RDF
    利き手

    View Slide

  6. 6
    “croMisa”
    如月千早
    担当
    23
    right
    年齢 名前
    Resource Description Framework
    あるリソースのメタデータを記述するための枠組み
    RDF
    利き手
    ??

    View Slide

  7. URI
    7
    Uniform Resource Identifier
    RDFで管理されるリソースなどを示す識別子
    URI
    URL URN
    例:https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Arisugawa_Natsuha

    View Slide

  8. 9

    View Slide

  9. [email protected]は、バンダイナムコさんの
    「THE [email protected]
    を基にした二次創作の作品です。
    ただの一個人のファンメイドなDBで
    あり、アイマス公式とは一切の関係が
    ございません。
    10

    View Slide

  10. 11
    HeaderIllust by @anagoP_ims

    View Slide

  11. • LODのエンドポイント
    • SPARQLで問い合わせ可能
    • アイドルマスターの世界を収録
    • GitHubでデータベースを管理
    → 全ての人が編集に参加可能
    広がるアイマスワールドをオープンデータ化
    WebやアプリからSPARQLで検索・利用可能なエンドポイント
    12

    View Slide

  12. 13

    View Slide

  13. 14
    2005年に開始したアーケード版アイドルマスターを
    始めとするアイドルマスターシリーズの総称

    View Slide

  14. 15
    2005年に開始したアーケード版アイドルマスターを
    始めとするアイドルマスターシリーズの総称

    View Slide

  15. 16
    PVでよく見るロゴ
    インターメディア
    芸術メディアの融合によって生まれる、
    新たなメディアのこと
    例 「出張オーディション」=アイマス+フィールドワーク
    「MR [email protected]!!」=アイマス+VR Theater
    メディアミックス
    複数のメディアを組み合わし、メディア間の
    補完と相乗効果を生む手法
    例:ゲーム・CD・漫画・アニメ・ライブ など...

    View Slide

  16. 17

    View Slide

  17. 1. なにかクエリ打つ
    2. アイドル名を取得する
    3. アイドルのプロフィールを一部取得する
    4. ユニット名とメンバーのURIを取得する
    5. ユニット名とメンバー名を取得する
    6. [余裕あれば]可視化
    18

    View Slide

  18. 1. なにかクエリ打つ
    2. アイドル名を取得する
    3. アイドルのプロフィールを一部取得する
    4. ユニット名とメンバーのURIを取得する
    5. ユニット名とメンバー名を取得する
    6. [余裕あれば]可視化
    19

    View Slide

  19. https://sparql.crssnky.xyz/imas
    へアクセス
    20
    環境を整える

    View Slide

  20. 21

    View Slide

  21. すでにあるクエリ

    View Slide

  22. submit
    JSON形式で返ってきます

    View Slide

  23. 中身について
    主語 目的語
    述語
    [email protected]で使われている
    述語を抜き出している

    View Slide

  24. 25

    View Slide

  25. まとめ
    [email protected]のサイトでクエリが試せる

    View Slide

  26. 1. なにかクエリ打つ
    2. アイドル名を取得する
    3. アイドルのプロフィールを一部取得する
    4. ユニット名とメンバーのURIを取得する
    5. ユニット名とメンバー名を取得する
    6. [余裕あれば]可視化
    27

    View Slide

  27. 28
    ??
    名前
    如月千早
    担当
    23
    right
    年齢
    Resource Description Framework
    あるリソースのメタデータを記述するための枠組み
    RDF
    利き手

    View Slide

  28. 29
    名前
    RDFでの「アイドル名」の表現
    アイドル
    タイプ
    如月千早
    天道輝

    View Slide

  29. 述語 目的語
    タイプ アイドル
    名前 [アイドル名]
    名前
    アイドル
    要約すると...
    タイプ
    如月千早
    タイプが「アイドル」のインスタンスの名前
    が「アイドル名」を表す
    主語はなんでもよい

    View Slide

  30. アイドル名を取得するには
    ワイルド
    カード
    アイドル
    タイプ
    [変数]
    名前
    これをSPARQLで表現する
    (主語) (目的語)
    (述語)

    View Slide

  31. クエリ例
    ワイルド
    カード
    アイドル
    タイプ
    [変数]
    名前
    SELECT ?名前
    WHERE {
    ?主語
    .
    ?主語 ?名前.
    }
    [email protected]のウワサ
    日本語を混ぜても
    使えるらしい
    条件
    取得する変数

    View Slide

  32. クエリ例
    ワイルド
    カード
    アイドル
    タイプ
    [変数]
    名前
    SELECT ?名前
    WHERE {
    ?主語
    .
    ?主語 ?名前.
    }
    「“?主語”のタイプはアイドル」
    「“?主語”の名前は”?名前”」
    SPARQLでは“?○○”は変数を表す!
    任意の型を入れられ、ワイルドカードとしても使える

    View Slide

  33. submit
    全アイドルの名前が取得できる

    View Slide

  34. 見方
    取得したい変数の情報が取れる

    View Slide

  35. 取得したいものを増やす
    取得したい変数を増やせば
    取得できるものが増える

    View Slide

  36. まとめ
    • “SELECT”の後ろに取得したい変数を全て挙げる
    • “WHERE”の後ろに条件を書く
    • 主語,述語,目的語を並べて書く
    • 取得したい部分やワイルドカードは変数にする
    • 決まっているものはそれを書く
    • 主語と述語はURIの形で表される

    View Slide

  37. 1. なにかクエリ打つ
    2. アイドル名を取得する
    3. アイドルのプロフィールを一部取得する
    4. ユニット名とメンバーのURIを取得する
    5. ユニット名とメンバー名を取得する
    6. [余裕あれば]可視化
    38

    View Slide

  38. アイドルのプロフィール例

    View Slide

  39. View Slide

  40. アイドルのプロフィール例
    述語 目的語
    タイプ アイドル
    名前 有栖川 夏葉
    名前(かな) ありすがわ なつは
    誕生日 8月16日
    身長 168cm
    体重 49kg
    スリーサイズ 85/58/84
    血液型 B型
    出身地 愛知県
    イメージカラー #90E667
    (主語)

    View Slide

  41. アイドルのプロフィール例
    述語 目的語
    タイプ アイドル
    名前 有栖川 夏葉
    名前(かな) ありすがわ なつは
    誕生日 8月16日
    身長 168cm
    体重 49kg
    スリーサイズ 85/58/84
    血液型 B型
    出身地 愛知県
    イメージカラー #90E667
    (主語)
    (主語)
    これが得られるクエリを
    書いていきます
    https://sparql.crssnky.xyz/imasrdf/RD
    Fs/detail/Arisugawa_Natsuha

    View Slide

  42. クエリ例
    SELECT ?タイプ ?名前 ?かな ?誕生日・・・・・・・
    WHERE {

    ?タイプ.

    ?名前.

    ?かな.

    ?誕生日.
    ・・・・・・・・・・・
    }
    述語
    タイプ
    名前
    名前(かな)
    誕生日
    身長
    体重
    スリーサイズ
    血液型
    出身地
    イメージカラー

    View Slide

  43. 44

    View Slide

  44. 救世主① • “Prefix”(接頭辞)宣言によるURIの省略
    “PREFIX [接頭辞] [省略したいURIの一部]”
    と書いて宣言することで、長ったらしい部分を省略できる。

    View Slide

  45. 救世主② • “;”(セミコロン)による主語の省略
    SELECT ?名前
    WHERE {
    ?主語
    ;
    ?名前.
    }
    SELECT ?名前
    WHERE {
    ?主語
    .
    ?主語 ?名前.
    }
    “.”の代わりに”;”を書くことで
    同じ主語を続ける意味になり、
    次の文で主語を省略できる。
    上下どちらも同じ文章。

    View Slide

  46. 救世主①,②の反映
    PREFIX rdf:
    PREFIX imas:
    PREFIX schema:
    SELECT ?名前
    WHERE {
    ?主語 rdf:type imas:Idol;
    schema:name ?名前.
    }
    SELECT ?名前
    WHERE {
    ?主語
    .
    ?主語 ?名前.
    }


    View Slide

  47. [email protected]の接頭辞
    内部で利用されているURIの接頭辞は、予め全て入力されています。
    バンバン省略していきましょう!!

    View Slide

  48. 改めてクエリ例
    SELECT *
    WHERE {
    imasrdf:Arisugawa_Natsuha rdf:type ?タイプ;
    schema:name ?名前;
    imas:nameKana ?かな;
    schema:height ?身長;
    schema:weight ?体重;
    imas:Bust ?バスト;
    imas:Waist ?ウエスト;
    imas:Hip ?ヒップ;
    imas:BloodType ?血液型;
    schema:birthPlace ?出身地;
    imas:Color ?イメージカラー;
    }
    述語
    タイプ
    名前
    名前(かな)
    誕生日
    身長
    体重
    スリーサイズ
    血液型
    出身地
    イメージカラー
    (接頭辞宣言は省略)

    View Slide

  49. 改めてクエリ例
    SELECT *
    WHERE {
    imasrdf:Arisugawa_Natsuha rdf:type ?タイプ;
    schema:name ?名前;
    imas:nameKana ?かな;
    schema:height ?身長;
    schema:weight ?体重;
    imas:Bust ?バスト;
    imas:Waist ?ウエスト;
    imas:Hip ?ヒップ;
    imas:BloodType ?血液型;
    schema:birthPlace ?出身地;
    imas:Color ?イメージカラー;
    }
    述語
    タイプ
    名前
    名前(かな)
    誕生日
    身長
    体重
    スリーサイズ
    血液型
    出身地
    イメージカラー
    (接頭辞宣言は省略)
    ⇐SQLと同じ意味「全てを取得」
    主語は省略!!

    View Slide

  50. submit

    View Slide

  51. submit
    ↓取得した変数群
    ↑変数の情報
    • type →URI か リテラル(直値)
    • datatype→変数の型
    • xml:lang→言語
    • value →取得した値
    メタデータ

    View Slide

  52. まとめ
    • URIは”Prefix”(接頭辞)で省略できる
    • 主語は”;”(セミコロン)で省略できる
    • “SELECT *”で全ての変数を取得する(SQLと同じ)
    • 変数の中にはメタデータも含まれる

    View Slide

  53. 1. なにかクエリ打つ
    2. アイドル名を取得する
    3. アイドルのプロフィールを一部取得する
    4. ユニット名とメンバーのURIを取得する
    5. ユニット名とメンバー名を取得する
    6. [余裕あれば]可視化
    54

    View Slide

  54. アイマスのユニット
    DRAMATIC STARS
    • 天道輝
    • 桜庭薫
    • 柏木翼
    Cleasky
    • 宮尾美也
    • 島原エレナ
    竜宮小町
    • 水瀬伊織
    • 三浦あずさ
    • 双海亜美
    P.C.S
    • 島村卯月
    • 五十嵐響子
    • 小日向美穂
    illumination STARS
    • 櫻木真乃
    • 風野灯織
    • 八宮めぐる

    View Slide

  55. RDFでの「ユニット」の表現
    ユニット
    タイプ
    メンバー メンバー
    Cleasky
    名前

    View Slide

  56. ユニットの例
    述語 目的語
    タイプ ユニット
    名前 Cleasky
    メンバー 宮尾美也
    メンバー 島原エレナ
    (主語)
    同じ述語を繰り返してOK!

    View Slide

  57. クエリを書いてみましょう!
    役割 値 意味
    主語 imasrdf:Cleasky Cleaskyの主語
    述語 rdf:type タイプ
    述語 schema:name 名前
    述語 schema:member メンバー

    View Slide

  58. SELECT *
    WHERE {
    imasrdf:Cleasky rdf:type ?type;
    schema:name ?name;
    schema:member ?member.
    }
    (接頭辞宣言は省略)
    クエリを書いてみた

    View Slide

  59. submit

    View Slide

  60. まとめ
    • 同じ述語を複数持つものがある
    • ↑その場合、クエリ結果は組み合わせの数だけ取れる

    View Slide

  61. 1. なにかクエリ打つ
    2. アイドル名を取得する
    3. アイドルのプロフィールを一部取得する
    4. ユニット名とメンバーのURIを取得する
    5. ユニット名とメンバー名を取得する
    6. [余裕あれば]可視化
    62

    View Slide

  62. さきほどの「submit」
    メンバーのアイドルがURIで取得されている

    View Slide

  63. アイドルのURI
    https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Miyao_Miya
    PREFIX imasrdf:
    imasrdf:Miyao_Miya
    さっき見かけたような形式だなぁ...

    View Slide

  64. アイドルのURI
    https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Miyao_Miya
    PREFIX imasrdf:
    imasrdf:Miyao_Miya
    さっき見かけたような形式だなぁ...
    ⇐ imasrdf:Arisugawa_Natsuha

    View Slide

  65. 66

    View Slide

  66. イメージ
    ユニット
    タイプ
    Cleasky
    名前
    メンバー
    アイドル
    タイプ
    宮尾美也
    名前
    • 「imasrdf:Cleaskyの名前は”Cleasky”であり、
    メンバーにはimasrdf:Miyao_Miyaがいる。」
    • 「imasrdf:Miyao_Miyaの名前は”宮尾美也”である」

    View Slide

  67. クエリ例
    SELECT *
    WHERE {
    imasrdf:Cleasky rdf:type ?type;
    schema:name ?unit_name;
    schema:member ?member.
    ?member schema:name ?idol_name.
    }
    (接頭辞宣言は省略)
    取得した目的語を主語に配置して、
    また述語と目的語を記述すればOK!

    View Slide

  68. submit

    View Slide

  69. イメージ
    ユニット
    タイプ
    Cleasky
    名前
    メンバー
    アイドル
    タイプ
    宮尾美也
    名前
    • 「imasrdf:Cleaskyの名前は”Cleasky”であり、
    メンバーにはimasrdf:Miyao_Miyaがいる。」
    • 「imasrdf:Miyao_Miyaの名前は”宮尾美也”である」

    View Slide

  70. submit
    共通してる部分あるし、まとめたいなぁ...

    View Slide

  71. 希望
    • Cleaskyというユニットに所属する宮尾美也
    • Cleaskyというユニットに所属する島原エレナ
    Cleaskyというユニットに所属する宮尾美也、島原エレナ
    という感じで一つにまとめたいなぁ

    View Slide

  72. 救世主③ • “Group by”句と”Group_Concat”句による集約
    SELECT ?unit_name Group_Concat(?idol_name;separator=", ")
    WHERE {
    imasrdf:Cleasky rdf:type ?type;
    schema:name ?unit_name;
    schema:member ?member.
    ?member schema:name ?idol_name.
    }Group by ?unit_name
    ① 集約したい変数を”Group by”句の後ろに書く
    ② 集約されたグループから、結合して表示したい変数を
    “Group_Concat”句に渡す。
    また、区切り文字(separator)を指定する

    View Slide

  73. submit

    View Slide

  74. submit
    取得した名前を、指定した区切り文字で並べてくれた!
    けど....変数名が知らない名前になってる........

    View Slide

  75. 救世主④ • “as”句による変数名の変更
    SELECT (?unit_name as ?ユニット名) (Group_Concat(?idol_name;separator=", ")as ?メンバー名)
    WHERE {
    imasrdf:Cleasky rdf:type ?type;
    schema:name ?unit_name;
    schema:member ?member.
    ?member schema:name ?idol_name.
    }Group by ?unit_name
    ( [既存の変数や関数] as [新しい変数名] )

    View Slide

  76. submit

    View Slide

  77. submit+ • ユニット取得の主語を変数化(ワイルドカード)

    View Slide

  78. まとめ
    • 目的語を主語にし、また新しい文が書ける
    • 連鎖的に文を組んでいくことで、
    複雑な条件を検索することができる
    • “Group by”句を使い、条件による集約ができる
    • “Group_Concat”句を使い、グループ内で異なる
    変数を一つにまとめられる

    View Slide

  79. これこそLinked Open Data
    Cleasky 宮尾美也
    メンバー
    タウラス
    メンバー
    Shiny
    Trinity
    所持
    衣装
    タイプ
    春日未来
    メンバー
    ja.DBpedia
    「桐谷蝶々」
    C.V.
    156cm
    秋月律子
    身長
    身長

    View Slide

  80. 1. なにかクエリ打つ
    2. アイドル名を取得する
    3. アイドルのプロフィールを一部取得する
    4. ユニット名とメンバーのURIを取得する
    5. ユニット名とメンバー名を取得する
    6. [余裕あれば]可視化
    81

    View Slide

  81. 82

    View Slide

  82. 83

    View Slide

  83. 84
    [email protected]による、アイマス技術本
    「週刊[email protected]
    が今週末の”技術書典”にて頒布されます。
    [email protected]だけでなく、様々なIT技術を用いて
    アイマスへContributeしているのでぜひ!!
    [email protected] ~応用編~
    UnrealEngine4で
    クエリ結果を可視化する

    View Slide

  84. アイマスハッカソン2019 in 名古屋
    名古屋でもハッカソンですよ、ハッカソン!
    テーマ:How to Visualize?
    2019/04/21
    in 名工大ラーニングコモンズ

    View Slide