Overview
This article introduces how to describe a hierarchical table of contents using the Omeka S IIIF Server module.
Documentation
The documentation is somewhat complex, but explanations are available at:
Simple Table of Contents
The following example from “Toyo Bunko Media Repository” is used:
https://app.toyobunko-lab.jp/s/main/document/9f9d95c2-d33d-7402-742b-47db12748688
Specify {Range ID},{Range name},{Canvas index} as follows:
r1,延享、寛延、宝暦,1
r2,明和,25
r3,安永一,55
r4,安永二,79
r5,天明一,110
r6,天明二,142
r7,寛政一,177
r8,寛政二,218
r9,享和,255
r10,文化一,279
r11,文化、文政、二,313
This results in the following table of contents display:

Hierarchical Table of Contents
The following example is used:
https://app.toyobunko-lab.jp/s/main/document/4797b8ca-530f-8aae-f252-7911ad64039b
To describe a hierarchical table of contents, prepare data with four columns as follows:
r0, 全体,-, r1;r2;r29;r55;r73
r1, 目次, 4-8, -
r2, 第一、 蒙疆政府ノ司法制度…一頁, -, r3;r4;r9;r14;r15
r3, 一、 司法制度ノ沿革…一, 8-10, -
r4, 二、 司法關係機關…四, -, r5;r6;r7;r8
r5, (一) 司法部…四, 10, -
r6, (二) 法院…四, 10-11, -
r7, (三) 縣旗司法機關…六, 11, -
r8, (四) 行刑機關…七, 11-12, -
r9, 三、 司法事務…八, -, r10;r11;r12;r13
r10, (一) 刑事事件…八, 12, -
r11, (二) 民事事件…九, 12, -
r12, (三) 行刑事務…九, 12-14, -
r13, (四) 登記…一二, 14-15, -
r14, 四、 司法經費…一四, 15-16, -
The fourth column specifies the Range IDs of child elements. With indentation, it looks like this:
r0, 全体,-, r1;r2;r29;r55;r73
r1, 目次, 4-8, -
r2, 第一、 蒙疆政府ノ司法制度…一頁, -, r3;r4;r9;r14;r15
r3, 一、 司法制度ノ沿革…一, 8-10, -
r4, 二、 司法關係機關…四, -, r5;r6;r7;r8
r5, (一) 司法部…四, 10, -
r6, (二) 法院…四, 10-11, -
r7, (三) 縣旗司法機關…六, 11, -
r8, (四) 行刑機關…七, 11-12, -
r9, 三、 司法事務…八, -, r10;r11;r12;r13
r10, (一) 刑事事件…八, 12, -
r11, (二) 民事事件…九, 12, -
r12, (三) 行刑事務…九, 12-14, -
r13, (四) 登記…一二, 14-15, -
r14, 四、 司法經費…一四, 15-16, -
This results in the following hierarchical table of contents display:

The table of contents data created in the IIIF manifest file is as follows. Note that the first Range “All” with viewingHint set to top is not displayed in the viewer:
{
"structures": [
{
"@id": "https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r0",
"@type": "sc:Range",
"label": "全体",
"viewingHint": "top",
"ranges": [
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r1",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r2",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r29",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r55",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r73"
]
},
{
"@id": "https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r1",
"@type": "sc:Range",
"label": "目次",
"canvases": [
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p4",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p5",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p6",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p7",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p8"
]
},
{
"@id": "https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r2",
"@type": "sc:Range",
"label": "第一、 蒙疆政府ノ司法制度…一頁",
"ranges": [
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r3",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r4",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r9",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r14",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r15"
]
},
{
"@id": "https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r3",
"@type": "sc:Range",
"label": "一、 司法制度ノ沿革…一",
"canvases": [
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p8",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p9",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p10"
]
},
{
"@id": "https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r4",
"@type": "sc:Range",
"label": "二、 司法關係機關…四",
"ranges": [
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r5",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r6",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r7",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r8"
]
},
{
"@id": "https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r5",
"@type": "sc:Range",
"label": "(一) 司法部…四",
"canvases": [
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p10"
]
},
{
"@id": "https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/range/r6",
"@type": "sc:Range",
"label": "(二) 法院…四",
"canvases": [
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p10",
"https://app.toyobunko-lab.jp/iiif/2/4797b8ca-530f-8aae-f252-7911ad64039b/canvas/p11"
]
}
]
}
Notes
As mentioned above, the table of contents specified on the first line is assigned viewingHint of top and is not displayed in the viewer.
Therefore, you need to add a line representing the overall structure on the first line, as in the following example:
r0, 全体,-, r1;r2;r29;r55;r73
In the previous version of the IIIF Server module, writing data as shown below worked without issues, but at some point an update changed how the first line is processed:
r1, 目次, 4-8
r2, 第一、 蒙疆政府ノ司法制度…一頁,r3;r4;r9;r14;r15
r3, 一、 司法制度ノ沿革…一, 8-10
r4, 二、 司法關係機關…四,r5;r6;r7;r8
r5, (一) 司法部…四,10
Similarly, the example above uses three columns, but due to the update, four-column data is now required:
{Range ID},{Range name},{Canvas index},{Child Range IDs}
As a result, with the old format (three columns), r1, r3, and r5 (which specify Canvas indices in the third column) display correctly, while r2 and r4 (which specify child Range IDs in the third column) do not display correctly.
Summary
When describing a hierarchical table of contents using the latest IIIF Server module as of June 2025, you need to be aware of how the first line is handled and that data must be written in four columns.
I hope this serves as a useful reference for using the Omeka S IIIF Server module.