JAXB IDREF和ID用法?

时间:2010-02-16 21:45:51

标签: java xml xsd jaxb

我正在寻找一个XSD,它将用于通过JAXB生成一些Java类。我希望生成的XML看起来像这样:

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

所以,鉴于这个模式,我希望它能够生成一个类,我可以这样做:

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

我认为我要做的是让一个元素具有IDREF作为属性,然后将字符串作为元素的内容。

有人可以帮我一些XSD吗?

谢谢!

修改

也可能以下列方式提出这个问题。

simpleType可以具有属性,还是必须是complexType。

那么,你有吗

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

或者你必须

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

1 个答案:

答案 0 :(得分:4)

我会回答你的第二个问题,因为它非常明确地被问到了。不,简单类型不能具有属性。您正在寻找的是具有简单内容的复杂类型:

<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>

修改:您现在可以按预期使用此类型,将其分配给名为“person”的元素,您可以拥有<person id="foo">A Name</person>

至于第一个问题:如果你真的想要解析ID,你还有一些额外的工作。例如,see here