私の目標は、Java で XSD スキーマを使用してスタンドアロンの HTML 5 マークアップ検証を行うことです。
以下に、私のアプローチについて説明します。これを行うための別の方法またはより良い方法がある場合も同様です。
WHATTFは、HTML 5のRelax NG/Schematron スキーマを公開しました。
Trang [3] は、さまざまな XML スキーマ言語用のオープンソース コンバーターであり、Relax NG から XSD に変換できるはずです。WHATTF スキーマを使用すると、trang コンバーターを次のように呼び出すことができます。
$ java -jar ./trang.jar ./whattf/syntax/relaxng/html5.rnc html5.xsd
ただし、trang は、型変換が正しくない場合に、次の警告の多くを生成します。
whattf/syntax/relaxng/applications.rnc:265:51: warning: cannot convert datatype library "http://whattf.org/datatype-draft"; using datatype "string"
[...]
trang が機能するには、pluggable-datatypes [4] を jing に渡す必要があると思います。Jing [5] は Relax NG バリデーターで、trang によって使用されたと思います。
whattf/syntax/relaxng/datatype フォルダには、これらのプラグ可能なデータ型の Java 実装が提供されています。したがって、html5-datatypes.jar を作成し、次のように trangs クラスパスに追加しました。
$ java -cp ./html5-datatypes.jar -jar ./trang.jar ./whattf/syntax/relaxng/html5.rnc html5.xsd
ただし、これにより同じエラーが発生します。
それを超えて、次のように作成された XSD ファイルを使用しjavax.xml.validation.Validator
ます。
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema schema = schemaFactory.newSchema( new File("html5.xsd") );
Validator validator = schema.newValidator();
validator.validate( new StreamSource( new File("example.html") ) );
例外を生成します:
org.xml.sax.SAXParseException: cos-element-consistent: Error for type 'time.inner'. Multiple elements with name 'script', with different types, appear in the model group.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.xs.XSConstraints.reportSchemaError(Unknown Source)
at org.apache.xerces.impl.xs.XSConstraints.fullSchemaChecking(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
at org.apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source)
at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:594)
at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:610)
[3] thaiopensource.com/relaxng/trang.html
[4] thaiopensource.com/relaxng/pluggable-datatypes.html
[5] thaiopensource.com/relaxng/jing.html