l XML Schema l l XML Schema l

  • Slides: 79
Download presentation

내용 l 왜 XML Schema인가? l 이름 공간 l XML Schema 요소 선언 l

내용 l 왜 XML Schema인가? l 이름 공간 l XML Schema 요소 선언 l XML Schema 속성 선언 l XML Schema 적용 2

왜 XML Schema인가? (3) l 다음 XML 문서를 고려 § 각 요소의 데이터가 특정

왜 XML Schema인가? (3) l 다음 XML 문서를 고려 § 각 요소의 데이터가 특정 타입임 <? xml version="1. 0"? > <!DOCTYPE policies SYSTEM "policies. dtd"> <policies> <policy-number="14235465"> <policy-type>contents</policy-type> <start-date>12 -12 -2005</start-date> <annual-premium>127. 85</annual-premium> <number-of-claims>1</number-of-claims> <paid-up>true</paid-up> </policy> </policies> 5

왜 XML Schema인가? (4) l 다음은 XML 예제에 대한 DTD임 § DTD는 XML 문서인가?

왜 XML Schema인가? (4) l 다음은 XML 예제에 대한 DTD임 § DTD는 XML 문서인가? § 요소의 데이터 타입을 명세할 수 있는가? <? xml version="1. 0"? > <!DOCTYPE policies SYSTEM "policies. dtd"> <policies> <policy-number="14235465"> <policy-type>contents</policy-type> <start-date>12 -12 -2005</start-date> <annual-premium>127. 85</annual-premium> <number-of-claims>1</number-of-claims> <paid-up>true</paid-up> </policy> </policies> <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> 6

왜 XML Schema인가? (5) l 다음 문서는 유효한가? <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type,

왜 XML Schema인가? (5) l 다음 문서는 유효한가? <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> <? xml version="1. 0"? > <!DOCTYPE policies SYSTEM "policies. dtd"> <policies> <policy-number="abc"> <policy-type>contents</policy-type> <start-date>1. 2. 3</start-date> <annual-premium>none</annual-premium> <number-of-claims>true</number-of-claims> <paid-up>not</paid-up> </policy> </policies> 7

왜 XML Schema인가? (6) l XML Schema를 사용하면, 문서의 구조는 물론, 콘텐트 타입도 검사

왜 XML Schema인가? (6) l XML Schema를 사용하면, 문서의 구조는 물론, 콘텐트 타입도 검사 가능 <policy-number="abc"> <policy-type>contents</policy-type> <start-date>1. 2. 3</start-date> <annual-premium>none</annual-premium> <number-of-claims>true</number-of-claims> <paid-up>not</paid-up> integer? Strings? Date? Decimal? Integer? Boolean? 8

이름 공간 선언(1) l 디폴트(default) 이름공간 선언 § 이름공간이 요소에 선언되며, 그 하위 요소에도

이름 공간 선언(1) l 디폴트(default) 이름공간 선언 § 이름공간이 요소에 선언되며, 그 하위 요소에도 자동으로 적용 § 요소에 이름공간 접두사가 사용되지 않음 <element_name xmlns="URI_Reference"> <students xmlns="http: //www. koreaxml. ac. kr/2016/xml"> <student> <sid> 100 </sid> <name> 홍 현 </name> <age> 30 </age> </student> </students> 11

이름 공간 선언(2) l 접두사 사용 이름공간 선언 § 요소나 속성명에 URI 연관 <element_name

이름 공간 선언(2) l 접두사 사용 이름공간 선언 § 요소나 속성명에 URI 연관 <element_name xmlns: prefix_name = "URI_Reference"> <st: students xmlns: st="http: //www. koreaxml. ac. kr/2016/students"> <st: student> <st: sid> 100 </st: sid> <st: name> 홍 현 </st: name> <st: age> 30 </st: age> <st: address> 서울 면목동 </st: address> </st: student> </st: students> 12

예제: 이름공간(1) <st: students xmlns: st="http: //www. koreaxml. ac. kr/2016/students" xmlns: pf="http: //www. w

예제: 이름공간(1) <st: students xmlns: st="http: //www. koreaxml. ac. kr/2016/students" xmlns: pf="http: //www. w 3. org/1999/xhtml"> <st: student> <st: sid> 100 </st: sid> <st: name> 홍 현 </st: name> <st: age> 30 </st: age> <st: profile> <pf: html> <pf: head> <pf: title> 나의 소개 </pf: title> </pf: head> <pf: body> 활발한 사회활동 중 </pf: body> </pf: html> </st: profile> </st: student> </st: students> 13

예제: 이름공간(2) <students xmlns="http: //www. koreaxml. ac. kr/2016/students" xmlns: pf="http: //www. w 3. org/1999/xhtml">

예제: 이름공간(2) <students xmlns="http: //www. koreaxml. ac. kr/2016/students" xmlns: pf="http: //www. w 3. org/1999/xhtml"> <student> <sid> 100 </sid> <name> 홍 현 </name> <age> 30 </age> <profile> <pf: html> <pf: head> <pf: title> 나의 소개 </pf: title> </pf: head> <pf: body> 활발한 사회활동 중 </pf: body> </pf: html> <profile> <student> <students> 14

예제: 이름공간(3) <students xmlns: bk="http: //www. hanbit. co. kr/xml/"> <student id="100"> <name> 홍 현

예제: 이름공간(3) <students xmlns: bk="http: //www. hanbit. co. kr/xml/"> <student id="100"> <name> 홍 현 </name> <book bk: id="b 001"> <title> XML 활용백서 </title> <publishing> 한빛아카데미 </publishing> </book> </student> </students> 15

XML Schema 이름공간 l XML Schema 생성: 디폴트 이름공간 사용시 <schema xmlns="http: //www. w

XML Schema 이름공간 l XML Schema 생성: 디폴트 이름공간 사용시 <schema xmlns="http: //www. w 3. org/2001/XMLSchema"> … </schema> 17

스키마 예제 l 다음 문서에 대한 스키마를 설계하라 <? xml version="1. 0"? > <fullname>

스키마 예제 l 다음 문서에 대한 스키마를 설계하라 <? xml version="1. 0"? > <fullname> <firstname>Richard</firstname> <lastname>Lionheart</lastname> </fullname> <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema"> <xs: element name="fullname"> <xs: complex. Type> <xs: sequence> <xs: element name="firstname" type="xs: string"/> <xs: element name="lastname" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: element> </xs: schema> 18

Complex 타입 l complex 타입은 중첩 요소들을 포함하는 요소 <? xml version="1. 0"? >

Complex 타입 l complex 타입은 중첩 요소들을 포함하는 요소 <? xml version="1. 0"? > <fullname> <firstname>Richard</firstname> <lastname>Lionheart</lastname> </fullname> Complex 타입 19

Complex 타입 선언 l Complex 타입은 요소 내부에 중첩되어 선언 <xs: element name="fullname"> <xs:

Complex 타입 선언 l Complex 타입은 요소 내부에 중첩되어 선언 <xs: element name="fullname"> <xs: complex. Type> … </xs: complex. Type> </xs: element> <? xml version="1. 0"? > <fullname> <firstname>Richard</firstname> <lastname>Lionheart</lastname> </fullname> 20

순차 선언 l 요소들의 순차(sequence)는 <sequence> 태그를 이용하여 complex 타입 내부에 정의 § 순차는

순차 선언 l 요소들의 순차(sequence)는 <sequence> 태그를 이용하여 complex 타입 내부에 정의 § 순차는 임의 개수의 요소들을 포함할 수 있으며, 이들은 문서에 나타난 순서로 선언된다. <xs: complex. Type> <xs: sequence> <xs: element name="firstname" type="xs: string"/> <xs: element name="lastname" type="xs: string"/> </xs: sequence> </xs: complex. Type> <? xml version="1. 0"? > <fullname> <firstname>Richard</firstname> <lastname>Lionheart</lastname> </fullname> 21

요소 타입 l complex 타입이 아닌 요소는 단순 타입을 갖는다 § String § integer

요소 타입 l complex 타입이 아닌 요소는 단순 타입을 갖는다 § String § integer § boolean § decimal § time § date § Etc… 22

요소 타입 l complex 타입이 아닌 요소는 ‘type‘ 속성을 갖는다. <? xml version="1. 0"?

요소 타입 l complex 타입이 아닌 요소는 ‘type‘ 속성을 갖는다. <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema"> <xs: element name="fullname"> <xs: complex. Type> <xs: sequence> <xs: element name="firstname" type="xs: string"/> <xs: element name="lastname" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: element> </xs: schema> 23

스키마 예제(1) l 다음 DTD에 대한 XML Schema Definition을 정의하라. <!ELEMENT policies (policy*)> <!ELEMENT

스키마 예제(1) l 다음 DTD에 대한 XML Schema Definition을 정의하라. <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> § DTD에 포함된 각 요소에 적절한 타입을 정의하라. § 요소에 포함된 요소를 어떻게 정의하는가? § ‘*’로 표현된 요소의 다중성을 어떻게 정의하는가? § 속성을 어떻게 표현할 것인가? 24

스키마 예제(2) l policy 요소를 complex 타입으로 표현 <xs: element name="policy"> <xs: complex. Type>

스키마 예제(2) l policy 요소를 complex 타입으로 표현 <xs: element name="policy"> <xs: complex. Type> <xs: sequence> <xs: element name="policy-type" type="xs: string"/> <xs: element name="start-date" type="xs: date"/> <xs: element name="annual-premium" type="xs: decimal"/> <xs: element name="number-of-claims" type="xs: integer"/> <xs: element name="paid-up" type="xs: boolean"/> </xs: sequence> </xs: complex. Type> </xs: element> <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annualpremium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> 단순 타입의 자식 요소에 적절한 타입 설정 25

스키마 예제(3) l 속성을 어떻게 선언하는가? § 속성은 ‘attribute’ 요소를 사용하여 선언 § 중첩된

스키마 예제(3) l 속성을 어떻게 선언하는가? § 속성은 ‘attribute’ 요소를 사용하여 선언 § 중첩된 순차 요소 이후에 나타난다. <xs: element name="policy"> <xs: complex. Type> <xs: sequence> <xs: element name="policy-type" type="xs: string"/> <xs: element name="start-date" type="xs: date"/> <xs: element name="annual-premium" type="xs: decimal"/> <xs: element name="number-of-claims" type="xs: integer"/> <xs: element name="paid-up" type="xs: boolean"/> </xs: sequence> <xs: attribute name="policy-number" type="xs: integer"/> </xs: complex. Type> </xs: element> <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annualpremium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> 26

속성 선언 l 속성은 ‘use‘ 속성을 이용하여 선택 여부 명세 § use: optional, required,

속성 선언 l 속성은 ‘use‘ 속성을 이용하여 선택 여부 명세 § use: optional, required, prohibited • 디폴트는 ‘optional’ • ‘required’는 compulsory를 나타냄 <xs: attribute name="policy-number" type="xs: integer" use="required"/> l 속성의 디폴트 값 명세 가능 <xs: attribute name="approved" type="xs: boolean" default="true"/> § XML Schema에서, 요소에도 디폴트 값 명세 가능 <xs: element name="paid-up" type="xs: boolean" default="false"/> 27

스키마 예제(4) l 속성의 compulsory 표현. <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annualpremium,

스키마 예제(4) l 속성의 compulsory 표현. <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annualpremium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> <xs: element name="policy"> <xs: complex. Type> <xs: sequence> <xs: element name="policy-type" type="xs: string"/> <xs: element name="start-date" type="xs: date"/> <xs: element name="annual-premium" type="xs: decimal"/> <xs: element name="number-of-claims" type="xs: integer"/> <xs: element name="paid-up" type="xs: boolean"/> </xs: sequence> <xs: attribute name="policy-number" type="xs: integer” use =“required"/> </xs: complex. Type> </xs: element> 28

스키마 예제(5) l policies 요소의 타입은? <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annualpremium,

스키마 예제(5) l policies 요소의 타입은? <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annualpremium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> § policies 요소 내부에 policy가 여러 번 올 수 있다 • 자식 요소를 가지므로 complex 타입으로 설정 • Policy의 다중성을 어떻게 표현할 것인가? 29

스키마 예제(6) <xs: element name="policies"> l <xs: complex. Type> <!ELEMENT policies (policy*)> <!ELEMENT policy

스키마 예제(6) <xs: element name="policies"> l <xs: complex. Type> <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> <xs: sequence> <xs: element name="policy" min. Occurs = “ 1” max. Occurs="unbounded"> <xs: complex. Type> <xs: sequence> <xs: element name="policy-type" type="xs: string"/> <xs: element name="start-date" type="xs: date"/> <xs: element name="annual-premium" type="xs: decimal"/> <xs: element name="number-of-claims" type="xs: integer"/> <xs: element name="paid-up" type="xs: boolean"/> </xs: sequence> <xs: attribute name="policy-number" type=“xs: integer“ use=“required”/> </xs: complex. Type> </xs: element> </xs: sequence> </xs: complex. Type> </xs: element> 31

스키마 예제(7) l policy-type이 “contents”나 “building”이라고 가정하면? 32

스키마 예제(7) l policy-type이 “contents”나 “building”이라고 가정하면? 32

열거 타입 (1) l XML Schema에서, 속성과 요소에 대해서 열거 타입이 정의될 수 있다.

열거 타입 (1) l XML Schema에서, 속성과 요소에 대해서 열거 타입이 정의될 수 있다. § ‘simple. Type’ 요소 사용 § simple. Type 내부에 ‘restriction’ 요소 사용: 값이 열거된 값들에 제한됨 § restriction 요소 내부에 ‘enumeration’ 요소를 사용하여 가능한 값들을 명세 이름을 가진 타입 선언 <xs: simple. Type name="scale. Type"> <xs: restriction base="xs: string"> <xs: enumeration value="Centigrade"/> <xs: enumeration value="Fahrenheit"/> </xs: restriction> </xs: simple. Type> 33

열거 타입 (2) l 열거 타입을 이름을 갖게 선언하면, XML Schema의 어디에서 도 사용

열거 타입 (2) l 열거 타입을 이름을 갖게 선언하면, XML Schema의 어디에서 도 사용 가능 <xs: attribute name="scale" type="scale. Type" use="required"/> <xs: simple. Type name="scale. Type"> <xs: restriction base="xs: string"> <xs: enumeration value="Centigrade"/> <xs: enumeration value="Fahrenheit"/> </xs: restriction> </xs: simple. Type> 34

스키마 예제(8) l 열거 타입은 요소에 사용 가능 l policy-type이 “contents”나 “building”이라고 가정하면? §

스키마 예제(8) l 열거 타입은 요소에 사용 가능 l policy-type이 “contents”나 “building”이라고 가정하면? § policy. Type의 열거 타입 선언 <xs: simple. Type name=“policy. Type"> <xs: restriction base="xs: string"> <xs: enumeration value="Contents"/> <xs: enumeration value=“Buildings"/> </xs: restriction> </xs: simple. Type> <xs: element name=“policy-type" type="policy. Type" use=“required"/> 35

스키마 예제(9) <xs: element name="policies"> l <xs: complex. Type> <!ELEMENT policies (policy*)> <!ELEMENT policy

스키마 예제(9) <xs: element name="policies"> l <xs: complex. Type> <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> <xs: sequence> <xs: element name="policy" min. Occurs = “ 1” max. Occurs="unbounded"> <xs: complex. Type> <xs: sequence> <xs: element name="policy-type" type=“policy. Type”/> <xs: element name="start-date" type="xs: date"/> <xs: element name="annual-premium" type="xs: decimal"/> <xs: element name="number-of-claims" type="xs: integer"/> <xs: element name="paid-up" type="xs: boolean"/> </xs: sequence> <xs: attribute name="policy-number" type=“xs: integer“ use=“required”/> </xs: complex. Type> </xs: element> </xs: sequence> </xs: complex. Type> </xs: element> 36

값 상세 명세(1) l restriction 요소를 사용하여 요소나 속성의 값을 상세 명세할 수 있다.

값 상세 명세(1) l restriction 요소를 사용하여 요소나 속성의 값을 상세 명세할 수 있다. § 문자열의 길이 § 문자열 패턴 § 문자열 포함된 문자 제한 § 값 범위 <xs: simple. Type name="phone. Number"> § 공백 포함 여부 <xs: restriction base="xs: string"> <xs: pattern value="([0 -9s])*"/> <xs: min. Length value="7"/> <xs: max. Length value="20"/> <xs: white. Space value="preserve"/> </xs: restriction> </xs: simple. Type> 공백형 문자 37

값 상세 명세(2) l 값이 수치이면, 그 범위 명세 가능 <xs: simple. Type name="phone.

값 상세 명세(2) l 값이 수치이면, 그 범위 명세 가능 <xs: simple. Type name="phone. Number"> <xs: restriction base="xs: integer"> <xs: min. Inclusive value = “ 100000” /> <xs: max. Inclusive value = “ 999999”/> </xs: restriction> </xs: simple. Type> 38

스키마 예제(9) l 속성 policy-number가 100000 ~999999의 범위를 갖는다면? § policy. Number 타입을 명세하라.

스키마 예제(9) l 속성 policy-number가 100000 ~999999의 범위를 갖는다면? § policy. Number 타입을 명세하라. <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> 39

스키마 예제(10) <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number

스키마 예제(10) <!ELEMENT policies (policy*)> <!ELEMENT policy (policy-type, start-date, annual-premium, number-of-claims, paid-up)> <!ATTLIST policy-number CDATA #REQUIRED> <!ELEMENT policy-type (#PCDATA)> <!ELEMENT start-date (#PCDATA)> <!ELEMENT annual-premium (#PCDATA)> <!ELEMENT number-of-claims (#PCDATA)> <!ELEMENT paid-up (#PCDATA)> § policy-type은 “contents”나 “building”에 제한 § policy-number의 범위 제한 40

Target 이름공간 l XML Schema의 주요 목적은 어휘를 선언하는 것. § 이러한 어휘는 이름공간으로

Target 이름공간 l XML Schema의 주요 목적은 어휘를 선언하는 것. § 이러한 어휘는 이름공간으로 식별 § schema 요소의 ‘target. Namespace’ 속성으로 선언되는 어휘의 이름공 간을 명세 <schema xmlns=http: //www. w 3. org/2001/XMLSchema target. Namespce = “http: /www. example. com/name” xmlns: target = “http: /www. example. com/name”> … </schema> 정의되고 있는 스키마에 포함 된 임의 선언을 참조할 때 사용 <xs: schema xmlns: xs=http: //www. w 3. org/2001/XMLSchema target. Namespce = “http: /www. example. com/name” xmlns = “http: /www. example. com/name”> … </schema> 41

XML Schema 적용 l다음을 포함해야 함 § XML Schema 정의 사례를 생성하고 있음을 명세

XML Schema 적용 l다음을 포함해야 함 § XML Schema 정의 사례를 생성하고 있음을 명세 xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" § 문서 검증에 사용될 XML Schema 파일의 URI(target 이름공간)를 제공 xsi: schema. Location="http: //www. example. com/fullname. xsd" 이름공간 위치 § XML Schema가 target 이름공간을 포함하지 않을 경우 xsi: no. Namespace. Schema. Location= fullname. xsd" 42

XML Schema 적용 l 예제 <? xml version="1. 0"? > <fullname xmlns: xsi="http: //www.

XML Schema 적용 l 예제 <? xml version="1. 0"? > <fullname xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: no. Namespace. Schema. Location="fullname. xsd"> <firstname>Richard</firstname> <lastname>Lionheart</lastname> </fullname> 43

요소/속성 한정 l 문서에 포함된 요소와 속성은 한정되거나(qualified) 한정되지 않을 수 있다(unqualified) § 요소/속성이

요소/속성 한정 l 문서에 포함된 요소와 속성은 한정되거나(qualified) 한정되지 않을 수 있다(unqualified) § 요소/속성이 연관된 이름공간을 가지면 한정되어 있다 § 다음에서 요소들을 한정되어 있는가? <? xml version="1. 0"? > <fullname xmlns = “http: //www. example. com/fullname”> <firstname>Richard</firstname> <lastname>Lionheart</lastname> </fullname> <? xml version="1. 0"? > <n: fullname xmlns: n = http: //www. example. com/fullname> <n: firstname>Richard</n: firstname> <n: lastname>Lionheart</n: lastname> </n: fullname> 44

스키마 예제(11) l 다음 문서는 유효한가? <? xml version="1. 0"? > <policies xmlns: xsi="http:

스키마 예제(11) l 다음 문서는 유효한가? <? xml version="1. 0"? > <policies xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: no. Namespace. Schema. Location="policies. xsd"> <policy-number="1625344"> <policy-type>1</policy-type> <start-date>2007 -12 -12</start-date> <annual-premium>45. 6</annual-premium> <number-of-claims>5</number-of-claims> <paid-up>true</paid-up> </policy> </policies> 45

스키마 예제(11) l 다음 문서는 유효한가? <? xml version="1. 0"? > <policies xmlns: xsi="http:

스키마 예제(11) l 다음 문서는 유효한가? <? xml version="1. 0"? > <policies xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: no. Namespace. Schema. Location="policies. xsd"> <policy-number="abc"> <policy-type>contents</policy-type> <start-date>1. 2. 3</start-date> <annual-premium>none</annual-premium> <number-of-claims>true</number-of-claims> <paid-up>not</paid-up> </policy> </policies> 46

XML Schema 데이터 타입 47

XML Schema 데이터 타입 47

DTD => XML Schema DTD XML 스키마 <!ELEMENT> <element/> <!ATTLIST> <attribute/> , <sequence>. .

DTD => XML Schema DTD XML 스키마 <!ELEMENT> <element/> <!ATTLIST> <attribute/> , <sequence>. . . </sequence> | <choice>. . . <choice> + min. Occurs ="1" max. Occurs="unbounded" ? min. Occurs ="0" max. Occurs="1" * min. Occurs ="0" max. Occurs="unbounded" 48

스키마 예제 2 (1) l 다음 문서에 적절한 XML Schema definition을 정의하라. 50 <Shipping.

스키마 예제 2 (1) l 다음 문서에 적절한 XML Schema definition을 정의하라. 50 <Shipping. Address type=“EUAddress”> <Name> <First. Name>Gildong</First. Name> <Last. Name> Hong</Last. Name> </Name> <Address> <Street>123 Hallgarten </Street> <City>Berlin</City> <Postal. Code>12345</Postal. Code> <Country>DE</Country> </Addrress> </Shipping. Address> Define the Name. Type Define the Address. Type Define the Postal. Code. Type Define the Country. Type 50

스키마 예제 2 (2) l 단계 1 <? xml version= “ 1. 0” ?

스키마 예제 2 (2) l 단계 1 <? xml version= “ 1. 0” ? > <xsd: schema mxlns: xs=“http: //ww. w 3. org/2001/XMLSchema”> <Shipping. Address type=“EUAddress”> <Name> <First. Name>Gildong</First. Name> <Last. Name> Hong</Last. Name> </Name> <Address> <Street>123 Hallgarten </Street> <City>Berlin</City> <Postal. Code>12345</Postal. Code> <Country>DE</Country> </Addrress> </Shipping. Address> <xsd: element name = “Shipping Address”> <xsd: complex. Type> <xsd: sequence> Define the Name. Type <xsd: element name="Name" type="Name. Type"/> <xsd: element name="Address" type="Address. Type"/> Define the Address. Type </xsd: sequence> <xsd: attribute name="type" type="xsd: string"/> </xsd: complex. Type> </xsd: element> </xsd: schema> 51

스키마 예제 2 (3) <? xml version= “ 1. 0” ? > l 단계

스키마 예제 2 (3) <? xml version= “ 1. 0” ? > l 단계 2 <xsd: schema mxlns: xs=“http: //ww. w 3. org/2001/XMLSchema”> <xsd: element name = “Shipping Address”> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Name" type="Name. Type"/> <xsd: element name="Address" type="Address. Type"/> </xsd: sequence> <xsd: attribute name="type" type="xsd: string"/> </xsd: complex. Type> <xsd: complex. Type name="Name. Type"> <xsd: sequence> <xsd: element name="First. Name" type="xsd: string"/> <xsd: element name="Last. Name" type="xsd: string"/> </xsd: sequence> </xsd: complex. Type> <Shipping. Address type=“EUAddress”> <Name> <First. Name>Gildong</First. Name> <Last. Name> Hong</Last. Name> </Name> <Address> <Street>123 Hallgarten </Street> <City>Berlin</City> <Postal. Code>12345</Postal. Code> <Country>DE</Country> </Addrress> </Shipping. Address> Define the Name. Type </xsd: element> </xsd: schema> 52

스키마 예제 2 (4) <? xml version= “ 1. 0” ? > <xsd: schema

스키마 예제 2 (4) <? xml version= “ 1. 0” ? > <xsd: schema mxlns: xs=“http: //ww. w 3. org/2001/XMLSchema”> l 단계 3 <xsd: element name = “Shipping Address”> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Name" type="Name. Type"/> <xsd: element name="Address" type="Address. Type"/> </xsd: sequence> <xsd: attribute name="type" type="xsd: string"/> </xsd: complex. Type> <Shipping. Address type=“EUAddress”> <Name> <First. Name>Gildong</First. Name> <Last. Name> Hong</Last. Name> </Name> <Address> <Street>123 Hallgarten </Street> <City>Berlin</City> <Postal. Code>12345</Postal. Code> <Country>DE</Country> </Addrress> </Shipping. Address> <xsd: complex. Type name="Address. Type"> <xsd: sequence> <xsd: element name="Street" type="xsd: string"/> <xsd: element name="City" type="xsd: string"/> <xsd: element name="Postal. Code" type="Postal. Code. Type"/> <xsd: element name="Country" type="Country. Type"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> </xsd: schema> Define the Address. Type 가정: poscal. Code는 5자리 숫자 로 구성 가정: Country는 2개 알파벳으로 구성 53

스키마 예제 2 (5) l 단계 4: <xsd: simple. Type name="Postal. Code. Type"> <xsd:

스키마 예제 2 (5) l 단계 4: <xsd: simple. Type name="Postal. Code. Type"> <xsd: restriction base="xsd: integer"> <xsd: length value="5" /> </xsd: restriction> </xsd: simple. Type> Postal. Code. Type 정의 <xsd: simple. Type name="Country. Type"> <xsd: restriction base="xsd: string"> <xsd: length value="2"/> </xsd: restriction> </xsd: simple. Type> Country. Type 정의 <xsd: simple. Type name="Country. Type"> <xsd: restriction base="xsd: string"> <xsd: pattern value=“[A-Z]{2}"/> </xsd: restriction> </xsd: simple. Type> 2개의 대문자를 의미 54

스키마 예제 3 (5) <Shipping. Address type=“EUAddress”> <Name> <First. Name>Gildong</First. Name> <Last. Name> Hong</Last.

스키마 예제 3 (5) <Shipping. Address type=“EUAddress”> <Name> <First. Name>Gildong</First. Name> <Last. Name> Hong</Last. Name> </Name> <Address> <Street>123 Hallgarten </Street> <City>Berlin</City> <Postal. Code>12345</Postal. Code> <Country>DE</Country> </Addrress> <xsd: simple. Type name="Postal. Code. Type"> </Shipping. Address> <xsd: restriction base="xsd: integer"> <xsd: length value="5" /> </xsd: restriction> </xsd: simple. Type> <xsd: simple. Type name="Country. Type"> <xsd: restriction base="xsd: string"> <xsd: length value="2"/> </xsd: restriction> </xsd: simple. Type> </xsd: schema> <? xml version='1. 0'? > <xsd: schema xmlns: xsd="http: //www. w 3. org/2001/XMLSchema"> <xsd: element name="Shipping. Address"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Name" type="Name. Type"/> <xsd: element name="Address" type="Address. Type"/> </xsd: sequence> <xsd: attribute name="type" type="xsd: string"/> </xsd: complex. Type> </xsd: element> <xsd: complex. Type name="Name. Type"> <xsd: sequence> <xsd: element name="First. Name" type="xsd: string"/> <xsd: element name="Last. Name" type="xsd: string"/> </xsd: sequence> </xsd: complex. Type> <xsd: complex. Type name="Address. Type"> <xsd: sequence> <xsd: element name="Street" type="xsd: string"/> <xsd: element name="City" type="xsd: string"/> <xsd: element name="Postal. Code" type="Postal. Code. Type"/> <xsd: element name="Country" type="Country. Type"/> </xsd: sequence> </xsd: complex. Type> 55

pattern 요소 l pattern 요소가 사용될 때, 기반 타입을 제약하는 새로운 타입 정의 <xsd:

pattern 요소 l pattern 요소가 사용될 때, 기반 타입을 제약하는 새로운 타입 정의 <xsd: simple. Type name=“Five. Year. Type"> <xsd: restriction base="xsd: string"> <xsd: pattern value=“ 200[1 -5]{1}"/> </xsd: restriction> </xsd: simple. Type> <xsd: simple. Type name=“Canada. Postal. Code. Type"> <xsd: restriction base="xsd: string"> <xsd: pattern value=“[A-Z]{1}[0 -9]{1}[A-Z]{1}[0 -9]{1}"/> </xsd: restriction> </xsd: simple. Type> 공백 56

예제: 요소 선언 <? xml version="1. 0"? > <xsd: schema xmlns: xsd="http: //www. w

예제: 요소 선언 <? xml version="1. 0"? > <xsd: schema xmlns: xsd="http: //www. w 3. org/2001/XMLSchema"> <xsd: element name="Invoice"> <xsd: complex. Type> <xsd: sequence> <Address>는 <xsd: element name="Billing. Info"> <xsd: complex. Type> <xsd: sequence> <xsd: element ref="Address" min. Occurs="1" max. Occurs="1"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> <xsd: element name="Shipping. Info"> <xsd: complex. Type> <xsd: sequence> <xsd: element ref="Address" min. Occurs="1" max. Occurs="1"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> </xsd: schema> 전역적으로 선언 58

예제: 요소 선언 <Address>는 전역적으로 선언 <? xml version="1. 0"? > <xsd: schema xmlns:

예제: 요소 선언 <Address>는 전역적으로 선언 <? xml version="1. 0"? > <xsd: schema xmlns: xsd="http: //www. w 3. org/2001/XMLSchema"> <xsd: element name="Address"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Company" type="xsd: string"/> <xsd: element name="FAO" type="xsd: string"/> <xsd: element name="Street 1" type="xsd: string"/> <xsd: element name="Street 2" type="xsd: string"/> <xsd: element name="City" type="xsd: string"/> <xsd: element name="State" type="xsd: string"/> <xsd: element name="Postal. Code" type="xsd: decimal"/> <xsd: element name="Country" type="xsd: string"/> <xsd: element name="Date" type="xsd: date"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> <xsd: element name="Invoice"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Billing. Info"> <xsd: complex. Type> <xsd: sequence> <xsd: element ref="Address" min. Occurs="1" max. Occurs="1"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> <xsd: element name="Shipping. Info"> <xsd: complex. Type> <xsd: sequence> <xsd: element ref="Address" min. Occurs="1" max. Occurs="1"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> </xsd: sequence> </xsd: complex. Type></xsd: element></xsd: schema> 59

선택 선언 (1) l 학생 요소의 자식들중에서 한 개만 선택. xsd <xsd: element name

선택 선언 (1) l 학생 요소의 자식들중에서 한 개만 선택. xsd <xsd: element name = “학생”> <xsd: complextype> <xsd: choice> <xsd: element name = “학번” type = “xsd: string”/> <xsd: element name = “이름” type = “xsd: string”/> <xsd: element name = “나이” type = “xsd: string”/> <xsd: element name = “전화” type = “xsd: string”/> <xsd: element name = “주소” type = “xsd: string”/> </xsd: choice> <xsd: complextype> </xsd: element> . xml <학생> <이름> 홍길동 </이름> </학생> 61

선택 선언 (2) l choice는 구조 컴포넌트 포함 가능 § Name. Or. Email 콘텐츠

선택 선언 (2) l choice는 구조 컴포넌트 포함 가능 § Name. Or. Email 콘텐츠 모델은 <email>이나 이름(<first>, <middle>, <last>)을 포함 <complex. Type name=“Name. Or. Email”> <choice> <element name = “email” type = “string”/> <sequence> <element name = “first” type = “string”/> <element name = “middle” type = “string”/> <element name = “last” type = “string”/> </sequence> </choice> </complex. Type> 62

선택 선언 (3) l 다음 XML Schema에 적절한 XML 문서를 작성하라. <element name =

선택 선언 (3) l 다음 XML Schema에 적절한 XML 문서를 작성하라. <element name = “student”> <complex. Type> <sequence> <choice> <element name = “id” type = “string”/> <element name = “name” type = “string”/> </choice> <element name = “age” type = “string”/> <element name = “phone” type = “string”/> <element name = “address” type = “string”/> </choice> </sequence> </complex. Type> </element> 63

All 선언 l all 선언에 포함된 자식 순서는 중요하지 않음 § 자식으로 단지 <element>만을

All 선언 l all 선언에 포함된 자식 순서는 중요하지 않음 § 자식으로 단지 <element>만을 포함 가능 § <sequence>, <choice>, <group>를 허용하지 않음. xsd <element name=“name”> <complex. Type> <all> <element name=“first” type=“string”/> <element name=“middle” type=“string”/> <element name=“last” type=“string”/> </all> <attribute name = “title” type = “string”/> </complex. Type> </element> . xml <name> <first>John</first> <middle>Fitzgerald</middle> <last>Doe</last> </name> <first>John</first> <last>Doe</last> <middle>Fitzgerald</middle> </name 64

예제: 그룹 선언. xsd <element name=“student”> <complex. Type> <group ref = “name”/> </complex. Type>

예제: 그룹 선언. xsd <element name=“student”> <complex. Type> <group ref = “name”/> </complex. Type> </element> . xml <student> <first>John</first> <middle>Fitzgerald</middle> <last>Doe</last> </student> <group name = “name”> <sequence> <element name = “first” type=“string”/> <element name = “middle” type=“string”/> <element name = “last” type=“string”/> </sequence> </group> 66

예제: 그룹 선언 l 다음. xsd에 적합한 XML 문 서를 작성하라. <element name=“student”> <complex.

예제: 그룹 선언 l 다음. xsd에 적합한 XML 문 서를 작성하라. <element name=“student”> <complex. Type> <sequence> <group ref=“name”/> <group ref=“address”/> </sequence> </complex. Type> </element> <group name = “name”> <choice> <element name = “korean. Name” type=“string”/> <element name = “english. Name” type=“string”/> </choice> </group> <group name = “address”> <choice> <element name = “korean. Addr” type=“string”/> <element name = “english. Addr” type=“string”/> </choice> </group> 67

예제: XML Schema 작성 (4) l 단계 3 <xs: element name="과목"> <xs: complex. Type>

예제: XML Schema 작성 (4) l 단계 3 <xs: element name="과목"> <xs: complex. Type> <xs: sequence> <xs: element name="과목명" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name="일반정보"> <xs: complex. Type> <xs: sequence> <xs: element name="이름" type="xs: string"/> <xs: element name="나이" type="xs: string"/> <xs: element name="주소" type="xs: string"/> <xs: element name="전화번호" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name="학력"> <xs: complex. Type> <xs: sequence> <xs: element name="초등학교" type="xs: string"/> <xs: element name="중학교" type="xs: string"/> <xs: element name="고등학교" type="xs: string"/> <xs: element name="대학교" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: element> <? xml version=“ 1. 0” encoding=“utf-8”? > <학생 xmlns: xsi=http: //www. w 3. org/2001/XMLSchema-instance xsi: no. Namespace. Schema. Location=“ 학생정보. xsd”> <수강> <과목명> XML 프로그래밍 </과목명> </과목> </수강> <정보> <일반정보> <이름> 박지혜 </이름> <나이> 20 </나이> <주소> 천안시 두정동 </주소> <전화번호> 041 -537 -3987 </전화번호> </일반정보> </정보> <교육> <학력> <초등학교> 하나 초등학교 졸업 </초등학교> <중학교> 두리 중학교 졸업 </중학교> <고등학교> 세별 고등학교 졸업 </고등학교> <대학교> 한국 대학교 재학 </대학교> </학력> </교육> </학생> 71

예제 2: XML Schema 작성 (2) l 단계 1: 루트 요소 작성 § ‘명함목록’은

예제 2: XML Schema 작성 (2) l 단계 1: 루트 요소 작성 § ‘명함목록’은 여러 개의 ‘명함정보’ 포함 § ‘명함정보’ 요소의 타입, Business. Card. Type 정의 <? xml version="1. 0" encoding="utf-8"? > <xsd: schema xmlns: xsd="http: //www. w 3. org/2001/XMLSchema" element. Form. Default="qualified"> <xsd: element name="명함목록"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="명함" type="Business. Card. Type" min. Occurs="0" max. Occurs="unbounded"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> </schema> 73

예제 2: XML Schema 작성 (3) l 단계 2: Buiness. Card. Type 정의 §

예제 2: XML Schema 작성 (3) l 단계 2: Buiness. Card. Type 정의 § ‘회사정보’ 요소 타입, Company. Info. Type 정의 § ‘개인정보’ 요소타입, Person. Info. Tyupe 정의 <xsd: complex. Type name="Business. Card. Type"> <xsd: sequence> <xsd: element name="회사정보" type="Company. Info. Type" min. Occurs="0"/> <xsd: element name="개인정보" type="Person. Info. Type"/> </xsd: sequence> <xsd: attribute name="id" type="xsd: ID" use="required"/> </xsd: complex. Type> 74

예제 2: XML Schema 작성 (4) l 단계 3: Company. Info. Type 정의 §

예제 2: XML Schema 작성 (4) l 단계 3: Company. Info. Type 정의 § § 우편번호는 전화번호는 지역번호는 홈페이지는 ‘ddd-ddd’의 형식 ‘ddd-dddd’ 또는 ‘dddd-dddd’의 형식 ‘dd’ 또는 ‘ddd’의 형식 ‘http: //로 시작하는 도메인명 <xsd: complex. Type name="Company. Info. Type"> <xsd: sequence> <xsd: element ref="회사이름"/> <xsd: element name="주소" type="Com. Add. Type" min. Occurs="0"/> <xsd: element name="전화번호" type="Com. Tel. Type" min. Occurs="0" max. Occurs="unbounded"/> <xsd: element name="팩스번호" type="Com. Fax. Type" min. Occurs="0" max. Occurs="unbounded"/> <xsd: element ref="홈페이지" min. Occurs="0"/> </xsd: sequence> </xsd: complex. Type> 75

예제 2: XML Schema 작성 (5) l 단계 4: Com. Add. Type 정의 §

예제 2: XML Schema 작성 (5) l 단계 4: Com. Add. Type 정의 § 주소는 우편번호 속성을 가지도록 확장(<simple. Content>, <extension> 요소 이용) § 우편번호는 ‘ddd-ddd’의 형식 <xsd: complex. Type name="Com. Add. Type"> <xsd: simple. Content> <xsd: extension base="xsd: string"> <xsd: attribute name="우편번호" type="Zip. Code. Type"/> </xsd: extension> </xsd: simple. Content> </xsd: complex. Type> <xsd: simple. Type name="Zip. Code. Type"> <xsd: restriction base="xsd: string"> <xsd: length value="7"/> <xsd: pattern value="d{3}-d{3}"/> </xsd: restriction> </xsd: simple. Type> 76

예제 2: XML Schema 작성 (6) l단계 5: Com. Tel. Type 정의 § 전화번호가

예제 2: XML Schema 작성 (6) l단계 5: Com. Tel. Type 정의 § 전화번호가 지역번호 속성을 가지도록 확장 § 전화번호는 ‘ddd-dddd’ 또는 ‘dddd-dddd’의 형식 <xsd: complex. Type name="Com. Tel. Type"> <xsd: simple. Content> <xsd: extension base="Phone. Number. Type"> <xsd: attribute name="지역번호" type="xsd: string" default="02"/> </xsd: extension> </xsd: simple. Content> </xsd: complex. Type> <xsd: simple. Type name="Phone. Number. Type"> <xsd: restriction base="xsd: string"> <xsd: pattern value="d{3}-d{4}"/> <xsd: pattern value="d{4}-d{4}"/> </xsd: restriction> </xsd: simple. Type> 77

예제 2: XML Schema 작성 (7) l 단계 6: 홈페이지 요소 선언 § Home.

예제 2: XML Schema 작성 (7) l 단계 6: 홈페이지 요소 선언 § Home. Page 타입 정의 § 홈페이지는 ‘http: //로 시작하는 도메인명 <xsd: element name="홈페이지" type="Homepage. Type"/> <xsd: simple. Type name="Homepage. Type"> <xsd: restriction base="xsd: string"> <xsd: pattern value="(http: //)+((([A-Za-z 0 -9])|([A-Za-z 0 -9][A-Za-z 0 -9]*[A-Za-z 0 -9])). )+(com|edu|gov|mil|net|org|co. kr|or. kr|pe. kr)"/> </xsd: restriction> </xsd: simple. Type> 78

예제 2: XML Schema 작성 (8) l 단계 7: 개인정보 요소 타입 정의 §

예제 2: XML Schema 작성 (8) l 단계 7: 개인정보 요소 타입 정의 § 각 자식 요소 타입을 적절하게 정의 <xsd: complex. Type name="Person. Info. Type"> <xsd: sequence> <xsd: element ref="이름"/> <xsd: element name="직책" type="Duty. Type" min. Occurs="0"/> <xsd: element name="핸드폰" type="Handphone. Type" max. Occurs="unbounded"/> <xsd: element ref="이메일" max. Occurs="unbounded"/> <xsd: element name="메신저" type="Messenger. Type" min. Occurs="0" max. Occurs="unbounded"/> </xsd: sequence> </xsd: complex. Type> 79