Download presentation
Presentation is loading. Please wait.
1
데이터 타입 이해 1. 컴플렉스 타입 2. 컴플렉스 타입의 확장 및 제한
2
1. 컴플렉스 타입 1-1 컴플렉스 타입 용도 컴플렉스 타입(complexType)은 속성이나 자식 엘리먼트를 가지는 엘리먼트 선언에 필요한 타입이다. 1-2 컴플렉스 타입 문법 컴플렉스 타입을 정의하기 위해서는 complexType 엘리먼트를 사용한다. (1) 글로벌 컴플렉스 타입 정의 문법 루트 엘리먼트인 schema 엘리먼트의 자식 엘리먼트로 컴플렉스 타입을 정의할 경우 글로벌 컴플렉스 타입 정의가 된다. 글로벌 컴플렉스 타입 정의는 엘리먼트 선언시 type 속성값에서 컴플렉스 타입 name으로 참조 적용 된다. 문법 <complexType name=”컴플렉스 타입 이름”> ~~~ </complexType>
3
1. 컴플렉스 타입 글로벌 컴플렉스 타입의 정의 위치 및 적용 방법. 스키마 문서
<?xml version="1.0" encoding="euc-kr"?> <xsd:schema xmlns:xsd=" <!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name=”ctTest”> ~~~ </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name=”엘리먼트명” type=”ctTest”/>
4
1. 컴플렉스 타입 (2) 로컬 컴플렉스 타입 정의 문법 엘리먼트 선언 내부에서 정의되는 컴플렉스 타입.
로컬 컴플렉스 타입은 name 속성이 없으므로 다른 엘리먼트 선언에서 참조 적용될 수 없고 해당 엘리먼트 선언에만 적용된다. 문법 <complexType> ~~~ </ complexType> 스키마문서 <?xml version="1.0" encoding="euc-kr"?> <xsd:schema xmlns:xsd=" <xsd:element name=”test”> <!-- 로컬 컴플렉스 타입 적용 --> <xsd: complexType> </xsd: complexType> </xsd:element>
5
1. 컴플렉스 타입 1-3 순차적으로 자식 엘리먼트들이 오는 컴플렉스 타입 정의
complexType의 자식 엘리먼트로 sequence 엘리먼트를 사용하여 정의한다. 주의 사항 : 자식 엘리먼트가 하나만 오더라도 sequence 엘리먼트를 사용해야 한다. 스키마 문서 <!-- 루트 엘리먼트 선언 --> <xsd:element name="booklist"> <!-- 로컬 컴플렉트 타입 정의 --> <xsd:complexType> <xsd:sequence> <xsd:element name="book" type="ctBook" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name="ctBook"> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="publisher" type="xsd:string"/> XML 문서 <book> <title>XML Programming</title> <author>신민철</author> <publisher>프리렉</publisher> </book>
6
1. 컴플렉스 타입 1-4 선택적으로 자식 엘리먼트들을 사용할 수 있는 컴플렉스 타입 정의 문법(1)
complexType 엘리먼트 및 sequence 엘리먼트에서 choice 엘리먼트를 사용하여 엘리먼트를 선언하게 되면 선택적으로 엘리먼트를 사용할 수 있게 된다. 문법(1) <complexType name=”컴플렉스 타입 이름”> <choice minOccurs=”최소선택횟수” maxOccurs=”최대선택횟수”> 엘리먼트 선언들 </choice> </complexType> 문법(2) <sequence> <choice minOccurs=”최소선택횟수” maxOccurs=”최대선택횟수”> </sequence> 스키마 문서 <xsd:choice maxOccurs="unbounded"> <xsd:element name="author" type="xsd:string"/> <xsd:element name="writer" type="xsd:string"/> </xsd:choice> < 실습 > C6_1302.xsd C6_1302.xml
7
1. 컴플렉스 타입 1-5 자식 엘리먼트와 속성을 동시에 갖는 컴플렉스 타입 정의 스키마 문서
complexType 엘리먼트에서 attribute 엘리먼트가 선언되는 위치는 sequence 엘리먼트 또는 choice 엘리먼트 다음이다. 스키마 문서 <!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name=”ctBook”> <xsd:sequence> <xsd:element name=”title” type=”xsd:string”/> <xsd:element name=”author” type=”xsd:string”/> <xsd:element name=”publisher” type=”xsd:string”/> <xsd:element name=”price” type=”xsd:int”/> <!--속성 선언--> <xsd:attribute name=”id” type=”xsd:ID”/> <xsd:attribute name=”kind” type=”xsd:string”/> </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name=”book” type=”ctBook” maxOccurs=”unbounded”/> XML 문서 <book id=”b1” kind=”computer”> <title>XML And Java</title> <author>신민철</author> <publisher>프리렉</publisher> <price>25000</price> </book>
8
1. 컴플렉스 타입 1-6 속성만 갖는 컴플렉스 타입 정의 빈(empty) 엘리먼트를 선언할 때에도 컴플렉스 타입이 사용된다.
문법 <complexType name=”컴플렉스 타입 이름”> 속성 선언들 </complexType> 스키마문서 <!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name=”ctImg”> <attribute name=”src” type=”xsd:anyURI” use=”required”/> </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name=”img” type=”ctImg” minOccurs=“0”/> XML문서 <img src=”/images/background.gif”/>
9
1. 컴플렉스 타입 1-7 데이터 및 속성을 동시에 갖는 컴플렉스 타입 정의 문법
속성은 있지만, 자식 엘리먼트 없이 심플 타입 데이터만 오는 엘리먼트 선언하기. 문법 <complexType name=”컴플렉스 타입 이름”> <simpleContent base=”데이터 타입”> <extension> 속성 선언 </extension> </simpleContent> </complexType> 스키마문서 <!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name=”ctPrice”> <xsd:simpleContent> <xsd:extension base=”xsd:int”> <xsd:attribute name=”unit” type=”xsd:string”/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name=”price” type=”ctPrice” /> XML문서 <price unit=”원”>25000</price> 심플 타입 컨텐트를 갖는 컴플렉스 타입
10
2. 컴플렉스 타입의 확장 및 제한 2-1 컴플렉스 타입의 확장 및 제한의 의미
컴플렉스 타입은 다른 컴플렉스 타입을 확장 및 제한할 수 있도록 상속의 개념을 적용할 수 있을 뿐만 아니라, 상속된 타입의 다형성(polymorphism)을 이용할 수 있는 방법도 제공하고 있다. - 컴플렉스 타입의 확장 : 기반이 되는 컴플렉스 타입에 속성이나 엘리먼트를 추가하는 것. - 컴플렉스 타입의 제한 : 기반이 되는 컴플렉스 데이터값 및 속성값의 범위를 제한하거나 엘리먼 트 일부를 제거하는 것. 2-2 심플 타입 컨텐트를 갖는 컴플렉스 타입을 확장 심플 타입 컨텐트를 갖는 컴플렉스 타입은 데이터와 속성을 동시에 갖는 컴플렉스 타입을 말한다. - 심플 타입 컨텐트를 갖는 컴플렉스 타입의 확장 : 속성을 추가하여 새로운 심플 타입 컨텐트를 갖는 컴플렉스 타입을 정의하는 것.
11
2. 컴플렉스 타입의 확장 및 제한 심플 타입 컨텐트를 갖는 컴플렉스 타입을 확장하는 컴플렉스 타입을 정의하는 문법. 문법
<xsd:complexType name="컴플렉스 타입 이름"> <xsd:simpleContent> <xsd:extension base="확장할 컴플렉스 타입 이름"> 엘리먼트 선언들 </xsd:extension> </xsd:simpleContent> </xsd:complexType> 주의 사항 : base 속성값으로 심플 타입 컨텐트를 갖지 않는, 즉 자식 엘리먼트나 속성만 가지고 있는 컴플렉스 타입 이름은 올 수 없다.
12
2. 컴플렉스 타입의 확장 및 제한 심플 타입 컨텐트를 갖는 컴플렉스 타입을 확장하는 컴플렉스 타입 예제. 스키마 문서
<!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name="ctPrice2"> <!-- 심플 컨텐트를 갖는 컴플렉스 타입 --> <xsd:simpleContent> <!-- 심플 컨텐트를 갖는 컴플렉스 타입인 ctPrice를 확장 --> <xsd:extension base="ctPrice"> <xsd:attribute name="card" type="xsd:boolean"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name="price" type="ctPrice2"/> XML <price unit="원" card="true">25000</price>
13
2. 컴플렉스 타입의 확장 및 제한 2-3 심플 타입 컨텐트를 갖는 컴플렉스 타입을 제한
simpleContent 엘리먼트의 자식 엘리먼트인 restriction 엘리먼트의 base 속성값에 심플 컨텐트를 갖는 컴플렉스 타입의 이름이 올 수 있다. 이 경우 해당 컴플렉스 타입을 제한하는 새로운 심플 타입 컨텐트를 갖는 컴플렉스 타입을 만들 수 있다. 주로 제한되는 내용은 기반이 되는 컴플렉스 타입의 데이터값의 범위이다. 문법 <xsd:complexType name="컴플렉스 타입 이름"> <xsd:simpleContent> <xsd:restriction base="제한할 컴플렉스 타입 이름"> 패싯 엘리먼트들 </xsd:restriction> </xsd:simpleContent> </xsd:complexType>
14
2. 컴플렉스 타입의 확장 및 제한 restriction 엘리먼트의 base 속성값으로 심플 타입 컨텐트를 갖지 않는, 즉 자식 엘리먼트나 속성만 가지고 있는 컴플렉스 타입은 올 수가 없다. 패싯(facet) 엘리먼트란 제한할 내용을 담고 있는 엘리먼트를 뜻한다. < 패싯 엘리먼트로 올 수 있는 것 > 패싯이름 설명 minExclusive 포함이 되지 않는 하한값 지정 minInclusive 포함이 되는 하한값 지정 maxExclusive 포함이 되지 않는 상한값 지정 maxInclusive 포함이 되는 상한값 지정 totalDigits 수를 이루는 숫자(digit)의 수 지정 fractionDigits 소수부를 이루는 숫자(digit)의 수 지정 length 문자열의 길이 또는 리스트 항목의 수 지정 minLength 문자열의 최소 길이 또는 리스트 항목의 최소수 지정 maxLength 문자열의 최대 길이 또는 리스트 항목의 최대수 지정 enumeration 이뉴머레이션 타입이 가질 수 있는 값 지정 pattern 문자 데이터의 포맷을 나타내는 정규식 지정
15
2. 컴플렉스 타입의 확장 및 제한 패싯 엘리먼트의 사용 문법 및 사용 예 문법 <패싯이름 value=”값”/>
스키마문서 <!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name="ctPrice2"> <!-- 심플 컨텐트를 갖는 컴플렉스 타입 --> <xsd:simpleContent> <!-- 심플 컨텐트를 갖는 컴플렉스 타입인 ctPrice를 제한 --> <xsd:restriction base="ctPrice"> <xsd:minInclusive value="1000"/> <xsd:maxInclusive value="100000"/> </xsd:restriction> </xsd:simpleContent> </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name="price" type="ctPrice2"/> XML문서 <price unit="원" card="true">100000</price>
16
2. 컴플렉스 타입의 확장 및 제한 2-4 자식 엘리먼트와 속성을 갖는 컴플렉스 타입의 확장
자식 엘리먼트와 속성을 가지고 있는 기존의 컴플렉스 타입에 자식 엘리먼트들과 속성들을 추가하여 새로운 컴플렉스 타입을 정의할 수 있다. 문법 <xsd:complexType name="컴플렉스 타입 이름"> <xsd:complexContent> <xsd:extension base="확장할 컴플렉스 타입 이름"> <xsd:sequence> 추가할 엘리먼트 선언들 </xsd:sequence> 추가할 속성 선언들 </xsd:extension> </xsd:complexContent> </xsd:complexType> 주의 사항 : base 속성값으로 심플 타입 컨텐트를 갖지 않는, 즉 자식 엘리먼트 및 속성만 가지고 있는 컴플렉스 타입 이름만 올 수 있다.
17
2. 컴플렉스 타입의 확장 및 제한 기존의 컴플렉스 타입에 속성 및 자식 엘리먼트를 추가 확장하는 새로운 컴플렉스 타입 정의 예. 스키마문서 <!-- 글로벌 컴플렉스 타입 정의 --> <xsd:complexType name="ctBook2"> <xsd:complexContent> <xsd:extension base="ctBook"> <xsd:sequence> <xsd:element name="publisher" type="xsd:string"/> <xsd:element name="price" type="xsd:int"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:ID"/> <xsd:attribute name="kind" type="xsd:string"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name="book" type="ctBook2" maxOccurs="unbounded"/> XML 문서 <book id="b1" kind="컴퓨터"> <title>XML And Java</title> <author>신민철</author> <publisher>프리렉</publisher> <price>25000</price> </book>
18
2. 컴플렉스 타입의 확장 및 제한 2-5 자식 엘리먼트와 속성을 갖는 컴플렉스 타입의 제한
자식 엘리먼트의 갯수를 줄인다거나, 속성값을 제한하여 사용할 경우. 문법 <xsd:complexType name="컴플렉스 타입 이름"> <xsd:complexContent> <xsd:extension base="제한할 컴플렉스 타입 이름"> <xsd:restriction> 제한할 컴플렉스 타입이 가지고 있는 엘리먼트 중에 실제 사용할 엘리먼트만 재 선언 </xsd:restriction> 제한할 컴플렉스 타입에서 속성값의 범위를 제한하는 속성만 선언 </xsd:extension> </xsd:complexContent> </xsd:complexType> 주의 사항(1) : base 속성값으로 심플 타입 컨텐트를 갖지 않는, 즉 자식 엘리먼트 및 속성만 가지고 있는 컴플렉스 타입 이름만 올 수 있다. 주의 사항(2) : 컴플렉스 타입을 제한하고자 할 경우, 제한하고자 하는 엘리먼트를 제외한 나머지 엘리먼트들을 모두 기술하여야 한다. 또한 새로운 엘리먼트가 아닌, 컴플렉스 타입이 가지고 있는 엘리먼트가 와야 한다. 속성값의 제한은 적은 범위로의 제한만 가능하다.
19
2. 컴플렉스 타입의 확장 및 제한 스키마문서 <!-- 글로벌 컴플렉스 타입 정의 -->
<xsd:complexType name="ctBook2"> <xsd:complexContent> <xsd:restriction base="ctBook"> <xsd:sequence> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="kind"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="컴퓨터"/> <xsd:enumeration value="소설"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexContent> </xsd:complexType> <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name="book" type="ctBook2“ maxOccurs="unbounded"/> XML문서 <xsd:element name="book" type="ctBook2" maxOccurs="unbounded"/>
20
2. 컴플렉스 타입의 확장 및 제한 2-6 컴플렉스 타입의 다형성(polymorphism)
다형성이란 동일 종류지만 여러 가지의 개별적인 형태를 가지고 있는 것을 말한다. XML Schema에서는 엘리먼트의 다형성도 지원하지만 컴플렉스 타입의 다형성도 지원한다. 엘리먼트 선언시 type 속성에 특정 종류의 컴플렉스 타입이 온다는 것만 지정해 두면, 실제 XML 문서 작성시, 해당 컴플렉스 타입의 형태는 물론이고, 해당 컴플렉스 타입을 확장한 다른 컴플렉스 타입의 형태도 올 수 있다는 것을 의미한다. 문법 <엘리먼트 이름 xsi:type="컴플렉스 타입 이름"> 스키마 문서 <!-- 글로벌 컴플렉스 타입 적용 --> <xsd:element name="book" type="ctBook" maxOccurs="unbounded"/> XML <book id="b1" xsi:type="ctBook2"> <title>사랑과 전쟁</title> <author>이사랑</author> <publisher>사랑문화사</publisher> </book> XML 문서에서 어떤 타입을 적용할지 결정한다. < 실습 > C6_1405.xsd C6_1405.xml
Similar presentations