私のプログラムでは、XML ファイルを生成しており、異なる URL にある複数のスキーマに対してその XML ファイルを検証する必要があります。その XML ファイルをすべてのスキーマに対して 1 回だけ検証する必要があります。
ソースフラグメント:
// here source array contain the locations of schemas, located at diff servers.
Source[] source = {
new StreamSource(
new URL("http://localhost:8081/test1/testSchema1.xsd")
.openStream()),
new StreamSource(
new URL(
"http://ccr.internal.ericsson.com/test2/testSchema2.xsd")
.openStream()) };
try {
// Compile the schema, which loaded from schemaFileLocation.
Schema schemaGrammar = schemaFactory.newSchema(source);
// Create a validator for schema.
Validator configValidator = schemaGrammar.newValidator();
// set error handler with validator.
SchemaValidator schemaValidator = new SchemaValidator();
configValidator
.setErrorHandler(schemaValidator.new MessageHandler());
// validate xml instance against the grammar.
configValidator.validate(new StreamSource(new File("xmlFile.xml")));
System.out.println("\n");
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
上記のコード フラグメントを実行すると、次のエラーが発生します。
org.xml.sax.SAXParseException: src-resolve: 名前 'xn:SubNetwork' を (n) '要素宣言' コンポーネントに解決できません。org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException (未知のソース) で org.apache.xerces.util.ErrorHandlerWrapper.error (未知のソース) で org.apache.xerces.impl.XMLErrorReporter.reportError (未知のソース) で org org.apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError (不明なソース) org.apache.xerces.impl.xs.traversers.XSDHandler.getGlobalDecl (不明なソース) org.apache.xerces.impl.xs.traversers で.XSDElementTraverser.traverseLocal (不明なソース) org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseLocal (不明なソース) org.apache.xerces.impl.xs.traversers.XSDAbstractParticleTraverser.
コードの問題は何ですか?複数のスキーマに対して検証する他の方法はありますか?