35장. 복잡한 유형 사용
초록
복잡한 형식은 여러 요소를 포함할 수 있으며 특성을 가질 수 있습니다.Complex types can contain multiple elements and they can have attributes. 이는 유형 정의로 표시되는 데이터를 저장할 수 있는 Java 클래스에 매핑됩니다. 일반적으로 매핑은 콘텐츠 모델의 요소 및 특성을 나타내는 속성 집합을 사용하여 8080에 연결됩니다.
35.1. 기본 복잡한 유형 매핑
35.1.1. 개요
XML 스키마 복잡한 유형은 간단한 유형보다 더 복잡한 정보를 포함하는 구성을 정의합니다. 가장 간단한 복잡한 유형은 속성이 있는 빈 요소를 정의합니다. 보다 복잡한 유형은 요소의 컬렉션으로 구성됩니다.
기본적으로 XML 스키마 복잡한 유형은 Java 클래스에 매핑되며, 멤버 변수는 XML 스키마 정의에 나열된 각 요소 및 속성을 나타냅니다. 클래스에는 각 멤버 변수에 대한 setter 및 get zone이 있습니다.
35.1.2. XML 스키마로 정의
XML 스키마 복잡한 유형은 complexType
요소를 사용하여 정의됩니다. complexType
요소는 데이터의 구조를 정의하는 데 사용되는 나머지 요소를 래핑합니다. 이름이 지정된 형식 정의의 부모 요소 또는 요소에 저장된 정보의 구조를 정의하는 요소
요소의 자식으로 나타날 수 있습니다. complexType
요소가 명명된 유형을 정의하는 데 사용되는 경우 name
특성을 사용해야 합니다. name
속성은 유형을 참조하는 데 필요한 고유 식별자를 지정합니다.
하나 이상의 요소를 포함하는 복잡한 유형 정의에는 표 35.1. “복잡한 유형에서 발생하는 방법 정의의 요소” 에 설명된 하위 요소 중 하나가 있습니다. 이러한 요소는 지정된 요소가 유형의 인스턴스에 표시되는 방식을 결정합니다.
element | 설명 |
---|---|
| 복잡한 형식의 일부로 정의된 모든 요소가 형식의 인스턴스에 표시되어야 합니다. 그러나 어떤 순서로든 나타날 수 있습니다. |
| 복잡한 형식의 일부로 정의된 요소 중 하나만 형식 인스턴스에 표시될 수 있습니다. |
| 복잡한 형식의 일부로 정의된 모든 요소는 형식의 인스턴스에 표시되어야 하며 형식 정의에 지정된 순서로도 표시되어야 합니다. |
복잡한 유형 정의에서 특성만 사용하는 경우 표 35.1. “복잡한 유형에서 발생하는 방법 정의의 요소” 에 설명된 요소 중 하나가 필요하지 않습니다.
요소가 표시되는 방식을 결정한 후 하나 이상의 요소 요소 하위 요소를
정의에 추가하여 요소를 정의합니다.
예 35.1. “XML 스키마 복잡성 유형” XML 스키마로 복잡한 유형 정의를 보여줍니다.
예 35.1. XML 스키마 복잡성 유형
<complexType name="sequence"> <sequence> <element name="name" type="xsd:string" /> <element name="street" type="xsd:short" /> <element name="city" type="xsd:string" /> <element name="state" type="xsd:string" /> <element name="zipCode" type="xsd:string" /> </sequence> </complexType>
<complexType name="sequence">
<sequence>
<element name="name" type="xsd:string" />
<element name="street" type="xsd:short" />
<element name="city" type="xsd:string" />
<element name="state" type="xsd:string" />
<element name="zipCode" type="xsd:string" />
</sequence>
</complexType>
35.1.3. Java에 매핑
XML 스키마 복잡한 유형은 Java 클래스에 매핑됩니다. 복잡한 유형 정의의 각 요소는 Java 클래스의 멤버 변수에 매핑됩니다. 복잡한 유형의 각 요소에 대해 getter 및 setter 메서드도 생성됩니다.
생성된 모든 Java 클래스는 @ CryostatType
주석으로 데코레이팅됩니다. 이름이 지정된 복합 유형에 대한 매핑인 경우 주석 이름은
complexType
요소의 name
속성 값으로 설정됩니다. 복잡한 유형이 요소 정의의 일부로 정의된 경우 @ CryostatType
주석의 name
속성 값은 요소
요소의 name
속성 값입니다.
“인라인 유형으로 요소의 Java 매핑” 에 설명된 대로, 요소 정의의 일부로 정의된 복잡한 유형에 대해 생성되는 경우 생성된 클래스는 @ CryostatRoot
>-< 주석으로 분류됩니다.
런타임에 XML 스키마 복잡한 유형의 요소를 처리하는 방법을 나타내는 지침을 제공하기 위해 코드 생성기는 클래스와 해당 멤버 변수를 해독하는 데 사용되는 주석을 변경합니다.
- 모든 복잡한 유형
모든 복잡한 유형은
all
요소를 사용하여 정의됩니다. 여기에는 다음과 같이 주석이 있습니다.-
@ CryostatType
주석의propOrder
속성이 비어 있습니다. -
각 요소는
@
Cryostat 주석으로 데코레이팅됩니다. @ Cryostat>
;-< 주석의필수
속성은true
로 설정됩니다.예 35.2. “모든 복잡한 유형의 매핑” 두 개의 요소가 있는 모든 복잡한 형식에 대한 매핑을 표시합니다.
예 35.2. 모든 복잡한 유형의 매핑
@XmlType(name = "all", propOrder = { }) public class All { @XmlElement(required = true) protected BigDecimal amount; @XmlElement(required = true) protected String type; public BigDecimal getAmount() { return amount; } public void setAmount(BigDecimal value) { this.amount = value; } public String getType() { return type; } public void setType(String value) { this.type = value; } }
@XmlType(name = "all", propOrder = { }) public class All { @XmlElement(required = true) protected BigDecimal amount; @XmlElement(required = true) protected String type; public BigDecimal getAmount() { return amount; } public void setAmount(BigDecimal value) { this.amount = value; } public String getType() { return type; } public void setType(String value) { this.type = value; } }
Copy to Clipboard Copied!
-
- 복잡한 유형 선택
선택 복잡한 유형은
choice
요소를 사용하여 정의됩니다. 여기에는 다음과 같이 주석이 있습니다.-
@ CryostatType
주석의propOrder
속성은 요소의 이름이 XML 스키마 정의에 표시되는 순서대로 나열됩니다. 멤버 변수에는 주석이 없습니다.
예 35.3. “선택 복잡한 유형 매핑” 두 개의 요소가 포함된 선택한 복잡한 형식에 대한 매핑을 표시합니다.
예 35.3. 선택 복잡한 유형 매핑
@XmlType(name = "choice", propOrder = { "address", "floater" }) public class Choice { protected Sequence address; protected Float floater; public Sequence getAddress() { return address; } public void setAddress(Sequence value) { this.address = value; } public Float getFloater() { return floater; } public void setFloater(Float value) { this.floater = value; } }
@XmlType(name = "choice", propOrder = { "address", "floater" }) public class Choice { protected Sequence address; protected Float floater; public Sequence getAddress() { return address; } public void setAddress(Sequence value) { this.address = value; } public Float getFloater() { return floater; } public void setFloater(Float value) { this.floater = value; } }
Copy to Clipboard Copied!
-
- 시퀀스 복잡한 유형
시퀀스 복합 형식은 시퀀스 요소를 사용하여 정의됩니다.A sequence complex type is defined using the
sequence
element. 여기에는 다음과 같이 주석이 추가됩니다.-
@ CryostatType
주석의propOrder
속성은 요소의 이름이 XML 스키마 정의에 표시되는 순서대로 나열됩니다. -
각 요소는
@
Cryostat 주석으로 데코레이팅됩니다. @ Cryostat>
;-< 주석의필수
속성은true
로 설정됩니다.예 35.4. “시퀀스 복잡한 유형의 매핑” 예 35.1. “XML 스키마 복잡성 유형” 에 정의된 복잡한 유형의 매핑을 보여줍니다.
예 35.4. 시퀀스 복잡한 유형의 매핑
@XmlType(name = "sequence", propOrder = { "name", "street", "city", "state", "zipCode" }) public class Sequence { @XmlElement(required = true) protected String name; protected short street; @XmlElement(required = true) protected String city; @XmlElement(required = true) protected String state; @XmlElement(required = true) protected String zipCode; public String getName() { return name; } public void setName(String value) { this.name = value; } public short getStreet() { return street; } public void setStreet(short value) { this.street = value; } public String getCity() { return city; } public void setCity(String value) { this.city = value; } public String getState() { return state; } public void setState(String value) { this.state = value; } public String getZipCode() { return zipCode; } public void setZipCode(String value) { this.zipCode = value; } }
@XmlType(name = "sequence", propOrder = { "name", "street", "city", "state", "zipCode" }) public class Sequence { @XmlElement(required = true) protected String name; protected short street; @XmlElement(required = true) protected String city; @XmlElement(required = true) protected String state; @XmlElement(required = true) protected String zipCode; public String getName() { return name; } public void setName(String value) { this.name = value; } public short getStreet() { return street; } public void setStreet(short value) { this.street = value; } public String getCity() { return city; } public void setCity(String value) { this.city = value; } public String getState() { return state; } public void setState(String value) { this.state = value; } public String getZipCode() { return zipCode; } public void setZipCode(String value) { this.zipCode = value; } }
Copy to Clipboard Copied!
-