Let's analyze Taxonomy!

生き物の分類体系を探究します。


管理者権限が必要なため、LLM生成候補ボタンは無効化されています。

分類体系の入れ子構造

生物分類は、界、門、綱、科、属、種、品種の順に親子関係をたどる階層構造です。 この画面では、その分類としての正しさを TaxonomyHierarchy で守り、 d3 に渡しやすい nodes/edges 形式を TaxonomyGraph として扱います。

TaxonomyHierarchyItem は各階層の idname をまとめた値です。 その item を固定順で包む TaxonomyHierarchy がドメイン側の表現で、 表示するときだけ TaxonomyGraph へ変換します。

TaxonomyHierarchy は分類ドメインの正しさを守る形です。 界、門、綱、科、属、種、品種という順序を保ち、分類の親子関係を入れ子として扱います。 TaxonomyGraph は同じ分類体系を可視化へ渡しやすい形に変換したものです。

BreedEntity
+-- TaxonomyHierarchy
    +-- TaxonomyHierarchyItem(kingdom)
        +-- source_id
        +-- name
    +-- TaxonomyHierarchyItem(phylum)
        +-- source_id
        +-- name
    +-- TaxonomyHierarchyItem(classification)
        +-- source_id
        +-- name
    +-- TaxonomyHierarchyItem(family)
        +-- source_id
        +-- name
    +-- TaxonomyHierarchyItem(genus)
        +-- source_id
        +-- name
    +-- TaxonomyHierarchyItem(species)
        +-- source_id
        +-- name
    +-- TaxonomyHierarchyItem(breed)
        +-- source_id
        +-- name
            |
            v
TaxonomyGraph
+-- nodes: TaxonomyGraphNode[]
+-- edges: TaxonomyGraphEdge[]
    |
    +-- d3 などの表示ライブラリへ渡しやすい

nodes は分類名そのものを表す点で、edges は点と点をつなぐ親子関係の線です。 たとえば「動物界」「脊索動物門」「鳥綱」はそれぞれ node になり、 「動物界から脊索動物門へ」「脊索動物門から鳥綱へ」というつながりが edge になります。

node: 動物界
  |
  | edge: 動物界 -> 脊索動物門
  v
node: 脊索動物門
  |
  | edge: 脊索動物門 -> 鳥綱
  v
node: 鳥綱

idname をばらばらの値として運ぶのではなく、TaxonomyHierarchyItem として1つの意味を持つ値にまとめます。 その item の並びを TaxonomyHierarchy として扱い、必要なときだけ nodes/edges 形式の TaxonomyGraph へ変換します。 鶏の飼養分布や観察記録は、鶏の観察グラフページに分けて確認できます。

分類グラフ

nodes/edges 形式の分類データを Force-directed graph として表示します。

この分類グラフは D3 の Force-directed graph を使い、親子関係を link として可視化しています。 グラフの余白をドラッグすると表示位置を移動でき、点をドラッグすると配下の点もまとめて位置を調整できます。