2009-03-03 4 views
0

誰かが私のXML検証コードを一度に渡して、私が正しいことをしているかどうかを知ることができるかどうか疑問に思っていました。XMLバリデーション:私は正しいことをしていますか?

src-resolve: Cannot resolve the name 'ns:myStructure' to a(n) 'type definition' component. 

エラーで述べた要素:ここでは私のトラブルを与えているコードの部分は、私は上記のコードを実行するたびに、私はの線に沿ってエラーが出る...

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); 

ですメッセージはすべて< xs:import/>への呼び出しを介してスキーマにインポートされたメッセージです。スキーマはW3C XML Schema ValidatorでOKを確認するようです。

これらのスキーマを個別にインクルードする必要がありますか、Javaスマートなので、余分なスキーマも取得できますか?私はnewSchema呼び出しに渡された配列にそれらを追加しようとしましたが、それは何の違いもありませんでした。

私はスキーマへのリンクを提供することはできないと思いますので、私のコードが少なくとも許容可能であるかどうかについては、本当にはいまたはいいえを探しています。

答えて

1

xs:importステートメントが、アプリケーションの現在のディレクトリから到達可能なパスを指していることを確認してください。現在のディレクトリは、あなたが思うものではないかもしれません。

+0

パスは単なるファイル名です(例:「abc.xsd」)。これらのファイルは元のスキーマと同じディレクトリにあるため、アクセス可能と思われます。しかし、私はスキーマやインポートについてあまり知らない。 –

+0

テストのように、インポートするスキーマでインポートされたファイルへのパス全体を指定してみてください。 – Eddie

+0

投稿する前にそれを試してください。フルパスでは正常に動作します。ですから、私はws:importがインポートを呼び出すスキーマに相対的ではないと思います。少なくとも、それはスキーマ(ウェブ上でアクセスする必要がある)であり、私ではないことを意味します。助けをお祈りします。 –