概要

あるスキーマに従った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を試す

#p#w#wiggpreventatiglnhihstdtttataptplsisl:o:/n/j//irknaogwXut.MirtgLgaeienitng_hjauilbmluosn使eorgcaotnatrein.tg.ictohmu/bn.aikoa/mtueria/10916./xtmelst2021/main/tei_all.rng

OKな例

以下のように実行すると、何も出力されませんでした。

pyjingtei_all.rng01.xml

NGな例

一方、TEIのスキーマに合致しない以下のようなxmlファイルを用意しました。

<a>bbb</a>

その実行結果は以下です。a要素ではなく、TEIまたはteiCorpus要素が必要と出力されました。このように、スキーマに合致するか否かのチェックができました。

p/ycjoinntgentte/in_ga.lxlm.lr:n1g:4n:g.exrmrlor:element"a"notallowedhere;expectedelement"TEI"or"teiCorpus"(withxmlns="http://www.tei-c.org/ns/1.0")

まとめ

無事に検証を行うことができました。

ただ今回のニーズはTEI/XMLの以外のスキーマに適合するかを検証する必要がありましたので、このrngファイルの作成方法や内容について、別の記事にまとめたいと思います。