Transcript
Page 1: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

66 장장 ㅎㅎ

• XML 스키마 개요• XML 스키마 사용법• [ 실습 ] XML 스키마 활용

XML 스키마XML 스키마

Page 2: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

2

학습목표 DTD 와 XML 스키마를 비교 XML 스키마의 기본 개념과 문법 이해 기본 타입과 사용자 타입 정의 방법 실습 XML 스키마를 활용하여 유효한 XML 문서 작성법 학습

6 장 . XML 스키마

Page 3: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

3

XML 스키마문서 구조를 정의하는 방법DTD 문제점을 보완하기 위해 W3C 에서 개발

DTD 문제점XML 문법이 아닌 EBNF 문법 형식을 따른다 .

작성 방법을 별도로 익혀야 하는 번거로움이 있다 .

DTD 는 재사용성과 확장성이 떨어진다 .

DTD 는 제한적인 데이터 타입만을 지원한다 .

문서 내용을 좀더 정확하게 표현하는 것이 어렵다 .

Section 01 XML 스키마 개요

Page 4: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

4

XML 스키마 목표문서 클래스에 대해 더욱 강력한 또는 느슨한 제한 허용

여러 개의 네임스페이스에 속한 마크업으로 구성된 문서도 유효성 검증 가능

요소 , 속성 및 데이터 타입 정의를 상속할 수 있는 방법을 제공

SQL 과 자바와 같은 언어에서 볼 수 있는 byte, date, integer 와 같은 기본 데이터 타입 지원

XML 을 관계형 , 객체 , OLAP 데이터베이스로 가져오거나 내보내는 것을 지원하는 형식 체계에 대한 정의할 수 있도록 지원

기존의 데이터 타입에 범위와 길이와 같은 특정 속성을 제한하여 유도한 사용자 정의 데이터 타입 (UDT: User Define dataType) 을 정의할 수 있도록 지원

Section 01 XML 스키마 개요

Page 5: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

5

XML 스키마 장점XML 스키마는 XML 문법과 동일 . 따로 익힐 필요가 없음다양한 기본 데이터 타입과 사용자 정의 데이터 타입 지원높은 확장성과 재사용성XML 네임스페이스 지원DTD 보다 더 복잡하게 섞인 내용 모델을 제한할 수 있음

Section 01 XML 스키마 개요

Page 6: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

6

DTD 와 XML 스키마 예제 비교

Section 01 XML 스키마 개요

<students> <student> <sno> s100</sno> <name> 고소영 </name> <age> 26 </age> <phone>02-123-8989</phone> <address> 서울 한남동 </address> </student></students>

student.xml<!ELEMENT students (student)*> <!ELEMENT student (sno,name,age,phone, address) > <!ELEMENT sno (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT address (#PCDATA)>

student.dtd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="student"> <xsd:complexType> <xsd:sequence> <xsd:element name="sno" type="xsd:string"/> <xsd:element name="name" type="xsd:string"/> <xsd:element name="age" type="xsd:string"/> <xsd:element name="phone" type="xsd:string"/> <xsd:element name="address" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>

student.xsd

Page 7: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

7

DTD 를 XML 스키마로 변환

Section 01 XML 스키마 개요

DTD XML 스키마

<!ELEMENT> <element/>

<!ATTLIST> <attribute/>

, <sequence> ...</sequence>

| <choice> ... <choice>

+ minOccurs ="1" maxOccurs="unbounded"

? minOccurs ="0" maxOccurs="1"

* minOccurs ="0" maxOccurs="unbounded"

Page 8: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

8

Section 01 XML 스키마 개요

XML 문서에 XML 스키마를 적용 예제XML 스키마를 선언할 때도 XML 문서에 스키마 파일 지정네임스페이스를 사용하지 않는 스키마 파일은 “noNamespaceSchemaLocation” 속성을 이용해서 표현사용 예

작성된 XML 스키마를 XML 문서에 적용하여 유효성을 검증 = 유효성 검증 파서 프로그램 이용

<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="student.xsd">

Page 9: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

9

XML 스키마 데이터 타입

Section 02 XML 스키마 사용법

Page 10: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

10

미리 정의된 데이터 타입 - 기본 데이터 타입19 개의 내장 원시 데이터 타입문자열 , 부호화된 이진 , 숫자 , 날짜 / 시간 데이터 타입문자열 데이터 타입

부호화된 이진 데이터 타입

Section 02 XML 스키마 사용법

string 유효한 문자열

anyURI 표준 인터넷 URI 의 데이터 타입

NOTATION 외부의 비 XML 컨텐츠에 대한 링크를 선언

QName "Namespace in XML" 에 정의된 것에 적합한 QName 문자열

boolean true 나 false 상태를 가지는 상태 (flag) 값을 가짐

hexBinary 일련의 16 진수 숫자쌍으로 부호화된 이진 데이터 타입

base64Binary base64 로 부호화된 이진 데이터 타입

Page 11: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

11

Section 02 XML 스키마 사용법

미리 정의된 데이터 타입 - 기본 데이터 타입숫자 데이터타입

날짜 / 시간 데이터 타입duration 기간 표현

dateTime 날자와 시간 표현 , 날자는 그레고리력 사용

date 날자 표현 , yyyy-mm-dd 형태 표현

time 시간 표현

gYearMonth 그레고리력의 년과 월 표현 , yyyy-mm 형태로 표현

gYear 그레고리력의 년 표현

gMonthDay 그레고리력의 월과 일 표현

gMonth 그레고리력의 월 표현

gDay 그레고리력의 일 표현

decimal 십진수

float 4 바이트 실수

double 8 바이트 실수

Page 12: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

12

미리 정의된 데이터 타입 - 파생 데이터 타입25 개가 있음 . string 파생 + decimal 파생 데이터 타입String 파생한 데이터 타입

Section 02 XML 스키마 사용법

token

normalizedString 각각의 공백 문자들이 하나의 스페이스 문자로 대치되어 있는 문자열

모든 공백문자가 단 하나의 스페이스들로 변환되어 있는 문자열 , 앞뒤에 오는 스페이스가 모두 제거되며 연속되는 스페이스 단 하나의 스페이스 문자로 대치 .

Name 모든 적합한 XML1.0 이름

NCName “Namespace in XML" 에 정의되어 있는 지역화되지 않은 적합한 XML 1.0 이름 . 즉 , ”:“ 이 없는 XML1.0 이름을 말한다 .

language 자연 언어 식별 문자열

ID 연관된 요소를 식별하는 고유값

IDREF ID 속성 값을 통한 다른 요소에 대한 참조 .

IDREFS IDREF 값으로 구성된 목록

NMTOKEN 적합한 XML 이름 문자들로 구성되어 있는 문자열 , 하지만 XML 이름의 첫문자 제한은 적용되지 않는다 .

NMTOKENS NMTOKEN 값들로 구성된 목록

ENTITY 적합한 NCName 이 되는 문자열 . DTD 에 선언된 파싱되지 않는 개체

ENTITIES ENTITY 값들로 구성된 목록

Page 13: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

13

Section 02 XML 스키마 사용법

미리 정의된 데이터 타입 - 파생 데이터 타입decimal 에서 파생한 데이터 타입

integer 소수점이 허용되지 않는 정수

negativeInteger 음의 정수

positiveInteger 양의 정수

nonNagativeInteger 0 과 양의 정수

nonPositiveInteger 0 과 음의 정수

byte 1 바이트 정수

short 2 바이트 정수

int 4 바이트 정수

long 8 바이트 정수

unsignedByte 부호 없는 1 바이트 정수

unsignedShort 부호 없는 2 바이트 정수

unsignedInt 부호 없는 4 바이트 정수

unsignedLong 부호 없는 8 바이트 정수

Page 14: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

14

Section 02 XML 스키마 사용법

XML 스키마 선언XML 스키마의 네임스페이스 속성을 설정하고 사용하기 위해서 선언형식

XML 스키마 선언은 <xsd:schema> 요소로 시작최상위 요소는 항상 schema

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">① targetNamespace="http://www.dankook.ac.kr"② xmlns="http://www.mysite.com"③ elementFormDefault="qualified"④ attributeFormDefault="qualified">⑤......</xsd:schema>

Page 15: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

15

XML 스키마 선언 속성

Section 02 XML 스키마 사용법

속성 설명

①xmlns:xsd XML 스키마의 네임스페이스 지정

②targetNamespace 현재 스키마에서 선언된 요소의 네임스페이스 지정

③xmlns 기본 네임스페이스를 지정

④elementFormDefault

스키마를 사용하는 XML 문서에 대한 지시문속성값이 qualified 면 XML 문서에서 사용하는 모든 요소는 targetNamespace 에서 선언된 네임스페이스를 사용해야 하지만 , unqualified 일 경우는 targetNamespace 에서 선언된 네임스페이스를 사용하지 않아도 된다 .

⑤attributeFormDefault속성에 대한 지시문개념은 elementFormDefault 속성과 동일

Page 16: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

16

기본 네임스페이스로 XML 스키마 선언XML 스키마와 관련된 요소에는 ” xsd" 라는 접두사를 사용하지 않아도 된다 .

Section 02 XML 스키마 사용법

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.dankook.ac.kr" xmlns:std="http://www.mysite.com" elementFormDefault="qualified" attributeFormDefault="qualified">......</schema>

Page 17: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

17

요소 선언과 요소 타입 정의요소 정의

Section 02 XML 스키마 사용법

<element abstract = boolean : false block = (#all | List of (extension | restriction | substitution)) default = string final = (#all | List of (extension | restriction)) fixed = string form = (qualified | unqualified) id = ID maxOccurs = (nonNegativeInteger | unbounded) : 1 minOccurs = nonNegativeInteger : 1 name = NCName nillable = boolean : false ref = QName substitutionGroup = QName type = QName {any attributes with non-schema namespace . . .}> Content: (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*))</element>

Page 18: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

18

XML 스키마 요소 정의 요약

Section 02 XML 스키마 사용법

<xsd:element [ 이름 ] [ 참조 ] [ 타입 ] [ 최소반복횟수 ] [ 최대반복횟수 ]>

속성 설명

이름name

선언하려는 요소 이름을 정의

참조reference

참조할 다른 요소 이름을 정의

타입type

요소 타입을 정의 ( 기본 데이터 타입 또는 사용자 정의 데이터 타입을 정의 )

최소반복횟수minOccurs

요소가 나타날 수 있는 최소 횟수를 정수로 정의생략하면 기본값이 1 로 지정

최대반복횟수maxOccurs

요소가 나타날 수 있는 최대 횟수를 정수로 정의생략하면 기본값이 1 로 지정

[ 표 6-9] 요소 선언 속성

Page 19: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

19

단순 데이터 타입<simpleType> 요소 사용해서 정의XML 스키마에서 정의한 다른 단순 데이터 타입을 이용해서 정의 가능내부에 다른 요소나 속성을 포함할 수는 없다 .

restriction, list, union 이용해서 확장 가능simpleType 요소 정의 형식

Section 02 XML 스키마 사용법

<simpleType final = (#all | (list | union | restriction)) id = ID name = NCName {any attributes with non-schema namespace . . .}> Content: (annotation?, (restriction | list | union))</simpleType>

Page 20: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

20

Section 02 XML 스키마 사용법

제한 요소 정의와 사용새로운 단순 데이터 타입은 기존의 단순 데이터 타입이 가질 수 있는 값의 범위를 제한해서 정의할 수 있다 .

restriction 요소 정의 형식

<restriction base = QName id = ID {any attributes with non-schema namespace . . .}> Content: (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern)*))</restriction>

Page 21: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

21

목록 요소 정의와 사용단일 타입 값들의 연속으로 이루어진 것을 의미개발자는 원하는 경우에 목록 요소를 이용해서 새로운 목록 타입을 정의할 수 있다 .

목록 요소의 “ itemType" 속성은 목록에서 사용할 수 있는 데이터 타입을 기술한다 .

XML 스키마에서 목록 요소 정의 형식

Section 02 XML 스키마 사용법

<list id = ID itemType = QName {any attributes with non-schema namespace . . .}> Content: (annotation?, (simpleType?))</list>

Page 22: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

22

Section 02 XML 스키마 사용법

결합 요소 정의와 사용주어진 여러 개의 단일타입이나 목록 타입 중에서 선택적으로 지정하여 결합해서 사용할 수 있는 방법<union> 요소를 이용해서 표현할 수 있으며 , 사용할 수 있는 데이터 타입들은 "memberType" 속성을 이용해서 표현할 수 있다 .

결합 타입을 정의하는 형식<union id = ID memberTypes = List of QName {any attributes with non-schema namespace . . .}> Content: (annotation?, (simpleType*))</union>

Page 23: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

23

복합 데이터 타입요소를 정의하고 사용기 위해서 기본적으로 복합 데이터 타입(complexType) 을 정의해서 사용자식 요소나 속성을 필요로 하는 요소를 정의하기 위해서는 복합 데이터 타입으로 정의한다 .

형식

Section 02 XML 스키마 사용법

<complexType abstract = boolean : false block = (#all | List of (extension | restriction)) final = (#all | List of (extension | restriction)) id = ID mixed = boolean : false name = NCName {any attributes with non-schema namespace . . .}> Content: (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))</complexType>

Page 24: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

24

순차 요소 정의와 사용DTD 의 컴마 (,) 연산자에 해당 자식 요소들이 순서대로 나타나야 하는 경우 사용

• <sequence> 요소 : 발생 횟수 표현 ,

"maxOccurs" 와 "minOccurs" 속성을 가지고 있다 .

만일 , 이 속성들을 정해주지 않을 경우에는 기본값 1 로 사용

형식

Section 02 XML 스키마 사용법

<sequence id = ID maxOccurs = (nonNegativeInteger | unbounded) : 1 minOccurs = nonNegativeInteger : 1 {any attributes with non-schema namespace . . .}> Content: (annotation?, (element | group | choice | sequence | any)*)</sequence>

Page 25: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

25

선택 요소 정의와 사용choice 은 여러 개의 자식 요소중에서 선택적으로 요소를 정의하는 것자식 요소의 발생 횟수를 지정하기 위해서 "maxOccurs" 와 "minOccurs" 속성을 가지고 있다 .

형식

Section 02 XML 스키마 사용법

<choice id = ID maxOccurs = (nonNegativeInteger | unbounded) : 1 minOccurs = nonNegativeInteger : 1 {any attributes with non-schema namespace . . .}> Content: (annotation?, (element | group | choice | sequence | any)*)</choice>

Page 26: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

26

Section 02 XML 스키마 사용법

그룹 요소 정의와 사용여러 요소를 하나로 묶어 사용하기 위해 사용형식

그룹 정의는 <group> 요소 내부에 정의스키마 요소의 직계 자식인 전역으로 정의되어야 함<group> 요소에는 이름을 줄 수 있기 때문에 스키마의 어느 곳에서나 참조할 수 있고 , 따라서 재사용 가능한 컨텐츠를 만드는데 그룹이 매우 유용하게 사용될 수 있다 .

속성인 all, choice, sequence 요소들은 <group> 요소 내부에 중첩된다 .

<groupname = NCName>Content: (annotation?, (all | choice | sequence))</group>

Page 27: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

27

전체 요소 정의와 사용all 요소는 DTD 에서는 정의할 수 없었던 형식 제공<all> 요소는 자식 요소들이 순서에 관계 없이 나타날 수 있는 것을 표현하기 위해서 사용된다 .

형식

Section 02 XML 스키마 사용법

<all id = ID maxOccurs = 1 : 1 minOccurs = (0 | 1) : 1{any attributes with non-schema namespace . . .}> Content: (annotation?, element*)</all>

Page 28: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

28

속성 선언속성은 어떤 자식 정보 항목도 포함할 수 없다 . 즉 , 복합 데이터 타입으로 정의할 수 없다 .

속성은 순서가 없다 .

형식

Section 02 XML 스키마 사용법

<attribute   default = string   fixed = string   form = (qualified | unqualified)   id = ID   name = NCName   ref = QName   type = QName use = (optional | prohibited | required) : optional {any attributes with non-schema namespace . . .}> Content: (annotation?, (simpleType?)) </attribute>

Page 29: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

29

속성 그룹 정의속성 선언들을 그룹으로 묶어서 이름을 지정해 주는 것 여러 요소가 동일한 속성 집합을 지니고 있을 때 유용형식

속성 그룹은 반드시 <attributeGroup> 요소를 사용하여 전역으로 정의해야 함

Section 02 XML 스키마 사용법

<attributeGroup id = ID name = NCName ref = QName {any attributes with non-schema namespace . . .}> Content: (annotation?, ((attribute | attributeGroup)*, anyAttribute?))</attributeGroup>

Page 30: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

30

XML 스키마 주석<annotation> 요소의 자식 요소인 <documentation> 요소와 <appinfo> 요소를 이용해서 정의<documentation> 요소

• 자신뿐만 아니라 다른 사람이 문서의도와 목적을 이해하는데 도움이 되는 정보를 수록

<appinfo> 요소• 처리 애플리케이션에 대한 추가적인 정보 제공

Section 02 XML 스키마 사용법

Page 31: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

31

XML 스키마 주석 형식

Section 02 XML 스키마 사용법

<annotation id = ID{any attributes with non-schema namespace . . .}> Content: (appinfo | documentation)*</annotation>

<appinfo source = anyURI> Content: ({any})*</appinfo>

<documentation source = anyURI xml:lang = language> Content: ({any})*</documentation>

Page 32: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

32

교재 277 페이지 참조

Section 03 [ 실습 ] XML 스키마 활용

Page 33: XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용

Thank you


Top Related