🙄

Romaを使ってプロジェクトに応じたタグを限定し、解説を作成する

2023/11/03に公開

概要

以下の記事で、Romaの使い方を説明しました。

https://zenn.dev/nakamura196/articles/287e392da1e6ab

今回は、手元にあるTEI/XMLを対象として、TEI ODD (One Document Does-it-all)や解説(HTMLやPDF)の作成に関する一連の流れを説明します。

なお、ODD (One Document Does it all) と RNG (RelaxNG) の違いについて、GPT-4による回答結果を末尾に掲載しています。こちらも参考にしてください。

使用するタグの一覧を取得する

まず、プロジェクトで使用するタグの一覧を取得します。

今回、手元にあるTEI/XMLを対象として、使用されているタグの一覧を取得するライブラリおよびチュートリアル用のノートブックを作成しました。

ライブラリ

https://nakamura196.github.io/gdb-utils/

チュートリアル用のノートブック

https://colab.research.google.com/github/nakamura196/000_tools/blob/main/TEIでタグの使用頻度を分析するチュートリアル.ipynb

例えば、上記のノートブックを実行すると、以下のような結果が得られます。以下は、対象としたTEI/XMLファイル中に含まれるタグとその頻度を取得し、その結果をタグの名前について昇順で取得したものです。

index Tag Count
0 TEI 1
18 addrLine 1
17 address 1
50 app 8
5 author 2
58 back 1
36 bibl 1
47 body 1
56 closer 1
44 correspAction 2
43 correspDesc 1
20 country 1
33 date 6
26 dimensions 1
19 district 1
54 div 1
37 editor 1
40 editorialDecl 1
39 encodingDesc 1
25 extent 2
2 fileDesc 1
29 handDesc 1
30 handNote 1
27 height 1
31 history 1
21 idno 2
16 institution 1
55 lb 13
51 lem 8
59 listPerson 1
12 listWit 1
45 location 1
14 msDesc 1
15 msIdentifier 1
23 objectDesc 1
48 opener 1
32 origin 1
...

Romaでタグを限定したODDファイルを作成する

上記で取得したタグに限定したODDファイルを、Romaというツールを用いて作成します。

https://roma.tei-c.org/

Romaの使い方については、以下の記事を参考にしてください。

https://zenn.dev/nakamura196/articles/287e392da1e6ab

具体的には、使用するタグ(以下の例では、addressaddrLine)にチェックを入れていきます。

この時、先にリストアップしたタグについて、手動で一つ一つチェックを入れていく作業は手間がかかります。そこで、これを自動化するスクリプトを作成する機能をライブラリに含めています。ノートブックにも実行例を含めていますが、以下のようなスクリプトを取得できます。

function checkCheckboxesWithTextValues(textValues) {
    // 存在しなかった要素名を格納する配列
    let notFound = [];

    // 指定されたテキスト値のリストをループ処理
    textValues.forEach(function(textToMatch) {
        // テキストに一致する .mdc-list-item__primary-text 要素を取得
        let found = false;
        document.querySelectorAll('.mdc-list-item__primary-text').forEach(function(item) {
            if (item.textContent.trim() === textToMatch) {
                found = true;
                let checkbox = item.closest('.mdc-list-item').querySelector('.mdc-checkbox__native-control');
                if (checkbox) {
                    checkbox.checked = true;
                }
            }
        });

        // 要素が見つからなければ notFound 配列に追加
        if (!found) {
            notFound.push(textToMatch);
        }
    });

    // 存在しなかった要素名を返す
    return notFound;
}

// 指定したいテキスト値のリスト
const itemsToCheck = ["TEI", "addrLine", "address", "app", "author", "back", "bibl", "body", "closer", "correspAction", "correspDesc", "country", "date", "dimensions", "district", "div", "editor", "editorialDecl", "encodingDesc", "extent", "fileDesc", "handDesc", "handNote", "height", "history", "idno", "institution", "lb", "lem", "listPerson", "listWit", "location", "msDesc", "msIdentifier", "objectDesc", "opener", "origin", "p", "persName", "person", "physDesc", "placeName", "profileDesc", "provenance", "publicationStmt", "publisher", "rdg", "resp", "respStmt", "salute", "signed", "sourceDesc", "space", "supportDesc", "teiHeader", "text", "title", "titleStmt", "variantEncoding", "width", "witness"];

// チェックしたい項目のリストを関数に渡し、存在しなかった項目を取得
const itemsNotFound = checkCheckboxesWithTextValues(itemsToCheck);

// 存在しなかった項目をコンソールに出力
if (itemsNotFound.length > 0) {
    console.log('These items were not found:', itemsNotFound);
} else {
    console.log('All items were found and checked.');
}

上記のスクリプトを、Google Chromeをお使いであれば、「ディベロッパー ツール」を開き、「コンソール」タブを開き、上記のスクリプトを貼り付けます。

結果、リストアップしたタグに対して、自動でチェックがつきます。

ODDファイルの保存

上記まで実施した後、「ODDとしてカスタマイズ」を押して、ODDファイルをダウンロードします。このファイルを再度Romaにアップロードすることで、カスタマイズを継続して行うことができます。

解説(HTML)版の取得

また、「解説(HTML版)」を押すと、HTMLファイルがダウンロードされます。本ファイルをブラウザで開くと、以下のように、限定したタグに限ったタグの説明が一覧表示されます。

本ファイルをTEI/XMLファイルの編集者と共有することで、マニュアルの代わりとして使用できる可能性があります。

RNGファイルの利用

RomaのダウンロードオプションとしてRELAX NGスキーマも用意されています。本ファイルは以下の記事で紹介したように、TEI/XMLファイルに本ファイルへの情報を追記することにより、VSCodeやOxygen XML EditorなどでのValidation(検証)に利用することができます。具体的には、ODDに含まれていないタグを入力すると、エラーが表示されるようになります。

https://zenn.dev/nakamura196/articles/287e392da1e6ab

まとめ

ODDについては理解が不十分の点も多く、誤った記述があるかもしれません。ただ、ODDファイルの作成や応用について参考となる部分がありましたら幸いです。

今後は、各要素の属性のカスタマイズや、特定の属性に入力可能な値のカスタマイズなど、引き続き色々と試してみたいと思います。

参考: TEIのODDとRNGの違い(GPT-4による回答)

TEI (Text Encoding Initiative) は、学術的なテキストのデジタル化や電子テキストの研究を目的としたマークアップ言語のガイドラインセットです。XML(Extensible Markup Language)を基盤としています。TEIのカスタマイズのためには、ODD (One Document Does it all) と RNG (RelaxNG) という2つの異なる技術が関連します。以下、それぞれの説明です。

  1. ODD (One Document Does it all):

    • ODDはTEIのカスタマイズメカニズムです。TEIの要素や属性をカスタマイズするための仕様書のようなもので、その仕様に基づいて具体的なカスタマイズされたスキーマが生成されます。
    • ODDは人間が読めるドキュメンテーションと、機械が読めるスキーマの情報を一つの文書にまとめています。
    • ODDを使用すると、TEIの要素や属性を追加、変更、削除することができます。
    • ODDからは、様々なスキーマ言語の形式、例えばRelaxNGやW3C XML Schema、DTDなどに変換することができます。
  2. RNG (RelaxNG):

    • RelaxNGは、XML文書の構造を定義するためのスキーマ言語の一つです。RNGにはXMLベースの構文(RelaxNG XML構文)と非XMLベースの簡略構文(RelaxNG Compact構文)の2つの構文が存在します。
    • RelaxNGは、元々のDTDやW3C XML Schemaとは異なる簡易な方法で、XML文書の構造や内容を定義することができます。
    • TEIのODDを用いてカスタマイズした後、そのODDを基にRelaxNGのスキーマを生成することが一般的です。

要するに、ODDはTEIのカスタマイズを定義するための仕様書的存在で、そのODDからRNGなどの具体的なスキーマ形式に変換することができます。

Discussion