Я генерирую Java-объекты из схемы XML с помощью xjc. Я хотел бы ссылаться на один и тот же элемент несколько раз в документе, используя IDREF. Я также хотел бы ограничить объекты, на которые ссылается IDREF на определенный тип. Я хотел бы сделать это для проверки схемы, но также и для того, чтобы в Java-коде ссылочный объект возвращался как определенный тип вместо типа Object. Например, скажем, я хочу схему, чтобы описать следующим образом:указать тип для IDREF в XML-схеме
<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? Если нет, есть ли другой метод?
A ref to Homestar Runner? +1 –