gpt4 book ai didi

java - 为什么 JAXB 区分元素和类型?

转载 作者:行者123 更新时间:2023-11-30 03:48:20 25 4
gpt4 key购买 nike

因此,如果您想从 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 区分复杂类型和元素?它似乎只创建样板代码,您必须在名义上声明类类型两次。

例如,这看起来更简单(当然,它不会编译):

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

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

关于java - 为什么 JAXB 区分元素和类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com