JAXB IDREF и использование идентификатора? - PullRequest
3 голосов
/ 17 февраля 2010

Я ищу написать XSD, который будет использоваться для генерации некоторых классов Java через JAXB. Я бы хотел, чтобы полученный 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?

Спасибо!

EDIT

Этот вопрос, вероятно, также может быть задан следующим образом.

Может ли simpleType иметь атрибут или это должен быть complexType.

Итак, вы можете иметь

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

или у вас должно быть

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

1 Ответ

4 голосов
/ 17 февраля 2010

Я отвечу на ваш второй вопрос, так как он очень четко задан.Нет, простой тип не может иметь атрибут.То, что вы ищете, - это сложный тип с простым содержимым:

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

Что касается первого вопроса: у вас все еще есть немного дополнительной работы, если вы действительно хотите, чтобы идентификаторы были разрешены.Например, см. Здесь .

...