xjc を使用して XML スキーマから Java オブジェクトを生成しています。IDREF を使用して、ドキュメント内で同じ要素を複数回参照したいと考えています。また、IDREF によって参照されるオブジェクトを特定の型に制限したいと考えています。私はこれをスキーマ検証の目的で行いたいと考えていますが、Java コードでは、参照されたオブジェクトが Object 型ではなく特定の型として返されるようにもします。たとえば、スキーマで次のことを記述したいとします。
<teams>
<team id="team1">
<coach>coachz</coach>
<player>homestar</player>
<player>marzipan</player>
<player>strongsad</player>
<player>strongbad</player>
</team>
<team id="team2">
<coach>bubs</coach>
<player>homesar</player>
<player>thecheat</player>
<player>poopsmith</player>
<player>bubs</player>
</team>
<team id="allstars">
<coach>poopsmith</coach>
<player>coachz</player>
<player>bubs</player>
<player>kingoftown</player>
<player>strongbad</player>
</team>
</teams>
<people>
<person id="coachz">Coach Z</person>
<person id="homesar">Homesar</person>
<person id="homestar">Homestar</person>
<person id="strongbad">Strong Bad</person>
<person id="strongsad">Strong Sad</person>
<person id="marzipan">Marzipan</person>
<person id="bubs">Bubs</person>
<person id="kingoftown">King of Town</person>
<person id="poopsmith">The Poopsmith</person>
<person id="thecheat">The Cheat</person>
</people>
player
次のように定義できます。
<xs:element name="player" type="xs:IDREF" maxOccurs="unbounded"/>
しかし、Java コードでは、プレーヤーを取得しようとすると、型オブジェクトとして返され、人にキャストする必要があります。その時点で、誰かが Team オブジェクトを誤って参照した場合、検証時に発見された可能性のある対処すべきエラーがあります。私はこのようなものを指定したい:
<xs:element name="player" type="xs:IDREF"
reftype="person"
maxOccurs="unbounded" />
しかし、私が知る限り、ここで不自然な属性 'reftype' を使用して行ったように、型を指定する方法はありません。これは IDREF を使用して実行できますか? そうでない場合、別の方法はありますか?