【和訳】Omeka S IIIF Serverモジュールの目次情報の追加方法

Omeka S IIIF Serverモジュールの目次情報の追加方法に関するマニュアルの和訳です。公式のマニュアルは以下です。

 

github.com

 

本モジュールを用いて、IIIFマニフェストに目次情報を追加する際の参考になりましたら幸いです。

 

Config options for manifest

Input format of the property for structures (table of contents)

構造(目次)のプロパティの入力形式

デフォルトの構造は、iiifメディアの単純なシーケンシャルリストです。

目次を使用して複雑なドキュメントの構造を構築するには、特定のプロパティを使用して、必要なjsonを値に入力するか、次の形式のリテラル値を入力します。各行は構造(目次)の一部です。

 

{id}, {label}, {canvasIndexOrRangeId1}; {canvasIndexOrRangeId2}; ...; {canvasIndexOrRangeIdN} 

 

例:

 

cover, Front Cover, 1
r1, Introduction, 2; 3; 4; 5
backCover, Back Cover, 6

 

Range ID(行の最初の部分)は、URIの作成に使用されるRangeの名前です。他のインデックスとの衝突を避けるために、数値であってはなりません。スペース、発音区別符号、またはその他の特殊文字を含まない単純な英数字の名前である必要があります(すべてのコーディング規約において非常に安定しています)。「/」を含めることはできません。とにかく、この名前は最後のuriでURLエンコードされます。

さらに、Range IDはすべてのアイテムで一意である必要があります。

入力を省略した場合、行番号が使用されます。その場合、特定のRange名がないことを示すために最初のコンマを残してください。たとえば上記で`r1`が指定されていない場合、Range IDは`r2`になります。Rangeを指す`r`と2行目を指す`2`から構成されます。ただし、新しい行が挿入されるとURIが変更されるため、この方法はお勧めしません。

各行の2番目の部分は、章などのRangeのラベルです。空の場合、IIIFマニフェスト内容には記述されますが、IIIF対応ビューアなどでは表示されません。

各行の最後の部分は、現在の範囲に含まれる上位のCanvasまたは上位のRangeのリストであるため、基本的には画像とサブセクションのリストです。

ほとんどの場合、Canvasインデックスはメディアの位置です。iiifで使用されているメディアのみが列挙され、アイテムに添付されているpdf、xmlなどの特定のメディアは列挙されないため、添付メディアのリストのOmeka内部位置とは異なる可能性がある点に注意してください。他のインデックスは、Range ID(各行の最初の部分)のリストにある場合、Rangeインデックスとして管理されます。そうでない場合は、Canvasの英数字の名前になります。

最初の行の最初のRange IDは、ツリーのルートです。ルートは1つだけです。複数のルートがある場合(以下を参照)、すべてのルートをブランチとしてメイン範囲が追加されます。

したがって、このリテラル値から複雑な階層的な目次を作成することが可能です。以下は、不完全で誤った例を使用します。

 

toc, Table of Contents, cover; intro; r1; r2; backcover
    cover, Front cover, cover
    intro, Introduction, 2-5
    r1, First chapter, 6; r1-1; r1-2; 12
        r1-1, First section, r1-1-1; r1-1-2; illustration1; illus2
            r1-1-1, First sub-section, 8-9
            r1-1-2, Second sub-section, 9-10
    r2, Second chapter, 13
    backcover, Back cover, "backcover"
illustration1, First illustration non paginated, illus1
illustration3, Third illustration non paginated, illus3

 

iiif v2のjson出力例:

 

[
  {
    "@id": "https://example.org/iiif/book1/range/toc",
    "@type": "sc:Range",
    "label": "Table of Contents",
    "ranges": [
      {
        "@id": "https://example.org/iiif/book1/range/cover",
        "@type": "sc:Range",
        "label": "Front cover",
        "ranges": [
          {
            "@id": "https://example.org/iiif/book1/range/cover",
            "@type": "sc:Range",
            "label": "Front cover"
          }
        ]
      },
      {
        "@id": "https://example.org/iiif/book1/range/intro",
        "@type": "sc:Range",
        "label": "Introduction",
        "canvases": [
          "https://example.org/iiif/book1/canvas/p2",
          "https://example.org/iiif/book1/canvas/p3",
          "https://example.org/iiif/book1/canvas/p4",
          "https://example.org/iiif/book1/canvas/p5"
        ]
      },
      {
        "@id": "https://example.org/iiif/book1/range/r1",
        "@type": "sc:Range",
        "label": "First chapter",
        "members": [
          {
            "@id": "https://example.org/iiif/book1/canvas/p6",
            "@type": "sc:Canvas",
            "label": "[6]"
          },
          {
            "@id": "https://example.org/iiif/book1/range/r1-1",
            "@type": "sc:Range",
            "label": "First section",
            "members": [
              {
                "@id": "https://example.org/iiif/book1/range/r1-1-1",
                "@type": "sc:Range",
                "label": "First sub-section",
                "canvases": [
                  "https://example.org/iiif/book1/canvas/p8",
                  "https://example.org/iiif/book1/canvas/p9"
                ]
              },
              {
                "@id": "https://example.org/iiif/book1/range/r1-1-2",
                "@type": "sc:Range",
                "label": "Second sub-section",
                "canvases": [
                  "https://example.org/iiif/book1/canvas/p9",
                  "https://example.org/iiif/book1/canvas/p10"
                ]
              },
              {
                "@id": "https://example.org/iiif/book1/range/illustration1",
                "@type": "sc:Range",
                "label": "First illustration non paginated",
                "canvases": [
                  "https://example.org/iiif/book1/canvas/illus1"
                ]
              },
              {
                "@id": "https://example.org/iiif/book1/canvas/illus2",
                "@type": "sc:Canvas",
                "label": "illus2"
              }
            ]
          },
          {
            "@id": "https://example.org/iiif/book1/canvas/r1-2",
            "@type": "sc:Canvas",
            "label": "r1-2"
          },
          {
            "@id": "https://example.org/iiif/book1/canvas/p12",
            "@type": "sc:Canvas",
            "label": "[12]"
          }
        ]
      },
      {
        "@id": "https://example.org/iiif/book1/range/r2",
        "@type": "sc:Range",
        "label": "Second chapter",
        "canvases": [
          "https://example.org/iiif/book1/canvas/p13"
        ]
      },
      {
        "@id": "https://example.org/iiif/book1/range/backcover",
        "@type": "sc:Range",
        "label": "Back cover",
        "canvases": [
          "https://example.org/iiif/book1/canvas/backcover"
        ]
      }
    ]
  },
  {
    "@id": "https://example.org/iiif/book1/range/illustration3",
    "@type": "sc:Range",
    "label": "Third illustration non paginated",
    "canvases": [
      "https://example.org/iiif/book1/canvas/illus3"
    ]
  }
]

 

または、iiif v3のjson出力例。この場合、少し冗長になります。

 

[
  {
    "id": "https://example.org/iiif/book1/range/rstructure1",
    "type": "Range",
    "label": { "none": [ "Content" ] },
    "items": [
      {
        "id": "https://example.org/iiif/book1/range/toc",
        "type": "Range",
        "label": { "none": [ "Table of Contents" ] },
        "items": [
          {
            "id": "https://example.org/iiif/book1/range/cover",
            "type": "Range",
            "label": { "none": [ "Front cover" ] },
            "items": [
              { "id": "https://example.org/iiif/book1/canvas/cover", "type": "Canvas" }
            ]
          },
          {
            "id": "https://example.org/iiif/book1/range/intro",
            "type": "Range",
            "label": { "none": [ "Introduction" ] },
            "items": [
              { "id": "https://example.org/iiif/book1/canvas/p2", "type": "Canvas" },
              { "id": "https://example.org/iiif/book1/canvas/p3", "type": "Canvas" },
              { "id": "https://example.org/iiif/book1/canvas/p4", "type": "Canvas" },
              { "id": "https://example.org/iiif/book1/canvas/p5", "type": "Canvas" }
            ]
          },
          {
            "id": "https://example.org/iiif/book1/range/r1",
            "type": "Range",
            "label": { "none": [ "First chapter" ] },
            "items": [
              { "id": "https://example.org/iiif/book1/canvas/p6", "type": "Canvas" },
              {
                "id": "https://example.org/iiif/book1/range/r1-1",
                "type": "Range",
                "label": { "none": [ "First section" ] },
                "items": [
                  {
                    "id": "https://example.org/iiif/book1/range/r1-1-1",
                    "type": "Range",
                    "label": { "none": [ "First sub-section" ] },
                    "items": [
                      { "id": "https://example.org/iiif/book1/canvas/p8", "type": "Canvas" },
                      { "id": "https://example.org/iiif/book1/canvas/p9", "type": "Canvas" }
                    ]
                  },
                  {
                    "id": "https://example.org/iiif/book1/range/r1-1-2",
                    "type": "Range",
                    "label": { "none": [ "Second sub-section" ] },
                    "items": [
                      { "id": "https://example.org/iiif/book1/canvas/p9", "type": "Canvas" },
                      { "id": "https://example.org/iiif/book1/canvas/p10", "type": "Canvas" }
                    ]
                  },
                  {
                    "id": "https://example.org/iiif/book1/range/illustration1",
                    "type": "Range",
                    "label": { "none": [ "First illustration non paginated" ] },
                    "items": [
                      { "id": "https://example.org/iiif/book1/canvas/illus1", "type": "Canvas" }
                    ]
                  },
                  { "id": "https://example.org/iiif/book1/canvas/illus2", "type": "Canvas" }
                ]
              },
              { "id": "https://example.org/iiif/book1/canvas/r1-2", "type": "Canvas" },
              { "id": "https://example.org/iiif/book1/canvas/p12", "type": "Canvas" }
            ]
          },
          {
            "id": "https://example.org/iiif/book1/range/r2",
            "type": "Range",
            "label": { "none": [ "Second chapter" ] },
            "items": [
              { "id": "https://example.org/iiif/book1/canvas/p13", "type": "Canvas" }
            ]
          },
          {
            "id": "https://example.org/iiif/book1/range/backcover",
            "type": "Range",
            "label": { "none": [ "Back cover" ] },
            "items": [
              { "id": "https://example.org/iiif/book1/canvas/backcover", "type": "Canvas" }
            ]
          }
        ]
      },
      {
        "id": "https://example.org/iiif/book1/range/illustration3",
        "type": "Range",
        "label": { "none": [ "Third illustration non paginated" ] },
        "items": [
          { "id": "https://example.org/iiif/book1/canvas/illus3", "type": "Canvas" }
        ]
      }
    ]
  }
]

変換方法を理解し、リテラルデータからの問題を修正するための注意事項:

  • 名前付きキャンバスはサポートされていない可能性があるため、回避する必要がある場合があります。
  • インデントは必須ではありませんが、みやすくなります。
  • パーサーが構造を理解できるように、行は目次または索引として順序付けする必要があります。
  • ユーザーにはRangeのみが表示されるため、単一のCanvasを参照している場合でも、各行はRangeになります。つまり、Front Cover、Second chapter、illustrationは、Canvasという1つのアイテムを含むRangeです。
  • いくつかの欠落したページがあります(スキャンされていないか失われているのかもしれません)。
  • 今回の例では、名前に意味( "r1-1-1")を与えていますが、必須ではありません。
  • coverはそれ自体を参照しているため、Range内の名前付きCanvasです。これはiiifv2では不可能なので、二重引用符で囲みます。
  • backcoverは、強制的にCanvasにするために、二重引用符で囲みます。
  • sub-sectionは1ページ(9番目のCanvas)を共有します。
  • First chapterのRange ID「r1-2」が欠落しているため、名前付きCanvasとして扱われます。
  • Index「12」はCanvasであるため、IIIFマニフェスト内のリストには追加されますが、IIIF対応ビューアには表示されません。
  • 「illus1」はRangeではないため、「illustration1」には名前付きCanvasが与えられます。
  • First sectionのインデックス「illustration1」はRangeですが、First sectionの直下のリストにはありません。したがって、適切な場所に直接追加され、最後から削除されます。
  • Illustration3はRangeとして使用されていないため、ルートであり、複数のルートがあるため、すべての構造をラップするために範囲が追加されます。

ネストされた構造に注意してください。アイテムはそれ自体に属していてはなりません。そうでない場合、アイテムはキャンバスとして管理されます。

もちろん、リテラル構造が適切に形成されている場合は、これらの修正を考慮する必要はありません。

それ以外の場合、IIIF v3では、アイテムに複数の値がある場合に、複数の構造(目次)が追加されます。たとえば、新聞では、一般的な目次のようにページごとの構造と、記事ごとの構造を持つことができます。実際、記事は複数の非連続ページに書き込むことができ、ページには多くの記事、イラスト、広告などを含めることができます。複数の構造(目次)がある場合、Rangeの名前は各構造(目次)間で同じ意味を持つ必要があります(たとえば、インデックス「カバー」はすべての構造のフロントカバーである必要があります)。これは、それらのuriが同じになるためです。

詳細については、IIIFプレゼンテーション2.1およびIIIFプレゼンテーション3.0構造に関する情報をご確認ください。