2.5. 복잡한 데이터 유형 정의
초록
XML 스키마는 단순 데이터 형식에서 복잡한 데이터 구조를 구축하기 위한 유연하고 강력한 메커니즘을 제공합니다. 요소 및 속성 시퀀스를 만들어 데이터 구조를 만들 수 있습니다.You can create data structures by creating a sequence of elements and attributes. 정의된 유형을 확장하여 더욱 복잡한 유형을 생성할 수도 있습니다.
복잡한 데이터 구조를 빌드하는 것 외에도 열거된 형식, 특정 범위의 값이 있는 데이터 형식 또는 기본 형식을 확장하거나 제한하여 특정 패턴을 따라야 하는 데이터 형식도 설명할 수 있습니다.In addition to building complex data structures, you can also describe specialized types such as enumerated types, data types that have a specific range of values, or data types that need to follow certain patterns by either extending or restricting the primitive types.
2.5.1. 데이터 구조 정의
2.5.1.1. 개요
XML 스키마에서 데이터 필드 컬렉션인 데이터 단위는 complexType
요소를 사용하여 정의됩니다. 복잡한 유형을 지정하려면 다음 세 가지 정보가 필요합니다.
-
정의된 형식의 이름은
complexType
요소의name
특성에 지정됩니다. -
complexType
의 첫 번째 자식 요소는 유선에 배치될 때 구조 필드의 동작을 설명합니다. “복잡한 유형 종류” 을 참조하십시오. -
정의된 구조의 각 필드는
complexType
요소
의 손자인 요소에 정의됩니다. “구조의 부분 정의” 을 참조하십시오.
예를 들어 예 2.3. “간단한 구조” 에 표시된 구조는 두 개의 요소가 있는 복잡한 유형으로 XML 스키마로 정의됩니다.
예 2.3. 간단한 구조
struct personalInfo { string name; int age; };
예 2.4. “복잡한 유형” 예 2.3. “간단한 구조” 에 정의된 구조의 사용 가능한 XML 스키마 매핑을 보여 줍니다. 예 2.4. “복잡한 유형” 로 정의된 구조는 name
및 age
의 두 가지 요소를 포함하는 메시지를 생성합니다.
.
예 2.4. 복잡한 유형
<complexType name="personalInfo"> <sequence> <element name="name" type="xsd:string" /> <element name="age" type="xsd:int" /> </sequence> </complexType>
2.5.1.2. 복잡한 유형 종류
XML 스키마에는 XML 문서를 표시하고 유선으로 전달될 때 복잡한 형식의 필드를 구성하는 방법을 설명하는 세 가지 방법이 있습니다. complexType
요소의 첫 번째 자식 요소는 사용 중인 복잡한 유형을 결정합니다. 표 2.1. “복잡한 유형 설명자 요소” 복잡한 유형 동작을 정의하는 데 사용되는 요소를 보여줍니다.
요소 | 복잡한 유형 동작 |
---|---|
모든 복잡한 유형의 필드가 있을 수 있으며 유형 정의에 지정된 순서에 있어야 합니다. | |
모든 복잡한 유형의 필드는 존재할 수 있지만 임의의 순서로 있을 수 있습니다. | |
구조의 요소 중 하나만 메시지에 배치할 수 있습니다. |
예 2.5. “간단한 복잡한 선택 유형” 에 표시된 대로 선택
요소를 사용하여 구조가 정의된 경우 name
요소 또는 age
요소와 함께 메시지를 생성합니다.
예 2.5. 간단한 복잡한 선택 유형
<complexType name="personalInfo"> <choice> <element name="name" type="xsd:string"/> <element name="age" type="xsd:int"/> </choice> </complexType>
2.5.1.3. 구조의 부분 정의
요소 요소
를 사용하여 구조를 구성하는 데이터 필드를 정의합니다. 모든 complexType
요소에는 하나 이상의 요소
가 포함되어야 합니다. complexType
요소
의 각 요소는 정의된 데이터 구조의 필드를 나타냅니다.
데이터 구조의 필드를 완전히 설명하기 위해 요소 요소에
는 다음 두 가지 필수 특성이 있습니다.
name
및 type
외에도요소 요소에
는 minOcurrs
및 maxOccurs
라는 두 가지 일반적으로 사용되는 선택적 속성이 있습니다. 이러한 속성은 구조에서 필드가 발생하는 횟수에 바인딩됩니다. 기본적으로 각 필드는 복잡한 유형에서 한 번만 수행됩니다. 이러한 특성을 사용하여 필드에 필요한 횟수 또는 구조에 나타날 수 있는 횟수를 변경할 수 있습니다. 예를 들어 예 2.6. “발생 제약 조건을 사용하는 간단한 복합 유형” 과 같이 최소 세 번 이상 발생해야 하는 필드인 previous
Job을 정의할 수 있으며, 7번 이상은 지정할 수 없습니다.
예 2.6. 발생 제약 조건을 사용하는 간단한 복합 유형
<complexType name="personalInfo"> <all> <element name="name" type="xsd:string"/> <element name="age" type="xsd:int"/> <element name="previousJobs" type="xsd:string: minOccurs="3" maxOccurs="7"/> </all> </complexType>
minOccurs
를 사용하면 예 2.7. “minOccurs를 0으로 설정한 간단한 복합 유형” 에 표시된 대로 minOccurs
를 0으로 설정하여 age
필드를 선택적으로 만들 수도 있습니다. 이 경우 사용 기간
을 생략할 수 있으며 데이터는 계속 유효합니다.
예 2.7. minOccurs를 0으로 설정한 간단한 복합 유형
<complexType name="personalInfo"> <choice> <element name="name" type="xsd:string"/> <element name="age" type="xsd:int" minOccurs="0"/> </choice> </complexType>
2.5.1.4. 속성 정의
XML 문서에서 특성은 요소의 태그에 포함됩니다. 예를 들어 아래 코드의 complexType
요소에서 name
은 특성입니다. 복잡한 유형의 특성을 지정하려면 complexType
요소 정의에 특성
요소를 정의합니다. 특성 요소는 모든 , 시퀀스 또는 선택 요소 이후에만 나타날 수 있습니다.An attribute
element can appear only after the all
,sequence
, or choice
element. 각 복잡한 유형의 특성에
대해 하나의 특성 요소를 지정합니다. 모든 특성
요소는 complexType
요소의 직접 자식이어야 합니다.
예 2.8. 속성이 있는 복합 유형
<complexType name="personalInfo"> <all> <element name="name" type="xsd:string"/> <element name="previousJobs" type="xsd:string" minOccurs="3" maxOccurs="7"/> </all> <attribute name="age" type="xsd:int" use="required" /> </complexType>
이전 코드에서 특성 요소는 personalInfo 복잡한 형식에 age 속성이 있음을 지정합니다.In the previous code, the attribute
element specifies that the personalInfo
complex type has an age
attribute. attribute
요소에는 다음과 같은 속성이 있습니다.
특성 요소에서 특성
의 기본값을 지정할 수 있는 선택적 default
특성을 지정할 수 있습니다.