35.6. 使用模型组


概述

XML 架构模型组是方便的快捷方式,允许您从用户定义的复杂类型引用一组元素。例如,您可以定义一组对应用中多种类型通用的元素,然后重复引用组。模型组使用 group 元素定义,类似于复杂的类型定义。模型组到 Java 的映射也类似于复杂类型的映射。

在 XML 架构中定义模型组

您可以使用 group 元素和 name 属性在 XML Schema 中定义模型组。name 属性的值是一个字符串,用于引用整个架构中的组。group 元素(如 complexType 元素)可以具有 sequence 元素、all 元素或 choice 元素作为其即时子。

在子元素中,您可以使用 element 元素 定义组的成员。对于组的每个成员,指定一个 element 元素。组成员可以使用 元素 元素的任何标准属性,包括 minOccursmaxOccurs。因此,如果您的组有三个元素,并且其中一个可能发生三次,则您可以使用三个 元素 定义组,其中之一使用 maxOccurs="3"。例 35.22 “XML 架构模型组” 显示具有三个元素的模型组。

例 35.22. XML 架构模型组

<group name="passenger">
  <sequence>
    <element name="name" type="xsd:string" />
    <element name="clubNum" type="xsd:long" />
    <element name="seatPref" type="xsd:string"
             maxOccurs="3" />
  </sequence>
</group>
Copy to Clipboard Toggle word wrap

在类型定义中使用模型组

定义了模型组后,就可以将其用作复杂类型定义的一部分。要在复杂类型定义中使用模型组,请使用 group 元素和 ref 属性。ref 属性的值是定义时提供给组的名称。例如:要使用 例 35.22 “XML 架构模型组” 中定义的组,请使用 {ref="tns:passenger" >,如 例 35.23 “使用模型组进行复杂类型” 所示。

例 35.23. 使用模型组进行复杂类型

<complexType name="reservation">
  <sequence>
    <group ref="tns:passenger" />
    <element name="origin" type="xsd:string" />
    <element name="destination" type="xsd:string" />
    <element name="fltNum" type="xsd:long" />
  </sequence>
</complexType>
Copy to Clipboard Toggle word wrap

当在类型定义中使用模型组时,组将变为类型的成员。因此,保留 实例有四个成员元素。第一个元素是 passenger 元素,它包含由 例 35.22 “XML 架构模型组” 中显示的组定义的成员元素。例 35.24 “带有模型组的类型实例” 中显示 保留 实例示例。

例 35.24. 带有模型组的类型实例

<reservation>
  <passenger> <name>A. Smart</name> <clubNum>99</clubNum> <seatPref>isle1</seatPref> </passenger>
  <origin>LAX</origin>
  <destination>FRA</destination>
  <fltNum>34567</fltNum>
</reservation>
Copy to Clipboard Toggle word wrap

映射到 Java

默认情况下,模型组仅在包含复杂类型定义中时映射到 Java 工件。为包含模型组的复杂类型生成代码时,Apache CXF 将模型组的成员变量包含在为类型生成的 Java 类中。代表模型组的成员变量根据模型组的定义标注。

例 35.25 “使用组键入” 显示为 例 35.23 “使用模型组进行复杂类型” 中定义的复杂类型生成的 Java 类。

例 35.25. 使用组键入

@XmlType(name = "reservation", propOrder = {
    "name",
    "clubNum",
    "seatPref",
    "origin",
    "destination",
    "fltNum"
})
public class Reservation {

    @XmlElement(required = true)
    protected String name;
    protected long clubNum;
    @XmlElement(required = true)
    protected List<String> seatPref;
    @XmlElement(required = true)
    protected String origin;
    @XmlElement(required = true)
    protected String destination;
    protected long fltNum;

    public String getName() {
        return name;
    }

    public void setName(String value) {
        this.name = value;
    }

    public long getClubNum() {
        return clubNum;
    }

    public void setClubNum(long value) {
        this.clubNum = value;
    }

    public List<String> getSeatPref() {
        if (seatPref == null) {
            seatPref = new ArrayList<String>();
        }
        return this.seatPref;
    }

    public String getOrigin() {
        return origin;
    }

    public void setOrigin(String value) {
        this.origin = value;
    }

    public String getDestination() {
        return destination;
    }

    public void setDestination(String value) {
        this.destination = value;
    }

    public long getFltNum() {
        return fltNum;
    }

    public void setFltNum(long value) {
        this.fltNum = value;
    }
Copy to Clipboard Toggle word wrap

多次发生

您可以通过将 group 元素的 maxOccurs 属性设置为大于 1 的值来指定模型 显示多次。要允许多次出现 Apache CXF 模型组 Apache CXF 将模型组映射到 List<T> 对象。List<T > 对象按照组第一个子级的规则生成:

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat