35.5.5. 시퀀스의 발생 제한
35.5.5.1. 개요
기본적으로 시퀀스 요소의 내용은 복잡한 형식의 인스턴스에 한 번만 나타날 수 있습니다.By default, the contents of a sequence
element can only appear once in an instance of a complex type. 시퀀스 요소에서 정의한 요소 시퀀스가 minOccurs
속성 및 해당 maxOccurs
특성을 사용하여 표시할 수 있는 횟수를 변경할 수 있습니다.You can change the number of times the sequence
of elements defined by a sequence element is allowed to appear using its minOccurs attribute and its maxOccurs attribute. 이러한 특성을 사용하면 시퀀스 유형이 복잡한 유형의 인스턴스에서 무제한 횟수로 0이 발생할 수 있습니다.Using these attributes you can specify that the sequence type can occur zero to an unlimited number of times in an instance of a complex type.
35.5.5.2. XML 스키마 사용
minOccurs
속성은 정의된 복합 유형의 인스턴스에서 시퀀스가 발생해야 하는 최소 횟수를 지정합니다. 값은 모든 양의 정수가 될 수 있습니다. minOccurs
특성을 0
으로 설정하면 시퀀스가 복잡한 형식의 인스턴스 내에 나타나지 않도록 지정합니다.Setting the minOccurs attribute to 0 specifies that the sequence does not need to appear inside an instance of the complex type.
maxOccurs
속성은 정의된 복합 유형의 인스턴스에서 시퀀스가 발생할 수 있는 횟수에 대한 상한을 지정합니다. 값은 0이 아닌, 양의 정수 또는 바인딩되지 않은
값일 수 있습니다. maxOccurs
속성을 unbounded
로 설정하면 시퀀스가 무한한 횟수로 표시될 수 있습니다.
예 35.20. “Occurrence Constraints이 있는 순서” 시퀀스 발생 제약 조건을 사용하여 시퀀스 형식 CultureInfo의 정의를 표시합니다.Shows the definition of a sequence type, CultureInfo
, with sequence occurrence constraints. 시퀀스는 0에서 2번 반복할 수 있습니다.
예 35.20. Occurrence Constraints이 있는 순서
<complexType name="CultureInfo"> <sequence minOccurs="0" maxOccurs="2"> <element name="Name" type="string"/> <element name="Lcid" type="int"/> </sequence> </complexType>
35.5.5.3. Java로의 매핑
단일 인스턴스 시퀀스와 달리 여러 번 발생할 수 있는 XML 스키마 시퀀스는 단일 멤버 변수를 사용하여 Java 클래스에 매핑됩니다.Unlike single instance sequences, XML Schema sequences that can occur multiple times are mapped to a Java class with a single member variable. 이 단일 멤버 변수는 시퀀스의 여러 발생에 대한 모든 데이터를 보유하는 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.20. “Occurrence Constraints이 있는 순서” 에 정의된 시퀀스가 두 번 발생한 경우 목록에 네 개의 항목이 있습니다.
Java 클래스의 멤버 변수의 이름은 멤버 요소의 이름을 연결하여 파생됩니다. 요소 이름은 및 로 구분되며 변수 이름의 첫 번째 문자는 소문자로 변환됩니다. 예를 들어 예 35.20. “Occurrence Constraints이 있는 순서” 에서 생성된 멤버 변수의 이름은
nameAndLcid
입니다.
목록에 저장된 개체 유형은 멤버 요소의 유형 간의 관계에 따라 달라집니다. 예를 들면 다음과 같습니다.
-
멤버 요소가 동일한 유형의 경우 생성된 목록에
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.21. “Occurrence Constraint가 포함된 시퀀스를 나타냅니다.Represents an Sequence with an Occurrence Constraint” 예 35.20. “Occurrence Constraints이 있는 순서” 에 정의된 XML 스키마 시퀀스의 Java 매핑을 보여줍니다.
예 35.21. Occurrence Constraint가 포함된 시퀀스를 나타냅니다.Represents an Sequence with an Occurrence Constraint
@XmlType(name = "CultureInfo", propOrder = { "nameAndLcid" }) public class CultureInfo { @XmlElements({ @XmlElement(name = "Name", type = String.class), @XmlElement(name = "Lcid", type = Integer.class) }) protected List<Serializable> nameAndLcid; public List<Serializable> getNameAndLcid() { if (nameAndLcid == null) { nameAndLcid = new ArrayList<Serializable>(); } return this.nameAndLcid; } }
35.5.5.4. minOccurs가 0으로 설정
minOccurs
요소만 지정되고 해당 값이 0
이면 minOccurs
속성이 설정되지 않은 것처럼 코드 생성기가 Java 클래스를 생성합니다.