文アルLOD試作②:文アルLOD試作版(実在人物をもとにした架空のキャラクターと文化資源への相互リンク形成の試行として)

LODチャレンジ、応募するする詐欺をしていたので、独学かつ趣味でやれる範囲で作ってきました。

作品名

文アルLOD試作版(実在人物をもとにした架空のキャラクターと文化資源への相互リンク形成の試行として)

制作のねらい

今般、「文豪」から派生したキャラクターを主要な主人公とした作品が制作され一定の存在感を有している。 (ex. 文豪とアルケミスト、文豪ストレイドッグス etc…) そうした環境のなか、派生キャラクターをきっかけとして文学作品へのアクセスを担保することができれば、 「旬」な作品から実在「文豪」とその作品への関心へを惹起することができ、また逆方向に実在文豪からの キャラクターから関心を現在進行形の作品への関心に向けることにより作品へのアクセス可能となると考えた。

制作物の概要

EXNOA制作のブラウザゲーム「文豪とアルケミスト」を原作とするアニメ作品「文豪とアルケミスト~審判ノ歯車~」に登場した 「文豪」17キャラクターに関するデータを整備し、および派生元の「文豪」に関するデータをRDFの枠組みを用いて表現した。 RDFで表現したのはキャラクターと派生元の文豪の関連性であり、前者についてはピクシブ百科事典およびアニメ公式サイトの キャラクター個別紹介ページ、後者はWebNDLA、ジャパンサーチのchname:名前空間へのリンクを含めた。 併せて当該「文豪」の作品のうち、青空文庫でフルテキストが入手可能なものはその一覧を含めた。

また、LODを活用した具体的な利用ケースの一例として、WebNDLAの個人典拠ページでLODを活用したリンクを追加するユーザースクリプトを作成した

成果物

Turtle

  • bungo.ttl : 文豪および派生キャラクターに関する情報
  • aozora.ttl : 上記に関連する青空文庫に掲載された作品
  • common.ttl : 上記に関連するメタ事項

JSON-LD

  • bungo.json : 上記Turtle形式のRDFをマージしてJSON-LDとして表現したもの

ユーザースクリプト

動作確認は作成時点のChrome最新版(Ver.86)、およびTampermonkey4.11にて実施しました

利用ライセンス

上記に記載した各成果物について、データ整備者は著作物性がないものと認識しております。 仮に上記に掲載した各成果物が著作権その他なんらかの法的保護の対象となる場合、データ整備者は権利を放棄し https://lod.da1.blue/ 配下に配置されたファイルは CC0 にて利用を許諾します。 ただし、以下の点にご留意ください。

  • 各成果物は公開された情報から事実情報を集約したとの認識で作成したものであるが、保護期間を満了していない著作物の内容に関する記述を含むものであること
  • 各成果物に第三者が権利を有する可能性の有無、利用により第三者の権利が侵害される可能性についてデータ整備者は判断を行わないこと

謝辞

上記成果物には、以下のイベント、作品、活動等から着想を得たものが含まれます。非網羅的である可能性がありますが、以下に示し謝意を表します。

おことわり

上記成果物は、整備者が所属する組織・団体とは無関係の個人の活動として作成したものです。 不明点は整備者に直接ご連絡ください。連絡先はページ末尾に記載しております。

文アルLOD試作① TSVからTurtleを作ってみるテスト

ちょっと、RDF触ってないなあと思ってやってみました。 VS Codeでちょっと次のようなTSVを書き、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[bungo:]	rdfs:label	schema:isBasedOn[chname:]	rdfs:seeAlso[pxd:]	schema:perforedBy[pxd:]
芥川龍之介 芥川龍之介 芥川龍之介 芥川龍之介(文豪とアルケミスト) 諏訪部順一
太宰治 太宰治 太宰治 太宰治(文豪とアルケミスト) 中村悠一
中原中也 中原中也 中原中也 中原中也(文豪とアルケミスト) 柿原徹也
島崎藤村 島崎藤村 島崎藤村 島崎藤村(文豪とアルケミスト) 立花慎之介
織田作之助 織田作之助 織田作之助 織田作之助(文豪とアルケミスト) 小野坂昌也
徳田秋声 徳田秋声 徳田秋声 徳田秋声(文豪とアルケミスト) 渡辺拓海
坂口安吾 坂口安吾 坂口安吾 坂口安吾(文豪とアルケミスト) 杉田智和
萩原朔太郎 萩原朔太郎 萩原朔太郎 萩原朔太郎(文豪とアルケミスト) 野島健児
室生犀星 室生犀星 室生犀星 室生犀星(文豪とアルケミスト) 逢坂良太
志賀直哉 志賀直哉 志賀直哉 志賀直哉(文豪とアルケミスト) 前野智昭
武者小路実篤 武者小路実篤 武者小路実篤 武者小路実篤(文豪とアルケミスト) KENN
菊池寛 菊池寛 菊池寛 菊池寛(文豪とアルケミスト) 三木眞一郎
久米正雄 久米正雄 久米正雄 久米正雄(文豪とアルケミスト) 吉野裕行
佐藤春夫 佐藤春夫 佐藤春夫 佐藤春夫(文豪とアルケミスト) 泰勇気
谷崎潤一郎 谷崎潤一郎 谷崎潤一郎 谷崎潤一郎(文豪とアルケミスト) 岡本信彦
堀辰雄 堀辰雄 堀辰雄 堀辰雄(文豪とアルケミスト) 髙橋孝治
檀一雄 檀一雄 檀一雄 檀一雄(文豪とアルケミスト) 小野友樹

PowerShellでちょっとスクリプトを書いて

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$sourceTsv = "./bungo_list.tsv"
$prefixLines = Get-Content "./commonPrefix.ttl"

$destTtl ="./bungo_list.ttl"

[string[]]$lines = ""
$lines += $prefixLines

# Get TSV Header
$heads = (Get-Content $sourceTsv -TotalCount 1 -Encoding UTF8).split("`t")
$headsLength = $heads.Length

# import TSV
$list = Import-Csv $sourceTsv -Delimiter "`t" -Encoding UTF8
$list | ForEach-Object {
# Subject
$line = $_
$subject = $heads[0]
if ($subject -match ":") {
$prefix = ($heads[0] -replace "\[(\S+:)\]", "`$1")
$stem = $line.($heads[0])
$newLine = $prefix + $stem
$lines += $newLine
}
# Predicate and Object
(1..(($headsLength) - 1)) | ForEach-Object {
$head = $heads[$_]
if ($_ -eq (($headsLength) - 1)) {
$punc = " ."
} else {
$punc = " ;"
}
if ($head -match "\[\S+:\]") {
$predicate = $head -replace "^(\S+)\[\S+:\]", "`$1"
$objPrefix = $head -replace "^\S+\[(\S+:)\]", "`$1"
$objStem = $line.($heads[$_])
$newLine = " " + $predicate + " " + $objPrefix + $objStem + $punc
}
else {
$predicate = $head
$object = '"' + $line.($heads[$_]) + '"'
$newLine = " " + $predicate + " " + $object + $punc
}
$newLine = $newLine -replace "\(","\u0028"
$newLine = $newLine -replace "\)","\u0029"
$lines += $newLine
}
}
$lines | Out-File $destTtl -Encoding UTF8

次のようなRDF(Turtle)が得られました。(Prefixは省略)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
bungo:芥川龍之介
rdfs:label "芥川龍之介" ;
schema:isBasedOn chname:芥川龍之介 ;
rdfs:seeAlso pxd:芥川龍之介\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:諏訪部順一 .
bungo:太宰治
rdfs:label "太宰治" ;
schema:isBasedOn chname:太宰治 ;
rdfs:seeAlso pxd:太宰治\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:中村悠一 .
bungo:中原中也
rdfs:label "中原中也" ;
schema:isBasedOn chname:中原中也 ;
rdfs:seeAlso pxd:中原中也\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:柿原徹也 .
bungo:島崎藤村
rdfs:label "島崎藤村" ;
schema:isBasedOn chname:島崎藤村 ;
rdfs:seeAlso pxd:島崎藤村\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:立花慎之介 .
bungo:織田作之助
rdfs:label "織田作之助" ;
schema:isBasedOn chname:織田作之助 ;
rdfs:seeAlso pxd:織田作之助\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:小野坂昌也 .
bungo:徳田秋声
rdfs:label "徳田秋声" ;
schema:isBasedOn chname:徳田秋声 ;
rdfs:seeAlso pxd:徳田秋声\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:渡辺拓海 .
bungo:坂口安吾
rdfs:label "坂口安吾" ;
schema:isBasedOn chname:坂口安吾 ;
rdfs:seeAlso pxd:坂口安吾\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:杉田智和 .
bungo:萩原朔太郎
rdfs:label "萩原朔太郎" ;
schema:isBasedOn chname:萩原朔太郎 ;
rdfs:seeAlso pxd:萩原朔太郎\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:野島健児 .
bungo:室生犀星
rdfs:label "室生犀星" ;
schema:isBasedOn chname:室生犀星 ;
rdfs:seeAlso pxd:室生犀星\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:逢坂良太 .
bungo:志賀直哉
rdfs:label "志賀直哉" ;
schema:isBasedOn chname:志賀直哉 ;
rdfs:seeAlso pxd:志賀直哉\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:前野智昭 .
bungo:武者小路実篤
rdfs:label "武者小路実篤" ;
schema:isBasedOn chname:武者小路実篤 ;
rdfs:seeAlso pxd:武者小路実篤\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:KENN .
bungo:菊池寛
rdfs:label "菊池寛" ;
schema:isBasedOn chname:菊池寛 ;
rdfs:seeAlso pxd:菊池寛\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:三木眞一郎 .
bungo:久米正雄
rdfs:label "久米正雄" ;
schema:isBasedOn chname:久米正雄 ;
rdfs:seeAlso pxd:久米正雄\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:吉野裕行 .
bungo:佐藤春夫
rdfs:label "佐藤春夫" ;
schema:isBasedOn chname:佐藤春夫 ;
rdfs:seeAlso pxd:佐藤春夫\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:泰勇気 .
bungo:谷崎潤一郎
rdfs:label "谷崎潤一郎" ;
schema:isBasedOn chname:谷崎潤一郎 ;
rdfs:seeAlso pxd:谷崎潤一郎\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:岡本信彦 .
bungo:堀辰雄
rdfs:label "堀辰雄" ;
schema:isBasedOn chname:堀辰雄 ;
rdfs:seeAlso pxd:堀辰雄\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:髙橋孝治 .
bungo:檀一雄
rdfs:label "檀一雄" ;
schema:isBasedOn chname:檀一雄 ;
rdfs:seeAlso pxd:檀一雄\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:小野友樹 .

となると、そこまでの負荷を感じずにRDFが作れるのかな、などと。

刀剣乱舞 Linked Data 試作への道 の前置き その2 : そもそも刀剣男士とは?

刀剣乱舞に出てくるキャラクター(架空の人物?)であるところの 刀剣男士についてLOD化したら、多分地方創生とか文化振興とかが捗るはず、 という思いつきをもとに構想だけ練っていたら3ヶ月が過ぎました。 ので、とりあえずイメージだけアウトプットしておきます。

目標(だったもの)

  • 刀剣男士(※刀剣乱舞のキャラクター)をRDFの枠組みで記述する
  • 刀剣男士とそのもとになった刀剣の関係を記述する できたら、その旧蔵者とか現所蔵機関についても記述する
  • 原作(刀剣乱舞-ONLINE-)と派生作品の関係についても記述する

前回の着手状況

前回の疑問点(抄)

  • 刀剣男士はそもそも schema:Person として扱ってよいのか?
  • そもそも原作と派生作品の同一キャラクターは同じエンティティとして表現できるのか? ※例えばアニメ版とミュージカル版

「刀剣男士」とはなにか

では、刀剣男士とはなんであるのか。 公式サイトを見てみましょう。

刀剣男士とは、脇差や太刀などの刀剣が自ら戦う運命(さだめ)の元に生まれた存在です。 日本刀を中心とした彼らは武器としてだけでなく美術品としての価値も高く評価されています。 戦う運命(さだめ)として生まれた刀剣男士たちは、強く美しく戦場で舞います。

なるほど。わからん。

で、改めて。疑問点。

  • 刀剣男士はそもそも schema:Person として扱ってよいのか?

というわけで改めて考えると、 艦娘 とか 刀剣男士 は 「 化」とはいうもののあくまで されたのであって 本質的にはモノなわけですよね。 ある意味そのあたりが、他のキャラクターとは異なる擬人化キャラクターの特性な気がします。

※非実在刀のことはここでは措いておくものとします。

※ヘタリアはどうなるんだとか、そういうのは措いておいてください

いいかえると刀剣男士とはモノの派生物であってヒトの派生物ではなく、 ということは少なくとも schema:Person ではないし foaf:Personでもない。はず。

では、 foaf:Agent なのかというと…… FOAFを見てみましょう。

The Agent class is the class of agents; things that do stuff. A well known sub-class is Person, representing people. Other kinds of agents include Organization and Group.

The Agent class is useful in a few places in FOAF where Person would have been overly specific. For example, the IM chat ID properties such as jabberID are typically associated with people, but sometimes belong to software bots.

えーと。となると、 foaf:Agent ではあるかもしれない。

※botがAgentってんなら、付喪神くらいAgentでいいでしょう

あるかもしれないが、しかし…… 漠然としてますよね……

ひとまず、

1
2
ranbu:刀剣男士 rdfs:subClassOf foaf:Agent ;
foaf:isPrimaryTopicOf pixiv-dic:刀剣男士 .

としておきましょう。

あ、プレフィクスの ranbu: のURIはあとから考えますね。

刀剣男士とは誰か

で、個々の刀剣男士のことを考えるわけです。加州清光とか。 というわけで、加州清光と言えば大和守安定が出てくるわけですが、 ヘアピンをしてるのって「花丸」本丸の大和守安定だけじゃないですか。

あと、多分歌って踊って和太鼓叩かないじゃないですか、 ミュ本丸じゃないと。(「ミュージカル『刀剣乱舞』」を指します) パリ行ったりしないし。

ということはですよ、『刀剣乱舞-花丸-』の大和守安定と そのほかの本丸の大和守安定って同一の存在なんでしょうか……

という疑問が湧きまして。

そもそもメディアミックスされた作品群の中で同一の名称を持って一定の前提を共有しつつ、 しかし作品ごとに異なる経験を持ち、あるいは異なる背景を持ったキャラクターを 矛盾なく一つのエンティティとして記述できるのでしょうか。

と考えたときに、改めて刀剣男士をモノとしてとらえ直すと、 むしろ刀剣男士は人として扱うより作品 Work として扱う方が容易なのでは なかろうか、という気がしてきました。

つまり、『加州清光』という Work が 『加州清光(刀剣乱舞-ONLINE-)』とか 『加州清光(刀剣乱舞-花丸-)』っていうインスタンスを持つと。

とするとわりとわかりやすいモデルが取れる気がしてきました。 (しません?)

となるとBIBFRAMEの hasInstance 的なプロパティを使えば 矛盾なく記述できるような気がしてきました。

BIBFRAME Ontology

Definition:

Instance is related to described Work. For use to connect Works to Instances in the BIBFRAME structure.

なので、それっぽいプロパティーないかなあ。

と思って手が止まってます。

刀剣乱舞 Linked Data 試作への道 の前置き その1

前にこういうツイートをしたことがありました。

ということで、ちょっと真面目に手をつけてみようと思います。

目標(というかねらい)

  • 刀剣男士(※刀剣乱舞のキャラクター)をRDFの枠組みで記述する
  • 刀剣男士とそのもとになった刀剣の関係を記述する できたら、その旧蔵者とか現所蔵機関についても記述する
  • 原作(刀剣乱舞-ONLINE-)と派生作品の関係についても記述する

動機(きっかけ)

というほどのものでもないのですが。

  • ししょまろはん京都が出てくる本のデータというのをRDF化してCC BYで公開しているのをどこかで見た。
  • 刀剣乱舞というもののおかげで博物館がにぎわっているらしいというのを聞いた
  • 軽い気持ちで刀剣乱舞を始めてみた
  • なぜか仕事で日本刀の記事を書くことになった
  • 仕事でちょっとだけ Linked Open Data に関わったりした
  • LODチャレンジ のページを見ていて、im@sparqlを見つけてこれいいじゃん!と思った
  • 初期刀が極になった
  • どれだけ鍛刀しても白山吉光が来ないし、大阪城の地下から毛利藤四郎は出てこない
  • 描けば来るというが絵は描けない
  • だったらトリプルを書こう

なんだそれ。

というわけでTutrleを書く

何も考えずに思いつくままにトリプルを書いてみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <http://schema.org/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix dbpedia-ja: <http://ja.dbpedia.org/resource/> .
@prefix pixiv-dic: <https://dic.pixiv.net/a/> .
@prefix ex: <https://example.com/ns/> .

ex:刀剣乱舞 a schema:Game ;
rdfs:seeAlso dbpedia-ja:刀剣乱舞 ;
foaf:isPrimaryTopicOf pixiv-dic:刀剣乱舞 ;
schema:character ex:加州清光 .
ex:加州清光 a ex:刀剣男士 ;
rdfs:label "加州清光" ;
schema:name "加州清光"@ja ;
schema:name "かしゅう きよみつ"@ja-hrkt ;
schema:actor dbpedia-ja:増田俊樹 ;
foaf:isPrimaryTopicOf pixiv-dic:加州清光%28刀剣乱舞%29 .
ex:刀剣男士 rdfs:subClassOf schema:Person;
foaf:isPrimaryTopicOf pixiv-dic:刀剣男士 .

図示すると次のようになります。

ARC2によるRDFグラフの視覚化を使用させていただきました

疑問点

ここまで書いて次の疑問が。

  • 刀剣男士はそもそも schema:Person として扱ってよいのか?
  • 派生作品で演者が異なる場合、 schema:actor を併記するのか?
  • そもそも原作と派生作品の同一キャラクターは同じエンティティとして表現できるのか? ※例えばアニメ版とミュージカル版

謎は尽きない……

NDC.DEVのAPIでNDLサーチを拡張してみるテスト(その3):Chrome拡張編

NDC.DEVのAPIでNDLサーチを拡張してみるテスト(その2)

カーリルさんがNDC8版/9版のAPIを ndc.dev として公開しているので、国立国会図書館サーチで表示されるNDC情報を拡張してみた、の第2弾というものになります。 NDC8/9版にラベルを表示するとともに、上位項目+下位項目(とラベル)を表示できるようにしてみました。

書誌詳細画面を開いた状態で開発者ツールを起動しコンソールに下の方のコードを入れると、NDC関係のラベルが前よりもうちょっとリッチになるはずです。

  • Before:
  • After:

あとは、Chrome拡張にするとかすればよいでしょうかね。

Read More

NDC.DEVのAPIでNDLサーチを拡張してみるテスト(その1)

カーリルさんの ndc.dev で、JLAさんのNDC-LDをAPIにしていたので、日頃なじみのある国立国会図書館サーチのNDC情報を拡張してみた、というものになります。

書誌詳細画面を開いた状態で開発者ツールを起動しコンソールに以下を入れると、NDC関係のラベルがちょっとリッチになるはずです。

(※もともとは要目表(第3次区分表)までのラベルが表示)

Read More

Hexoのコマンドメモ

Hexoのコマンドについて自分用にメモ。 Source: https://hexo.io/docs/commands.html

Hexoのディレクトリで以下を実行。

  • 新規記事を作成

    hexo n <記事名>
  • 新規固定ページを作成

    hexo n page [-p <パス>] <記事名>
  • 静的ファイル作成

    hexo g
  • ローカル環境でプレビュー

    hexo

ついでに

  • Firebase Hostingへのデプロイ手順

    Firebaseのプロジェクトディレクトリに移動して

    firebase deploy

Hexoでブログを立ち上げてみた

取得したものの使っていないドメインがあり、せっかくなのでブログを立ち上げてみた。 これといって書くこともないのだけれど、自分用の備忘録と言うことで。 あとはせっかくパソコンを新調したので使用頻度を増やそうと。

Wordpress とか MovableType は使ったことがあるのだけれども、せっかくなので Static Site Generator を使ってみることに。

使用したのはHexoでサーバーはFireBase Hosting。 テーマはデフォルトの Landscape でヘッダ部分のCSS(正確にはStylusか)だけ手を入れてみた。

執筆はVisual Studio Codeを使い、WSLで入れたUbuntuにNode.jsを入れてHexoとFirebase CLIを動かしている。

Linuxを使ったことがあまりないので四苦八苦したものの、まあなんとかなった。

とまあ、こんな感じだろうか。 いちいちブラウザを開いたりマウスをかちかちしなくてよいのは嬉しい。