2009年1月15日木曜日

SVGをValidateする

もう泣きそう.

始まりはとっても簡単.
Test.java
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
SchemaFactory sf = SchemaFactory
.newInstance("http://www.w3.org/2001/XMLSchema");
try {
Schema schema = sf.newSchema(new StreamSource(args[0]));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(args[1]));
} catch (Exception e) {
//e.printStackTrace();
System.err.println(e.getMessage());
System.exit(1);
}
System.out.println("Success");
System.exit(0);
}

}

実行
> java Test test.xsd test.xml


svg.xsdと関連xsdとなぜかdtdを手に入れる.

svg.xsd (svg)
http://www.w3.org/TR/2002/WD-SVG11-20020108/SVG.xsd
xlink.xsd (xlink)
http://www.w3.org/TR/xlink11/xlink.xsd
xml.xsd (namespace)
http://www.w3.org/2001/03/xml.xsd
XMLSchema.dtd
http://www.w3.org/2001/XMLSchema.dtd
datatypes.dtd
http://www.w3.org/2001/datatypes.dtd


で,svg.xsdをこちらに従って修正する.
SVG 1.1 XSD Comments
http://lists.w3.org/Archives/Public/www-svg/2008Mar/0085.html

1は先頭のDTD部を削除
2, 3, 4はtype="anyURI"を削除
5はパターンの置き換え
6は要素名をallからchoiceに変更
7はfeFuncRType/feFuncGType/feFuncBType/feFuncATypeの定義(complexType要素)においてtype属性定義部を削除


また,xlink.xsdも修正する.
NCNAMENCNameに変更(3カ所)


で,ようやくできた.

というお話.

間違い等あればコメントいただければ幸いです.

0 件のコメント: