MAP | SASAX ドキュメント > SASAX とは何か - (2/3) [ <| 1| 2| 3| > ] |
前節で述べたように、 SASAX においては、 解析対象の(期待される)文書構造は、 (1)Java オブジェクトの構造として表現され、 (2)そのオブジェクトを用いて検証されます。
そして、 "属性の検証" に示すようなコードにより、 要素の開始タグに記述した属性を検証することができます。
// 以下の XML 文書を解析するコード // <int attr="属性値"> // 123456 // </int> IntElement element = new IntElement(null, "", "int"){ protected void examine(ParseContext context, Attributes attrs) throws SAXException // { String value = attrs.getValue("", "attr"); // attr 属性値の検証 } };
もちろん "composite" 要素の属性も同様の方法で検証可能です。 詳細は API ドキュメントを参照してください。
SASAX は、 XML 文書の検証手続きをカスタマイズするための、 拡張可能な検証機構を提供しています。
"値の検証" に示すようなコードにより、 要素それ自身の値を検証することが出来ます。
IntElement element = new IntElement(null, "", "int"); element.addValidation(new Validation(){ public Object validate(ParseContext context, Object value) throws SAXException // { Integer integer = (Integer)(value); switch(integer.intValue()){ case 128: case 512: case 4096: return value; default: throw new SAXNotRecognizedException("invalid"); } } });
IntElement
はまず始めに、
(文字列として)XML 文書中に記述された値が、
整数の文字列表現形式として受理可能なものか否かを検証します。
次に、java.lang.Integer
としてデシリアライズしたものを、
あなたの作成した固有の
Validation
へと渡します。
ですので、
上記例における Validation
を実装する内部クラスは、
XML 文書に記述された "値" を "Integer" として検証することが可能です。
複数の Validation
の組み合わせにより、
検証手続きをカスタマイズすることも可能ですし、
自身の固有 Validation
を再利用することも可能です。
MAP | SASAX ドキュメント > SASAX とは何か - (2/3) [ <| 1| 2| 3| > ] |