ドキュメントで XSD スキーマが使用可能な場合、検証のために内部 DTD を無視することは可能ですか?
ソース ドキュメントでスキーマが指定されていない場合は、検証に DTD を使用する必要があります。
パーサーを構成する方法は次のとおりです。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(true);
factory.setFeature("http://apache.org/xml/features/validation/dynamic", true);
factory.setSchema(schemaFactory.newSchema());
builder.setErrorHandler(errorHandler);
「動的」機能を使用して、DTD が指定されている場合にのみパーサーが DTD 検証を実行するようにします。
ソース XML ドキュメントに XSD スキーマがある場合にのみ、DTD 検証を無視する必要があります。
DTD 宣言は DTD エンティティを宣言するためだけに使用され、スキーマ参照は W3C XML スキーマに対する検証に使用されることがあります。
問題は、DTD の検証が解析時にしか実行できず、その前にドキュメントに DTD または XSD への内部参照があるかどうかわからないことです。