タグ(Tag)の定義
from エンティティ(実体; Entity)の定義
タグ(Tag)の定義
ざっくり: エンティティの名前をデータ化したもので、エンティティと一対一対応する
エンティティはそれそのままではデータとして扱えないため、まずは属性を与え管理を行う。
#2023-03-21 エンティティと一対一対応することを定義に付け加える。
定義 | タグ(Tag)
あるエンティティを表現するデータの組をタグと呼ぶ。
タグとエンティティは一対一対応する。
つまり、あるタグの情報から、それに対応するエンティティを一意に特定できるし
逆も然り; あるエンティティから、それに対応するタグの情報を一意に特定できる。
Q. こうするとタグはもはやただの文字列以上の存在になってしまう
扱いづらくないか...?
タグを複数重ね合わせて表現した方がいいんじゃないか?
しかしそれはそれで、重ね合わせ方が難しい。
補完によってサポートする必要がありそうだ。
定義 | 基礎タグ(Basic Tag)
以下の二つのデータで一意に表現されるタグを、基礎タグという。
種類(kind) e.g. Ability, Title, Level
デフォルト名(可読な文字列) e.g. bomb, artist, the_true_arena
定義 | 基礎タグの表現(Representation for Basic Tag)
{kind}#{default_name}という形式で、タグを記述する。
/icons/notepad.icon 例
メディア投稿者であるTwitterアカウント上の@projectappbird
---> タグMediaOwner#tw@projectappbirdが対応
カテゴリである「星のカービィWiiの真格闘王への道のTA」
---> タグ Category#wiidx::thetruearena::taが対応
カテゴリ(Category)の定義
wiidx::the_true_arena::taがデフォルト名
定義 | 従属タグ(Dependent Tag)
基礎タグの限界
しかし、このタグのままでは一意に表せない概念が出てくる。
例えば、Ability#Bombという指定のままでは、スタアラのThe アルティメットチョイスのものなのか、ディスカバのコロシアムものなのか判別がつかない。
Ability#star-allies::the-ultimate-choice::Bomb, Ability#discovery::coliseum::Bombというふうにしてデフォルト名を用いて判別すると.... 非効率的。
検索性も良くない。
検索候補を出すときに特に厄介。
候補を絞り込めず、結果としてサーバーに転送するデータが大きくなる。
入力する時にも、作品名を先に入力していた際には冗長になる。
タイトル名に万が一間違いがあった場合、修正が困難。
/icons/notepad.icon(カテゴリでは、ユースケース上これらが問題になりにくいので、わざわざこの形を採用している。)
依存先の導入による改良
そこで、このようなエンティティに対しては、さらに以下の情報を付け加える。
タグの依存先/文脈 -- context(カテゴリを表すタグ)
そのタグに対応するエンティティの前提となるエンティティを示す。
あるタグが別のタグに依存する構図になる。
一つのタグは、多くとも1つの依存先しか持たない。
/icons/notepad.icon 例
コピー能力であるビッグバンは、カテゴリであるメインモード(星のカービィ トリプルデラックス)に依存している。
Ability#Hypernova in Category#tdx::main_mode::Any%
以下のエンティティに対するタグだけが、従属タグである。
コピー能力
レベル
シングルセグメント
そのほかは基本タグで表現することができる。
定義 | 完備タグ(Complete Tag)
ざっくり: 名札につけられたデフォルトの名前の他に、詳細な名前データが加わった名札。
通常の名札に、以下の実名(actual name)データも付け加えてタグを表現することがある。
このようなタグを完備タグという。
実名データ
日本語名 e.g. ボム, アーティスト, 星のカービィWii::真 格闘王への道
日本語略称(任意) e.g. 真格, 真かち
英語名 e.g. Bomb, Artist, Kirby's Return to Dreamland, The True Arena
英語略称(任意) e.g. TTA, TTA
実名(ActualName)の定義
hr.icon
データ構造について
タグ/名札
以下において、タグ種別(名札種別)TagKindは文字列リテラル型のユニオン型であるような型。
タグ種別型
Tag
code:ts
interface TagIndicator{
kind: TagKind;
id: TagID;
}
interface Tag{
id: TagID;
kind: TagKind;
default_name: string;
depend_on?: Tag;
}
interface BasicTag{
id: TagID;
kind: TagKind;
default_name: string;
}
interface DependentTag{
id: TagID;
kind: TagKind;
default_name: string;
depend_on: Tag;
}
完備な名札
タグ(Tag)の定義, 実名(ActualName)の定義に依存する。
完備な名札はタグでもある。
code:ts
interface CompleteTag extends Tag {
actual_name: ActualName;
}