Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

マークアップ言語に対する静的解析

JSPXMLなどのマークアップ言語に対して、たとえば

  • JSP<form:password>タグのshowPassword属性はtrueにしたらダメ
  • JETTでxlsxファイルに<jt:comment>タグは使ったらダメ
  • Apache FOPで<fo:external-graphic>タグのsrc属性に#%や空白が入っていたらダメ
  • myBatisのMapper XMLでLEFT OUTER JOINのOUTERを省略したらダメ

のような、「XML SchemaDTDでは禁止されていないけれど、運用上や保守性上よろしくない or 実装上問題を起こすことがあるのでこのシステムでは使用を禁止したい」といったチェック、いわゆる静的解析を行いたいケースがある。静的解析は、マークアップ言語と組み合わせて使われる言語に対する静的解析と合わせて実行できるとよい。

主にはJavaの開発環境を考えたい。SpotBugsはBCELを使ってJavaのASTをVisitorパターンで処理することしかできない(BCELのVisitorが元になっている)のでXMLの処理はできない。

調べてみたところ、こういった用途にはSchematron*1が適しているとのこと。Schematronを直接実行できる処理系は存在しない*2と記載している情報もある一方、oXygenというXMLエディタで使える*3と記載している情報もある。ルールはXMLで記載することになっているようだ。できればルールはJavaJavaScriptなどの言語、ないしは他の静的解析ツールと同じ方法で定義したいところだが……

*1:https://www.schematron.com/

*2:https://www.nslabs.jp/xml-schematron-with-relaxng.rhtml

*3:時実象一, "電子ジャーナル記事チェックへの Schematron の利用 『情報の科学と技術』誌の NII-ELS より J-STAGE への移行に際して", 第13回情報プロフェッショナルシンポジウム予稿集, 2016. URL: https://doi.org/10.11514/infopro.2016.0_41