2010-02-16 6 views
3

Je cherche à écrire un XSD qui sera utilisé pour générer des classes Java via JAXB. Je voudrais que le XML résultant de ressembler à ceci:JAXB IDREF et l'utilisation de l'ID?

<Appointment> 
    <Patient ref="12345">Bob Smith</Patient> 
    <Type>Some Appointment Type</Type> 
    <Date>2010-02-17</Date> 
    .... 
</Appointment> 

Donc, étant donné ce schéma je le vouloir pour générer une classe où je peux faire quelque chose comme ceci:

Patient p = loadPatientFromDB(); 
Appointment a = new Appointment(); 
a.setPatient(p); 
a.setType("Some Appointment Type"); 

I pense que ce que je cherche à faire implique d'avoir un élément qui a un IDREF comme attribut et ensuite une chaîne comme contenu de l'élément.

Quelqu'un peut-il me donner un coup de main avec certains XSD?

Merci!

EDIT

pourrait probablement être demandé aussi cette question de la manière suivante.

Un simpleType peut-il avoir un attribut ou doit-il être de type complexType?

Alors, pouvez-vous avoir

<element id="foo">bar</element> 

ou devez-vous avoir

<element id="foo"><name>bar</name></element> 

Répondre

4

Je répondrai à votre deuxième question, car il est très clairement demandé. Non, un type simple ne peut pas avoir d'attribut. Ce que vous cherchez est un type complexe avec un contenu simple:

<xs:complexType name="Person"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="ref" type="xs:IDREF" use="required"/> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

Edit: Vous pouvez maintenant utiliser ce type comme vous le souhaitez, l'assigner à un élément appelé « personne » et vous pouvez avoir <person id="foo">A Name</person>. Comme pour la première question: vous avez encore un peu de travail si vous voulez réellement que les ID soient résolus. Par exemple, see here.