コメントにて教えてもらった RELAX NG を、RELAX NG üå を見ながら試してみています。 xyzzy の xml-mode は RELAX NG にも対応しているようで快適に作成できています。素晴らしい。
そしてある程度書いた所で実際に XML のチェックをしてみたくなったのですが、 RELAX NG を扱える Validator ってあまり数がないのでしょうか? ぱっと検索した限りではあまり見つかりませんでした。一番有名っぽいのが Jing みたいですが、これはなぜかエラーが出て使えませんでした。
no implementation available for schema language with namespace URI "http://relaxng.org/ns/structure/1.0"
チュートリアルにあった名前空間の URI は 0.9 だったのですが、それが存在していないのがいけないのかと 1.0 に修正したのですがそれでも上記のようなエラーが。配布ファイルに含まれているサンプルすら使用できないのでお手上げ状態です。職場の環境だとプロキシ通さないとインターネットにアクセスできないのですが、それがいけないのでしょうか。ソース公開されているので今度読むか……。
途方に暮れつつ適当に検索していたら、ローカルに relax という文字列を含んだファイルがあったので覗いてみたら cygwin フォルダの下に validRNG.py というファイルがあって、そこに RELAX NG を使ったテストコードっぽいのがあったのでそれを適当に書き換えてみたら動いたので今はこれを使っています。 Python なんて始めて使ったよ……。
libxml2 で RELAX NG を使えるなら、他の言語でも同じような感じでできるのかなあ。