はじめに

TEI (Text Encoding Initiative) は、人文学分野のテキストをデジタルで構造化するための国際標準です。図書館・博物館・学術研究などで利用されていますが、TEI/XML を直接書くにはマークアップの知識が必要で、導入のハードルが高いのが実情です。

そこで活用されるのが、Microsoft Word (.docx) から TEI/XML への変換ツールです。代表的なものに TEI Garage(旧 OxGarage)がありますが、多機能ゆえに UI がやや複雑です。今回、DOCX → TEI/XML の変換に特化した、シンプルなブラウザベースのツールを作成しました。

https://github.com/nakamura196/tei-converter

デモサイト: https://tei-converter.pages.dev/

仕組み

TEI Garage は REST API を公開しており、以下のエンドポイントに DOCX ファイルを POST するだけで TEI/XML が返ってきます。

POSdTToEcIhx:t:ttaeppxspt:l:/ix/cmtalet/iigoanr:avgned..toepie-ncx.molrfgremgaet-sw-eobfsfeircveidcoec/uCmoennvte.rwsoirodnpsr/ocessingml.document/

本ツールはこの API を呼び出すフロントエンドです。変換処理自体は TEI Consortium が運営するサーバ上で行われます。

主な機能

ドラッグ & ドロップ

.docx ファイルをブラウザにドラッグ & ドロップするだけでアップロードできます。クリックしてファイルを選択することも可能です。

整形済み XML プレビュー

変換結果はインデント付きで整形され、シンタックスハイライト付きで表示されます。タグ名、属性名、属性値がそれぞれ色分けされるため、構造を把握しやすくなっています。

コピー & ダウンロード

結果をワンクリックでクリップボードにコピーしたり、.xml ファイルとしてダウンロードしたりできます。

サンプル DOCX 内蔵

「サンプル .docx で試す」をクリックするだけで、内蔵のサンプルファイルで動作を確認できます。サンプルのダウンロードも可能です。

日英 UI 切替

タイトル横の EN / JA ボタンで、UI の言語を日本語と英語で切り替えられます。

技術的なポイント

単一 HTML ファイル

ビルドツール、フレームワーク、外部ライブラリは一切使用していません。index.html 1ファイルに HTML・CSS・JavaScript がすべて含まれています。そのため、ローカルでファイルを開くだけでも動作します。

XML 整形(Pretty Print)

TEI Garage API が返す XML にはインデントが含まれていない場合があります。そこで、ブラウザの DOMParser で XML をパースし、再帰的にシリアライズすることで整形を行っています。

混合コンテンツ(テキストと要素が混在する場合、例: <p>text <hi>bold</hi> text</p>)ではインデントを入れると意味が変わってしまうため、インラインのまま出力するようにしています。

// 混合コンテンツの判定
let hasElement = false, hasText = false;
for (const c of children) {
  if (c.nodeType === Node.ELEMENT_NODE) hasElement = true;
  if (c.nodeType === Node.TEXT_NODE && c.textContent.trim()) hasText = true;
}
if (hasElement && hasText) {
  // インラインで出力(インデントしない)
}

シンタックスハイライト

シンタックスハイライトは、外部ライブラリを使わずシングルパスのトークナイザで実装しています。XML を1文字ずつ走査してタグとテキストに分離し、タグ部分はさらにタグ名・属性名・属性値に分解してから HTML の <span> で色付けします。

正規表現による複数パスの置換では、挿入した <span class="tag"> の属性が後続の正規表現に再マッチしてしまう問題があったため、この方式を採用しました。

サンプル DOCX の埋め込み

サンプル DOCX は Base64 エンコードして JavaScript 内に埋め込んでいます。atob() でデコードし、File オブジェクトに変換してからファイル選択と同じ処理に流すことで、サーバなしでサンプルの読み込み・ダウンロードを実現しています。

TEI Garage API について

TEI Garage は DOCX 以外にも多くの形式間の変換をサポートしています。

入力形式出力形式(例)
DOCX, ODT, Markdown, RTFTEI P5 XML
TEI P5 XMLHTML, LaTeX, ePub, PDF, DOCX

API のプロパティとして、変換プロファイル(default, enrich, iso 等)や言語を指定することもできます。ただし、一般的な DOCX → TEI 変換では default プロファイルで十分です。

おわりに

TEI Garage の API を利用することで、サーバサイドの実装なしに DOCX → TEI/XML 変換ツールを構築できました。単一 HTML ファイルで依存もないため、自前のサーバにホスティングしたり、ローカルで使ったりすることも容易です。

TEI/XML に馴染みがない方も、まずはサンプルで変換結果を確認してみてください。Word で書いた文書がどのような TEI 構造に変換されるかを体験できます。

https://tei-converter.pages.dev/