1

次のスキーマを使用して、GraphML XMLファイルを解析しています。

(xjc を使用して) スキーマから Java クラスをバインドし、いくつかの XML ファイルの例をアンマーシャリングしました。

残念ながら、XML をマーシャリングすると、次のエラーが発生します。

SchemaLocation: schemaLocation 値 = 'Graphml.xsd' には偶数の URI が必要です

私が見る限り、xsd での schemaLocation の使用は次のとおりです。

<xs:import namespace="http://www.w3.org/1999/xlink"                
  schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/xlink.xsd">
  ...

しかし、そこに問題は見られません。

誰かが間違っていることを提案できますか?

4

2 に答える 2

4

最初の部分schemaLocationは名前空間で、2 番目の部分にはスペースが続き、場所です。次のようなものが有効です。

<foo 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0 http://graphml.graphdrawing.org/xmlns/1.0/xlink.xsd">
    ...
</foo>

でスキーマの場所を設定できますMarshaller。次のことを行っている可能性はありますか?

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "Graphml.xsd");
于 2012-12-12T11:10:05.603 に答える
2

表示するスキーマ フラグメントは構文的に正しいです。そこに何の問題も見つからないのは正しいです。また、エラー メッセージはスキーマについてではなくhttp://graphml.graphdrawing.org/xmlns/1.1/graphml-structure.xsd、GraphML.xsd と呼ばれるものについて話しているようです。

XML インスタンスを見ないと確信が持てませんが、おそらくドキュメント インスタンスにはフォームの属性値の指定がxsi:schemaLocation = "GraphML.xsd"あり、バリデーターは値 "GraphML.xsd" が代わりに偶数の値を含む値である必要があると不平を言っています。 URI: 名前空間と名前、スキーマと場所のペア (Blaise Doughan の回答で説明されているとおり)。

于 2012-12-13T01:35:53.170 に答える