2.5. 복잡한 데이터 유형 정의
초록
XML 스키마는 간단한 데이터 유형에서 복잡한 데이터 구조를 구축하기 위한 유연하고 강력한 메커니즘을 제공합니다. 요소 및 특성의 시퀀스를 만들어 데이터 구조를 생성할 수 있습니다. 정의된 형식을 확장하여 더 복잡한 유형을 만들 수도 있습니다.
복잡한 데이터 구조를 빌드하는 것 외에도 열거된 형식, 특정 값 범위가 있는 데이터 형식 또는 기본 형식을 확장하거나 제한하여 특정 패턴을 따라야 하는 데이터 유형을 설명할 수도 있습니다.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. “간단한 structure” 에 표시된 구조는 두 개의 요소가 있는 복잡한 유형으로 XML 스키마에 정의됩니다.
예 2.3. 간단한 structure
struct personalInfo
{
string name;
int age;
};
예 2.4. “복잡한 유형” 예 2.3. “간단한 structure” 에 정의된 구조에 대해 하나의 가능한 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. “복잡한 유형 설명자 요소” 복잡한 형식 동작을 정의하는 데 사용되는 요소를 표시합니다.Shows the elements used to define complex type behavior.
표 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 및 max occur라는 두 가지 다른 일반적으로 사용되는 선택적 속성이 있습니다. 이러한 속성은 구조에서 필드가 발생하는 횟수에 바인딩된 위치를 지정합니다. 기본적으로 각 필드는 복잡한 유형에서 한 번만 수행됩니다. 이러한 특성을 사용하여 필드에 사용해야 하거나 구조에 나타날 수 있는 횟수를 변경할 수 있습니다. 예를 들어 예 2.6. “발생 제약 조건이 있는 간단한 복잡한 유형” 에 표시된 것처럼 최소 3번 이상 발생해야 하는 이전Jobs 필드를 정의할 수 있습니다.
예 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>
또한 min Cryostat를 사용하여 예 2.7. “min#187가 0으로 설정된 간단한 복잡한 유형” 에 표시된 대로 min #187를 0으로 설정하여 수명 필드를 선택 사항으로 만들 수도 있습니다. 이 경우 수명은 생략할 수 있으며 데이터는 계속 유효합니다.
예 2.7. min#187가 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 요소 정의에 특성 요소를 정의합니다. 특성 요소는 all,sequence 또는 choice 요소 후에만 나타날 수 있습니다. 각 복잡한 유형의 속성에 대해 하나의 특성 요소를 지정합니다. 모든 특성 요소는 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 특성이 있음을 지정합니다. 특성 요소에는 다음과 같은 특성이 있습니다.
특성 요소에서는 특성의 기본값 을 지정할 수 있는 선택적 기본 특성을 지정할 수 있습니다.
2.5.2. 배열 정의
2.5.2.1. 개요
Apache CXF는 계약에 배열을 정의하는 두 가지 방법을 지원합니다. 첫 번째는 max #187 특성의 값이 두 개 이상인 단일 요소를 사용하여 복잡한 형식을 정의합니다. 두 번째는 Cryostat 배열을 사용하는 것입니다. Cryo stat 배열은 다차원 배열을 쉽게 정의하고 스파스적으로 채워진 배열을 전송할 수 있는 기능과 같은 추가 기능을 제공합니다.
2.5.2.2. 복잡한 유형 배열
복잡한 유형 배열은 시퀀스 복잡한 유형의 특수한 사례입니다. 간단히 단일 요소를 사용하여 복잡한 형식을 정의하고 max #187 특성에 값을 지정합니다. 예를 들어 20개의 부동 소수점 숫자 배열을 정의하려면 예 2.9. “복잡한 유형 배열” 에 표시된 것과 유사한 복잡한 유형을 사용합니다.
예 2.9. 복잡한 유형 배열
<complexType name="personalInfo"> <element name="averages" type="xsd:float" maxOccurs="20"/> </complexType>
min #187 속성의 값을 지정할 수도 있습니다.
2.5.2.3. Cryostat 배열
Cryostat 배열은 wsdl:arrayType 요소를 사용하여 Cryostat -ENC:Array 기본 유형에서 파생하여 정의됩니다. 이 구문은 예 2.10. “wsdl:arrayType을 사용하여 파생된 Cryostat 배열의 구문” 에 표시됩니다. definitions 요소가 SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 를 선언하는지 확인합니다.
예 2.10. wsdl:arrayType을 사용하여 파생된 Cryostat 배열의 구문
<complexType name="TypeName"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="ElementType<ArrayBounds>"/> </restriction> </complexContent> </complexType>
이 구문을 사용하여 TypeName 은 새로 정의된 배열 유형의 이름을 지정합니다. elementType 은 배열의 요소 유형을 지정합니다. ArrayBounds 배열의 차원 수를 지정합니다. 단일 차원 배열을 지정하려면 [] 를 사용합니다. 2차원 배열을 지정하려면 [][] 또는 [,] 을 사용합니다.
예를 들어 예 2.11. “Cryostat 배열의 정의” 에 표시된 Cryostat 배열, CryostatStrings는 1차원 문자열 배열을 정의합니다. wsdl:arrayType 속성은 배열 요소의 유형을 지정하며, xsd:string 및 차원 수는 [] 차원을 의미합니다.
예 2.11. Cryostat 배열의 정의
<complexType name="SOAPStrings">
<complexContent>
<restriction base="SOAP-ENC:Array">
<attribute ref="SOAP-ENC:arrayType"
wsdl:arrayType="xsd:string[]"/>
</restriction>
</complexContent>
</complexType>Cryostat 1.1 사양에 설명된 대로 간단한 요소를 사용하여 Cryostat 배열을 설명할 수도 있습니다. 이 구문은 예 2.12. “요소를 사용하여 파생된 Cryostat 배열의 구문” 에 표시됩니다.
예 2.12. 요소를 사용하여 파생된 Cryostat 배열의 구문
<complexType name="TypeName"> <complexContent> <restriction base="SOAP-ENC:Array"> <sequence> <element name="ElementName" type="ElementType" maxOccurs="unbounded"/> </sequence> </restriction> </complexContent> </complexType>
이 구문을 사용하는 경우 요소의 max Cryostat 속성을 항상 unbounded 로 설정해야 합니다.
2.5.3. 확장별 유형 정의
대부분의 주요 코딩 언어와 마찬가지로 XML 스키마를 사용하면 다른 데이터 유형에서 일부 요소를 상속하는 데이터 유형을 만들 수 있습니다. 이를 확장에 따른 유형 정의라고 합니다. 예를 들어, 다음과 같은 새 유형을 생성하여 예 2.4. “복잡한 유형” 에 정의된 personal 구조를 확장한 새 유형을 생성할 수 있습니다. 즉, Earth라는 새 요소를 추가하여 에 정의된 personalInfo 구조를 확장할 수 있습니다. Info
확장으로 정의된 유형에는 다음 네 가지 부분이 있습니다.
-
유형 이름은
complexType요소의name특성에 따라 정의됩니다. complexContent요소는 새 형식에 둘 이상의 요소가 포함되도록 지정합니다.참고복잡한 유형에 새 특성만 추가하는 경우
simpleContent요소를 사용할 수 있습니다.-
기본 유형이라고 하는 새 형식이 파생되는 형식은
확장요소의기본특성에 지정됩니다. -
새 유형의 요소 및 특성은
확장요소에 정의되어 있으며 일반 복잡한 형식에도 마찬가지입니다.
예를 들어, Ali Info 는 예 2.13. “확장에 의해 정의된 유형” 에 표시된 대로 정의됩니다.
예 2.13. 확장에 의해 정의된 유형
<complexType name="alienInfo">
<complexContent>
<extension base="xsd1:personalInfo">
<sequence>
<element name="planet" type="xsd:string"/>
</sequence>
</extension>
</complexContent>
</complexType>2.5.4. 제한적으로 유형 정의
2.5.4.1. 개요
XML 스키마를 사용하면 XML 스키마 간단한 유형의 가능한 값을 제한하여 새 형식을 만들 수 있습니다. 예를 들어 간단한 유형인 SSN 을 정의할 수 있습니다. 정확히 9자 문자열입니다. 간단한 형식을 제한하여 정의된 새 형식은 simpleType 요소를 사용하여 정의됩니다.
제한적으로 유형의 정의에는 다음 세 가지가 필요합니다.
-
새 형식의 이름은
simpleType요소의name특성에 따라 지정됩니다. -
기본 유형이라고 하는 새 형식이 파생되는 simple 유형은
restriction요소에 지정됩니다. “기본 유형 지정”을 참조하십시오. -
facet 라는 규칙은 기본 유형에 배치된 제한을 정의하는 제한
사항은 제한요소의 하위 항목으로 정의됩니다. “제한 사항 정의”을 참조하십시오.
2.5.4.2. 기본 유형 지정
기본 유형은 새 유형을 정의하도록 제한되는 유형입니다. restriction 요소를 사용하여 지정합니다. restriction 요소는 simpleType 요소의 유일한 자식이며 기본 유형을 지정하는 하나의 특성인 base 입니다. 기본 유형은 XML 스키마 간단한 유형 중 하나일 수 있습니다.
예를 들어 xsd:int 의 값을 제한하여 새 유형을 정의하려면 예 2.14. “int를 기본 유형으로 사용” 에 표시된 것과 같은 정의를 사용합니다.
예 2.14. int를 기본 유형으로 사용
<simpleType name="restrictedInt">
<restriction base="xsd:int">
...
</restriction>
</simpleType>2.5.4.3. 제한 사항 정의
기본 유형에 배치된 제한을 정의하는 규칙을 facet 라고 합니다. facet는 facet를 적용하는 방법을 정의하는 하나의 속성인 값이 있는 요소입니다. 사용 가능한 facet 및 유효한 값 설정은 기본 유형에 따라 다릅니다. 예를 들어 xsd:string 은 다음을 포함하여 6개의 facet를 지원합니다.
-
length -
minLength -
maxLength -
패턴 -
whitespace -
열거
각 facet 요소는 restriction 요소의 자식입니다.
2.5.4.4. 예제
예 2.15. “SSN 간단한 유형 설명” 소셜 보안 번호를 나타내는 간단한 유형 SSN 의 예를 보여줍니다. 결과 유형은 xxx-xx-xxxx 형식의 문자열입니다. <SSN>032-43-9876<SSN>은 이 유형의 요소에 유효한 값이지만 <SSN>032439876</SSN>은 그렇지 않습니다.
예 2.15. SSN 간단한 유형 설명
<simpleType name="SSN">
<restriction base="xsd:string">
<pattern value="\d{3}-\d{2}-\d{4}"/>
</restriction>
</simpleType>2.5.5. 열거된 유형 정의
2.5.5.1. 개요
XML 스키마의 열거 형식은 제한에 따라 정의의 특수한 사례입니다. 이는 모든 XML 스키마 기본 유형에서 지원하는 열거 facet를 사용하여 설명됩니다. 최신 프로그래밍 언어의 열거된 형식과 마찬가지로 이 형식의 변수에는 지정된 값 중 하나만 있을 수 있습니다.As with enumerated types in most modern programming languages, a variable of this type can only have one of the specified values.
2.5.5.2. XML 스키마에서 열거 정의
열거를 정의하는 구문은 예 2.16. “열거의 구문” 에 표시됩니다.
예 2.16. 열거의 구문
<simpleType name="EnumName"> <restriction base="EnumType"> <enumeration value="Case1Value"/> <enumeration value="Case2Value"/> ... <enumeration value="CaseNValue"/> </restriction> </simpleType>
EnumName 은 열거 유형의 이름을 지정합니다. EnumType 은 대소문자 값의 유형을 지정합니다. CaseNValues(여기서 N은 숫자 1 이상)는 열거자의 각 특정 사례에 대한 값을 지정합니다.Critical caseNValue, where N is any number one or greater, specifies the value for each specific case of the enumeration. 열거된 형식에는 임의의 수의 대소문자 값이 있을 수 있지만 간단한 유형에서 파생되므로 한 번에 하나의 case 값만 유효합니다.
2.5.5.3. 예제
예를 들어, 열거 위젯Size에 정의된 요소가 있는 XML 문서는 < widgetSize >big</widgetSize>가 포함된 경우 유효하지만 <widgetSize>big,mungo</widgetSize>가 포함된 경우 유효하지 않습니다. 예 2.17. “widgetSize 열거”
예 2.17. widgetSize 열거
<simpleType name="widgetSize">
<restriction base="xsd:string">
<enumeration value="big"/>
<enumeration value="large"/>
<enumeration value="mungo"/>
</restriction>
</simpleType>