SAXParser を使用して XML ドキュメントを解析する Eclipse rcp アプリケーションを作成しています。XML ドキュメントの検証に使用している「EventDefinition.xsd」には、次のインポートがあります。
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
エクスポートした rcp 製品の eclipse フォルダーに「EventsDefinition.xsd」と「xml.xsd」を保持します。
「EventDefinition.xsd」にアクセスするには、機能する次のコードを使用します。
URL fileURL = new URL(Platform.getInstallLocation().getURL() + "EventsDefinition.xsd");
File eventsDefinitionFile = new File(fileURL.getPath());
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", eventsDefinitionFile);
これにより、パーサーは "EventsDefinition.xsd" にアクセスできますが、それによって参照される "xml.xsd" にはアクセスできません。これは、rcp アプリケーションが実行されたディレクトリに相対的な xml.xsd を見つけようとするためです。
現在の作業ディレクトリではなく、eclipse フォルダーで "xml.xsd" を見つけるようにパーサーに指示する同様の方法はありますか?
EventsDefinition.xsd に schemaLocation="http://www.w3.org/2001/xml.xsd" を指定してみましたが、スキーマの読み込みに失敗します。そのため、エクスポートされた製品の Eclipse フォルダーにある "xml.xsd" のローカル コピーを使用する必要があります。
どんな提案も非常に役に立ちます。