誰かが私の XML 検証コードをもう一度試して、私が正しく行っているかどうかを確認できるかどうか疑問に思っていました。これが私に問題を引き起こしているコードの部分です...
SAXParserFactory factory = SAXParserFactory.newInstance();
SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// *** CODE FAILS ON THE BELOW LINE **/
factory.setSchema(schemaFactory
.newSchema(new Source[] { new StreamSource(schemaStream) }));
SAXParser parser = factory.newSAXParser();
SAXReader reader = new SAXReader(parser.getXMLReader());
reader.setValidation(false);
reader.setErrorHandler(new ResultProducingErrorHandler());
reader.read(content);
上記のコードを実行すると、次の行に沿ってエラーが発生します。
src-resolve: Cannot resolve the name 'ns:myStructure' to a(n) 'type definition' component.
エラー メッセージに記載されている要素はすべて、<xs:import /> の呼び出しを介してスキーマにインポートされたものです。スキーマは、 W3C XML Schema Validatorを介して OK を検証しているようです。
これらのスキーマのそれぞれを個別に含める必要がありますか、それとも Java はこれらの追加のスキーマも取得するのに十分スマートですか? newSchema 呼び出しに渡される配列にそれらを追加しようとしましたが、違いはありませんでした。
スキーマへのリンクを提供できるとは思わないので、私のコードが少なくとも受け入れられるように見えるかどうかについて、はいまたはいいえを探しています。