タグ(Tag)の定義
つまり、あるタグの情報から、それに対応するエンティティを一意に特定できるし
逆も然り; あるエンティティから、それに対応するタグの情報を一意に特定できる。
Q. こうするとタグはもはやただの文字列以上の存在になってしまう
扱いづらくないか...?
タグを複数重ね合わせて表現した方がいいんじゃないか?
しかしそれはそれで、重ね合わせ方が難しい。
以下の二つのデータで一意に表現されるタグを、基礎タグという。 種類(kind) e.g. Ability, Title, Level
デフォルト名(可読な文字列) e.g. bomb, artist, the_true_arena {kind}#{default_name}という形式で、タグを記述する。 /icons/notepad.icon 例
---> タグMediaOwner#tw@projectappbirdが対応
---> タグ Category#wiidx::thetruearena::taが対応
wiidx::the_true_arena::taがデフォルト名
しかし、このタグのままでは一意に表せない概念が出てくる。 Ability#star-allies::the-ultimate-choice::Bomb, Ability#discovery::coliseum::Bombというふうにしてデフォルト名を用いて判別すると.... 非効率的。
検索候補を出すときに特に厄介。
候補を絞り込めず、結果としてサーバーに転送するデータが大きくなる。
入力する時にも、作品名を先に入力していた際には冗長になる。
タイトル名に万が一間違いがあった場合、修正が困難。
/icons/notepad.icon(カテゴリでは、ユースケース上これらが問題になりにくいので、わざわざこの形を採用している。)
依存先の導入による改良
そこで、このようなエンティティに対しては、さらに以下の情報を付け加える。 /icons/notepad.icon 例
Ability#Hypernova in Category#tdx::main_mode::Any%
実名データ
日本語名 e.g. ボム, アーティスト, 星のカービィWii::真 格闘王への道
日本語略称(任意) e.g. 真格, 真かち
英語名 e.g. Bomb, Artist, Kirby's Return to Dreamland, The True Arena
英語略称(任意) e.g. TTA, TTA
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;
}
code:ts
interface CompleteTag extends Tag {
actual_name: ActualName;
}