Итак, если вы хотите определить класс Java из схемы, вам необходимо создать сложный тип для этого класса Java, а затем вы должны объявить XML-элемент для этого типа.
<xs:complexType name="PersonType">
<xs:sequence>
<xs:element name="age" type="xs:int"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="occupation" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Person" type="myxml.PersonType"/>
Мой вопрос: почему JAXB различает complexType и element? Кажется, что создается только шаблонный код, где вы должны номинально объявить тип класса дважды.
Например, это казалось бы проще (конечно, он не будет компилироваться):
<xs:element name="Person">
<xs:sequence>
<xs:element name="age" type="xs:int"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="occupation" type="xs:string"/>
</xs:sequence>
</xs:element>
Может ли кто-нибудь указать на обоснование дизайна этого аспекта JAXB?
Сложный тип соответствует объявлению класса. Тег элемента соответствует объявлению поля. Глядя на ваш пример, который может показаться шаблоном, поскольку вы только "объявляете одно поле данного типа", однако в более сложных схемах это пригодится.
Например, если вы хотите представить семью, PersonType
будет использоваться для нескольких элементов:
<xs:complexType name="FamilyType">
<xs:sequence>
<xs:element name="father" type="PersonType"/>
<xs:element name="mother" type="PersonType"/>
<xs:element name="child" type="PersonType" maxOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="family" type="FamilyType"/>
Также необходим element
, если вы хотите использовать тип в XML файле (как самый верхний тег в пространстве имен).
В вашем случае рассмотрите следующую альтернативу:
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="age" type="xs:int"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="occupation" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Кстати: XML-Schema не была специально разработана для JAXB, JAXB был разработан как инструмент для использования с уже существующим форматом XML-Schema.