【问题标题】:Why does JAXB differentiate elements and types?为什么 JAXB 区分元素和类型?
【发布时间】:2014-07-30 05:49:19
【问题描述】:

因此,如果您想从 Schema 定义 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 这方面背后的设计原理吗?

【问题讨论】:

    标签: java xml jaxb xsd


    【解决方案1】:

    复杂类型对应于类声明元素标签对应一个字段声明。看看您的示例,这似乎是样板,因为您只“声明一个给定类型的字段”,但是在更复杂的模式中它会派上用场。

    例如如果你想代表一个家庭,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"/>
    

    如果您想在 xml 文件中使用类型(作为命名空间中的最顶层标记),还需要 element

    在您的情况下,请考虑以下替代方案:

    <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 格式一起使用的工具。

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 2017-06-11
      • 2011-02-17
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多