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
im@sparqlハンズオン
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
crssnky
April 10, 2019
Technology
550
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
im@sparqlハンズオン
crssnky
April 10, 2019
More Decks by crssnky
See All by crssnky
IM@S Engineer MeetUp REBURN 進行資料
crssnky
0
410
Tokyo HoloLens ミートアップ vol.26 crssnky
crssnky
0
2k
im@sparqlレビューのすゝめ
crssnky
0
86
croMisa、劇場を建てるってよ
crssnky
2
970
アイマスハッカソン2019in関西
crssnky
1
480
IM@Study at 尾張だよ~(o・∇・o)
crssnky
1
1.1k
アイマスハッカソン2019 in 名古屋 進行資料
crssnky
1
380
LODC2018に出たim@sparql
crssnky
0
120
千早さんに帰りを迎えてもらうお話
crssnky
1
630
Other Decks in Technology
See All in Technology
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
7.6k
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.8k
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
160
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
280
4人目のSREはAgent
tanimuyk
0
200
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
250
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
200
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
160
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
190
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
3
840
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
製造現場での生成AIの活用、およびエージェントAIの実装のあり方、AVEVAの取り組み
iotcomjpadmin
0
110
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
310
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
470
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
170
GraphQLとの向き合い方2022年版
quramy
50
15k
Abbi's Birthday
coloredviolet
3
8.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Site-Speed That Sticks
csswizardry
13
1.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
Transcript
1
2 (WWW関連の標準化団体) が規格するRDF用クエリ言語 W3C PREFIX schema: <http://schema.org/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 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 }
3 Resource Description Framework あるリソースのメタデータを記述するための枠組み RDF 主語 目的語 述語
4 “croMisa” 名前 如月千早 担当 23 right 年齢 利き手 Resource
Description Framework あるリソースのメタデータを記述するための枠組み RDF
5 ?? 名前 如月千早 担当 23 right 年齢 Resource Description
Framework あるリソースのメタデータを記述するための枠組み RDF 利き手
6 “croMisa” 如月千早 担当 23 right 年齢 名前 Resource Description
Framework あるリソースのメタデータを記述するための枠組み RDF 利き手 ??
URI 7 Uniform Resource Identifier RDFで管理されるリソースなどを示す識別子 URI URL URN 例:https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Arisugawa_Natsuha
9
im@sparqlは、バンダイナムコさんの 「THE iDOLM@STER」 を基にした二次創作の作品です。 ただの一個人のファンメイドなDBで あり、アイマス公式とは一切の関係が ございません。 10
11 HeaderIllust by @anagoP_ims
• LODのエンドポイント • SPARQLで問い合わせ可能 • アイドルマスターの世界を収録 • GitHubでデータベースを管理 → 全ての人が編集に参加可能
広がるアイマスワールドをオープンデータ化 WebやアプリからSPARQLで検索・利用可能なエンドポイント 12
13
14 2005年に開始したアーケード版アイドルマスターを 始めとするアイドルマスターシリーズの総称
15 2005年に開始したアーケード版アイドルマスターを 始めとするアイドルマスターシリーズの総称
16 PVでよく見るロゴ インターメディア 芸術メディアの融合によって生まれる、 新たなメディアのこと 例 「出張オーディション」=アイマス+フィールドワーク 「MR ST@GE!!」=アイマス+VR Theater
メディアミックス 複数のメディアを組み合わし、メディア間の 補完と相乗効果を生む手法 例:ゲーム・CD・漫画・アニメ・ライブ など...
17
1. なにかクエリ打つ 2. アイドル名を取得する 3. アイドルのプロフィールを一部取得する 4. ユニット名とメンバーのURIを取得する 5. ユニット名とメンバー名を取得する
6. [余裕あれば]可視化 18
1. なにかクエリ打つ 2. アイドル名を取得する 3. アイドルのプロフィールを一部取得する 4. ユニット名とメンバーのURIを取得する 5. ユニット名とメンバー名を取得する
6. [余裕あれば]可視化 19
https://sparql.crssnky.xyz/imas へアクセス 20 環境を整える
21
すでにあるクエリ
submit JSON形式で返ってきます
中身について 主語 目的語 述語 im@sparqlで使われている 述語を抜き出している
25
まとめ im@sparqlのサイトでクエリが試せる
1. なにかクエリ打つ 2. アイドル名を取得する 3. アイドルのプロフィールを一部取得する 4. ユニット名とメンバーのURIを取得する 5. ユニット名とメンバー名を取得する
6. [余裕あれば]可視化 27
28 ?? 名前 如月千早 担当 23 right 年齢 Resource Description
Framework あるリソースのメタデータを記述するための枠組み RDF 利き手
29 名前 RDFでの「アイドル名」の表現 アイドル タイプ 如月千早 天道輝
述語 目的語 タイプ アイドル 名前 [アイドル名] 名前 アイドル 要約すると... タイプ
如月千早 タイプが「アイドル」のインスタンスの名前 が「アイドル名」を表す 主語はなんでもよい
アイドル名を取得するには ワイルド カード アイドル タイプ [変数] 名前 これをSPARQLで表現する (主語) (目的語)
(述語)
クエリ例 ワイルド カード アイドル タイプ [変数] 名前 SELECT ?名前 WHERE
{ ?主語 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol>. ?主語 <http://schema.org/name> ?名前. } im@sparqlのウワサ 日本語を混ぜても 使えるらしい 条件 取得する変数
クエリ例 ワイルド カード アイドル タイプ [変数] 名前 SELECT ?名前 WHERE
{ ?主語 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol>. ?主語 <http://schema.org/name> ?名前. } 「“?主語”のタイプはアイドル」 「“?主語”の名前は”?名前”」 SPARQLでは“?◦◦”は変数を表す! 任意の型を入れられ、ワイルドカードとしても使える
submit 全アイドルの名前が取得できる
見方 取得したい変数の情報が取れる
取得したいものを増やす 取得したい変数を増やせば 取得できるものが増える
まとめ • “SELECT”の後ろに取得したい変数を全て挙げる • “WHERE”の後ろに条件を書く • 主語,述語,目的語を並べて書く • 取得したい部分やワイルドカードは変数にする •
決まっているものはそれを書く • 主語と述語はURIの形で表される
1. なにかクエリ打つ 2. アイドル名を取得する 3. アイドルのプロフィールを一部取得する 4. ユニット名とメンバーのURIを取得する 5. ユニット名とメンバー名を取得する
6. [余裕あれば]可視化 38
アイドルのプロフィール例
None
アイドルのプロフィール例 述語 目的語 タイプ アイドル 名前 有栖川 夏葉 名前(かな) ありすがわ
なつは 誕生日 8月16日 身長 168cm 体重 49kg スリーサイズ 85/58/84 血液型 B型 出身地 愛知県 イメージカラー #90E667 (主語)
アイドルのプロフィール例 述語 目的語 タイプ アイドル 名前 有栖川 夏葉 名前(かな) ありすがわ
なつは 誕生日 8月16日 身長 168cm 体重 49kg スリーサイズ 85/58/84 血液型 B型 出身地 愛知県 イメージカラー #90E667 (主語) (主語) これが得られるクエリを 書いていきます https://sparql.crssnky.xyz/imasrdf/RD Fs/detail/Arisugawa_Natsuha
クエリ例 SELECT ?タイプ ?名前 ?かな ?誕生日・・・・・・・ WHERE { <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Arisugawa_Natsuha> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
?タイプ. <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Arisugawa_Natsuha> <http://schema.org/name> ?名前. <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Arisugawa_Natsuha> <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#nameKana> ?かな. <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Arisugawa_Natsuha> <http://schema.org/birthDate> ?誕生日. ・・・・・・・・・・・ } 述語 タイプ 名前 名前(かな) 誕生日 身長 体重 スリーサイズ 血液型 出身地 イメージカラー
44
救世主① • “Prefix”(接頭辞)宣言によるURIの省略 “PREFIX [接頭辞] [省略したいURIの一部]” と書いて宣言することで、長ったらしい部分を省略できる。 ⇨ <http://www.w3.org/2000/01/rdf-schema#label>
救世主② • “;”(セミコロン)による主語の省略 SELECT ?名前 WHERE { ?主語 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol>;
<http://schema.org/name> ?名前. } SELECT ?名前 WHERE { ?主語 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol>. ?主語 <http://schema.org/name> ?名前. } “.”の代わりに”;”を書くことで 同じ主語を続ける意味になり、 次の文で主語を省略できる。 上下どちらも同じ文章。
救世主①,②の反映 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#> PREFIX schema: <http://schema.org/>
SELECT ?名前 WHERE { ?主語 rdf:type imas:Idol; schema:name ?名前. } SELECT ?名前 WHERE { ?主語 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#Idol>. ?主語 <http://schema.org/name> ?名前. } 新 旧
im@sparqlの接頭辞 内部で利用されているURIの接頭辞は、予め全て入力されています。 バンバン省略していきましょう!!
改めてクエリ例 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 ?イメージカラー; } 述語 タイプ 名前 名前(かな) 誕生日 身長 体重 スリーサイズ 血液型 出身地 イメージカラー (接頭辞宣言は省略)
改めてクエリ例 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と同じ意味「全てを取得」 主語は省略!!
submit
submit ↓取得した変数群 ↑変数の情報 • type →URI か リテラル(直値) • datatype→変数の型
• xml:lang→言語 • value →取得した値 メタデータ
まとめ • URIは”Prefix”(接頭辞)で省略できる • 主語は”;”(セミコロン)で省略できる • “SELECT *”で全ての変数を取得する(SQLと同じ) • 変数の中にはメタデータも含まれる
1. なにかクエリ打つ 2. アイドル名を取得する 3. アイドルのプロフィールを一部取得する 4. ユニット名とメンバーのURIを取得する 5. ユニット名とメンバー名を取得する
6. [余裕あれば]可視化 54
アイマスのユニット DRAMATIC STARS • 天道輝 • 桜庭薫 • 柏木翼 Cleasky
• 宮尾美也 • 島原エレナ 竜宮小町 • 水瀬伊織 • 三浦あずさ • 双海亜美 P.C.S • 島村卯月 • 五十嵐響子 • 小日向美穂 illumination STARS • 櫻木真乃 • 風野灯織 • 八宮めぐる
RDFでの「ユニット」の表現 ユニット タイプ メンバー メンバー Cleasky 名前
ユニットの例 述語 目的語 タイプ ユニット 名前 Cleasky メンバー 宮尾美也 メンバー
島原エレナ (主語) 同じ述語を繰り返してOK!
クエリを書いてみましょう! 役割 値 意味 主語 imasrdf:Cleasky Cleaskyの主語 述語 rdf:type タイプ
述語 schema:name 名前 述語 schema:member メンバー
SELECT * WHERE { imasrdf:Cleasky rdf:type ?type; schema:name ?name; schema:member
?member. } (接頭辞宣言は省略) クエリを書いてみた
submit
まとめ • 同じ述語を複数持つものがある • ↑その場合、クエリ結果は組み合わせの数だけ取れる
1. なにかクエリ打つ 2. アイドル名を取得する 3. アイドルのプロフィールを一部取得する 4. ユニット名とメンバーのURIを取得する 5. ユニット名とメンバー名を取得する
6. [余裕あれば]可視化 62
さきほどの「submit」 メンバーのアイドルがURIで取得されている
アイドルのURI https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Miyao_Miya PREFIX imasrdf: <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/> imasrdf:Miyao_Miya さっき見かけたような形式だなぁ...
アイドルのURI https://sparql.crssnky.xyz/imasrdf/RDFs/detail/Miyao_Miya PREFIX imasrdf: <https://sparql.crssnky.xyz/imasrdf/RDFs/detail/> imasrdf:Miyao_Miya さっき見かけたような形式だなぁ... ⇐ imasrdf:Arisugawa_Natsuha
66
イメージ ユニット タイプ Cleasky 名前 メンバー アイドル タイプ 宮尾美也 名前
• 「imasrdf:Cleaskyの名前は”Cleasky”であり、 メンバーにはimasrdf:Miyao_Miyaがいる。」 • 「imasrdf:Miyao_Miyaの名前は”宮尾美也”である」
クエリ例 SELECT * WHERE { imasrdf:Cleasky rdf:type ?type; schema:name ?unit_name;
schema:member ?member. ?member schema:name ?idol_name. } (接頭辞宣言は省略) 取得した目的語を主語に配置して、 また述語と目的語を記述すればOK!
submit
イメージ ユニット タイプ Cleasky 名前 メンバー アイドル タイプ 宮尾美也 名前
• 「imasrdf:Cleaskyの名前は”Cleasky”であり、 メンバーにはimasrdf:Miyao_Miyaがいる。」 • 「imasrdf:Miyao_Miyaの名前は”宮尾美也”である」
submit 共通してる部分あるし、まとめたいなぁ...
希望 • Cleaskyというユニットに所属する宮尾美也 • Cleaskyというユニットに所属する島原エレナ Cleaskyというユニットに所属する宮尾美也、島原エレナ という感じで一つにまとめたいなぁ
救世主③ • “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)を指定する
submit
submit 取得した名前を、指定した区切り文字で並べてくれた! けど....変数名が知らない名前になってる........
救世主④ • “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 [新しい変数名] )
submit
submit+ • ユニット取得の主語を変数化(ワイルドカード)
まとめ • 目的語を主語にし、また新しい文が書ける • 連鎖的に文を組んでいくことで、 複雑な条件を検索することができる • “Group by”句を使い、条件による集約ができる •
“Group_Concat”句を使い、グループ内で異なる 変数を一つにまとめられる
これこそLinked Open Data Cleasky 宮尾美也 メンバー タウラス メンバー Shiny Trinity
所持 衣装 タイプ 春日未来 メンバー ja.DBpedia 「桐谷蝶々」 C.V. 156cm 秋月律子 身長 身長
1. なにかクエリ打つ 2. アイドル名を取得する 3. アイドルのプロフィールを一部取得する 4. ユニット名とメンバーのURIを取得する 5. ユニット名とメンバー名を取得する
6. [余裕あれば]可視化 81
82
83
84 IM@Studyによる、アイマス技術本 「週刊IM@Study」 が今週末の”技術書典”にて頒布されます。 im@sparqlだけでなく、様々なIT技術を用いて アイマスへContributeしているのでぜひ!! im@sparql ~応用編~ UnrealEngine4で クエリ結果を可視化する
アイマスハッカソン2019 in 名古屋 名古屋でもハッカソンですよ、ハッカソン! テーマ:How to Visualize? 2019/04/21 in 名工大ラーニングコモンズ