2

私の目標は、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

4

2 に答える 2

1

html5 仕様のセクション 8.2 から

http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html

この仕様で説明されている HTML 構文は、SGML および XML に非常に似ていますが、独自の解析規則を持つ別の言語です。

HTML の一部の以前のバージョン (特に HTML2 から HTML4 へ) は SGML に基づいており、SGML 解析規則を使用していました。ただし、HTML ドキュメントの真の SGML 解析を実装した Web ブラウザは (あったとしても) ごくわずかです。HTML を SGML アプリケーションとして厳密に処理する唯一のユーザー エージェントは、歴史的にバリデーターでした。結果として生じた混乱 — バリデーターはドキュメントが 1 つの表現を持っていると主張しているのに対し、広く展開されている Web ブラウザーは相互運用可能に別の表現を実装していました — は何十年にもわたる生産性を浪費してきました。したがって、このバージョンの HTML は非 SGML ベースに戻ります。

オーサリング パイプラインで SGML ツールを使用することに関心のある作成者は、XML ツールと HTML の XML シリアル化を使用することをお勧めします。

したがって、xml 形式の html5 を作成しない限り、XSD を使用して html5 を検証することはできません。

于 2013-06-05T17:54:46.957 に答える
1

Web には XHTML 5 XSD がいくつかあるようです。たとえば、オープンソースの XHTML 5 スキーマがhttp://www.xmlmind.com/xmleditor/download.shtmlにありました。

于 2013-02-19T15:32:42.650 に答える