3

XMLファイルをスキーマに対して検証する必要があります。問題は、スキーマが89個の小さな.xsdファイルで構成され、xsd:importを使用して構築されていることです(ファイルのサイズは約1kbです)。バリデーターメソッドを実行すると、検証に30秒以上かかります。プロセスをスピードアップする方法はありますか?

検証に使用するコードは次のとおりです。

public boolean checkXML(String XMLFileName, String XSDFileName) {
    Source xmlFile = new StreamSource(new File(XMLFileName));
    Source schemaFile = new StreamSource(new File(XSDFileName));
    SchemaFactory schemaFactory = SchemaFactory
            .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    try {
        Schema schema = schemaFactory.newSchema(schemaFile);
        javax.xml.validation.Validator validator = schema.newValidator();
        validator.validate(xmlFile);
        return true;
    } catch (SAXException e) {
        // Validation failed
        return false;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;
}
4

2 に答える 2

2

まず、どのクラスライブラリ呼び出しに時間がかかるかを理解する必要があります。つまり、それSchemaFactory.newSchema()ですか?Schema.newValidator()?またはValidator.validate()

3番目ではなく最初の2つのうちの1つであることがわかると思います。

明らかな次のステップは、特定のスキーマファイルに対してスキーマ(および/またはバリデーター)を1回だけ作成するようにコードをリファクタリングし、XMLがそのスキーマに対して検証されるたびに使用するためにキャッシュすることです。

于 2012-09-28T09:16:13.913 に答える
1

時間がかかる理由はいくつかあります。それは(David Grantが示唆しているように)インポートとインクルードのサイクルに関係している可能性があります。または、出現範囲が数値である特に厄介なコンテンツモデルの1つである可能性があります。または、XML名前空間のスキーマなどのスキーマドキュメントをW3C Webサイトからフェッチする際に問題が発生する可能性があります(W3Cサイトの応答には時間がかかることが多いため、ここでは30秒の数字がベルを鳴らします。ドキュメントのローカルコピーを使用します)。

Saxonで試してみて、それがもっとうまくいくかどうかを確認してください。(SaxonがXercesよりも優れている場合もあれば、劣っている場合もあります。知ることは興味深いことであり、原因を特定するのに役立つ可能性があります。)

于 2012-09-28T12:02:37.090 に答える