概要
あるスキーマに従ったXMLファイルを作成する機会があったのですが、そのスキーマに合致したXMLファイルを作成できているか、確認する必要がありました。
上記の要件に対して、RELAX NGスキーマを操作するライブラリjingtrangを使ってみましたので、その備忘録です。
https://pypi.org/project/jingtrang/
Google Colabのノートブックも用意しました。
https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/jingtrangを試す.ipynb
Validationを試す
# ライブラリのインストール
pip install jingtrang
# rngファイルのダウンロード(tei_allを使用)
wget https://raw.githubusercontent.com/nakamura196/test2021/main/tei_all.rng
# validation対象のXMLファイルの用意(校異源氏物語テキストのダウンロード)
wget https://kouigenjimonogatari.github.io/tei/01.xml
OKな例
以下のように実行すると、何も出力されませんでした。
pyjing tei_all.rng 01.xml
NGな例
一方、TEIのスキーマに合致しない以下のようなxmlファイルを用意しました。
<a>bbb</a>
その実行結果は以下です。a要素ではなく、TEIまたはteiCorpus要素が必要と出力されました。このように、スキーマに合致するか否かのチェックができました。
pyjing tei_all.rng ng.xml
/content/ng.xml:1:4: error: element "a" not allowed here; expected element "TEI" or "teiCorpus" (with xmlns="http://www.tei-c.org/ns/1.0")
まとめ
無事に検証を行うことができました。
ただ今回のニーズはTEI/XMLの以外のスキーマに適合するかを検証する必要がありましたので、このrngファイルの作成方法や内容について、別の記事にまとめたいと思います。