35.5.3. 선택 요소에서의 발생 제약 조건
35.5.3.1. 개요
기본적으로 선택 요소 결과는 복잡한 형식의 인스턴스에 한 번만 나타날 수 있습니다.By default, the results of a choice
element can only appear once in an instance of a complex type. 선택 요소에서 정의한 구조를 나타내기 위해 선택
한 요소가 minOccurs
속성 및 해당 mxOccurs
특성을 사용하여 표시할 수 있는 횟수를 변경할 수 있습니다. 이러한 특성을 사용하면 선택 형식이 복잡한 유형의 인스턴스에서 무제한 시간을 무제한으로 발생할 수 있도록 지정할 수 있습니다.Using these attributes you can specify that the choice type can occur zero to an unlimited number of times in an instance of a complex type. 선택 유형에 대해 선택한 요소는 유형마다 동일할 필요가 없습니다.
35.5.3.2. XML 스키마로 사용
minOccurs
속성은 선택 유형이 표시되어야 하는 최소 횟수를 지정합니다. 값은 모든 양의 정수가 될 수 있습니다. minOccurs
속성을 0
으로 설정하면 선택 유형이 복잡한 유형의 인스턴스 내에 표시되지 않아도 됩니다.
maxOccurs
속성은 선택 형식이 표시될 수 있는 최대 횟수를 지정합니다. 값은 0이 아닌, 양의 정수 또는 바인딩되지 않은
값일 수 있습니다. maxOccurs
속성을 unbounded
로 설정하면 선택 형식이 무한한 횟수가 표시될 수 있습니다.
예 35.18. “Occurrence 제약 조건 선택” 선택 유형인 ClubEvent
의 정의를 선택 발생 제약 조건으로 표시합니다. 선택 유형 전체적으로 0에서 바인딩되지 않은 시간을 반복할 수 있습니다.
예 35.18. Occurrence 제약 조건 선택
<complexType name="ClubEvent"> <choice minOccurs="0" maxOccurs="unbounded"> <element name="MemberName" type="xsd:string"/> <element name="GuestName" type="xsd:string"/> </choice> </complexType>
35.5.3.3. Java로의 매핑
단일 인스턴스 선택 구조와는 달리 여러 번 발생할 수 있는 XML 스키마 선택 구조는 단일 멤버 변수를 사용하여 Java 클래스에 매핑됩니다. 이 단일 멤버 변수는 시퀀스의 여러 발생에 대한 모든 데이터를 보유하는 List<T> 개체입니다.This single member variable is a List
<T> object that holds all of the data for the multiple occurrences of the sequence. 예를 들어 예 35.18. “Occurrence 제약 조건 선택” 에 정의된 시퀀스가 두 번 발생한 경우 목록에 두 개의 항목이 있습니다.
Java 클래스의 멤버 변수의 이름은 멤버 요소의 이름을 연결하여 파생됩니다. 요소 이름은 Or
로 구분되며 변수 이름의 첫 번째 문자는 소문자로 변환됩니다. 예를 들어 예 35.18. “Occurrence 제약 조건 선택” 에서 생성된 멤버 변수의 이름은 memberNameOrGuestName
입니다.
목록에 저장된 개체 유형은 멤버 요소의 유형 간의 관계에 따라 달라집니다. 예를 들면 다음과 같습니다.
-
멤버 요소가 동일한 유형의 경우 생성된 목록에
JAXBElement<T
> 개체가 포함됩니다.JAXBElement<T
> 개체의 기본 유형은 멤버 요소 형식의 일반 매핑에 의해 결정됩니다. - 멤버 요소가 다른 형식이며 Java 표현이 공통 인터페이스를 구현하는 경우 목록에 공통 인터페이스의 개체가 포함됩니다.
- 멤버 요소가 다른 형식이며 해당 Java 표현이 공통 기본 클래스를 확장하면 목록에 공통 기본 클래스의 개체가 포함됩니다.
-
다른 조건이 충족되지 않으면 목록에
Object
오브젝트가 포함됩니다.
생성된 Java 클래스는 멤버 변수에 대한 getter 메서드만 갖습니다. getter 메서드는 라이브 목록에 대한 참조를 반환합니다. 반환된 목록에 대한 수정 사항은 실제 오브젝트에 적용됩니다.
Java 클래스는 @XmlType
주석으로 장식됩니다. 주석의 name
속성은 XML Schema 정의의 부모 요소에서 name
속성 값으로 설정됩니다. 주석의 propOrder
속성에는 시퀀스의 요소를 나타내는 단일 멤버 변수가 포함되어 있습니다.
선택한 구조의 요소를 나타내는 멤버 변수는 @XmlElements
주석으로 장식됩니다. @XmlElements
주석에는 쉼표로 구분된 @XmlElement
주석 목록이 포함되어 있습니다. 목록에는 유형의 XML 스키마 정의에 정의된 각 멤버 요소에 대해 하나의 @XmlElement
주석이 있습니다. 목록의 @XmlElement
주석에는 XML Schema 요소 요소
의 name
속성으로 설정된 name
속성이 있으며 XML Schema 요소 요소
유형
의 매핑에서 생성된 Java 클래스로 설정된 해당 type 속성이 있습니다.
예 35.19. “Occurrence Constraint를 사용한 Choice 구조의 Java 설명” 예 35.18. “Occurrence 제약 조건 선택” 에 정의된 XML 스키마 선택 구조의 Java 매핑을 보여줍니다.
예 35.19. Occurrence Constraint를 사용한 Choice 구조의 Java 설명
@XmlType(name = "ClubEvent", propOrder = { "memberNameOrGuestName" }) public class ClubEvent { @XmlElementRefs({ @XmlElementRef(name = "GuestName", type = JAXBElement.class), @XmlElementRef(name = "MemberName", type = JAXBElement.class) }) protected List<JAXBElement<String>> memberNameOrGuestName; public List<JAXBElement<String>> getMemberNameOrGuestName() { if (memberNameOrGuestName == null) { memberNameOrGuestName = new ArrayList<JAXBElement<String>>(); } return this.memberNameOrGuestName; } }
35.5.3.4. minOccurs가 0으로 설정
minOccurs
요소만 지정되고 해당 값이 0
이면 minOccurs
속성이 설정되지 않은 것처럼 코드 생성기가 Java 클래스를 생성합니다.