0

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" のローカル コピーを使用する必要があります。

どんな提案も非常に役に立ちます。

4

1 に答える 1

0

問題はインポート宣言にあると思います。まず、「namespace」を名前空間プレフィックスとして使用することは許可されていますが、推奨されていません。第二に、禁止されている名前空間名として「http://www.w3.org/XML/1998/namespace」を使用すると問題が発生します。ここを見てください: http://www.w3.org/TR/REC-xml-names/#dt-prefix、正確にはここ:

プレフィックス xml は、定義上、名前空間名http://www.w3.org/XML/1998/namespaceにバインドされています。宣言する必要はありませんが、宣言する必要はなく、他の名前空間名にバインドしてはなりません。他のプレフィックスをこの名前空間名にバインドしてはならず、デフォルトの名前空間として宣言してはなりません。

名前空間の名前を別の名前に変更してみてください (名前空間のプレフィックスも)。それが役に立てば幸い。

于 2012-04-18T12:19:14.510 に答える