Download - XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용
66 장장 ㅎㅎ
• XML 스키마 개요• XML 스키마 사용법• [ 실습 ] XML 스키마 활용
XML 스키마XML 스키마
2
학습목표 DTD 와 XML 스키마를 비교 XML 스키마의 기본 개념과 문법 이해 기본 타입과 사용자 타입 정의 방법 실습 XML 스키마를 활용하여 유효한 XML 문서 작성법 학습
6 장 . XML 스키마
3
XML 스키마문서 구조를 정의하는 방법DTD 문제점을 보완하기 위해 W3C 에서 개발
DTD 문제점XML 문법이 아닌 EBNF 문법 형식을 따른다 .
작성 방법을 별도로 익혀야 하는 번거로움이 있다 .
DTD 는 재사용성과 확장성이 떨어진다 .
DTD 는 제한적인 데이터 타입만을 지원한다 .
문서 내용을 좀더 정확하게 표현하는 것이 어렵다 .
Section 01 XML 스키마 개요
4
XML 스키마 목표문서 클래스에 대해 더욱 강력한 또는 느슨한 제한 허용
여러 개의 네임스페이스에 속한 마크업으로 구성된 문서도 유효성 검증 가능
요소 , 속성 및 데이터 타입 정의를 상속할 수 있는 방법을 제공
SQL 과 자바와 같은 언어에서 볼 수 있는 byte, date, integer 와 같은 기본 데이터 타입 지원
XML 을 관계형 , 객체 , OLAP 데이터베이스로 가져오거나 내보내는 것을 지원하는 형식 체계에 대한 정의할 수 있도록 지원
기존의 데이터 타입에 범위와 길이와 같은 특정 속성을 제한하여 유도한 사용자 정의 데이터 타입 (UDT: User Define dataType) 을 정의할 수 있도록 지원
Section 01 XML 스키마 개요
5
XML 스키마 장점XML 스키마는 XML 문법과 동일 . 따로 익힐 필요가 없음다양한 기본 데이터 타입과 사용자 정의 데이터 타입 지원높은 확장성과 재사용성XML 네임스페이스 지원DTD 보다 더 복잡하게 섞인 내용 모델을 제한할 수 있음
Section 01 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
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"
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">
9
XML 스키마 데이터 타입
Section 02 XML 스키마 사용법
10
미리 정의된 데이터 타입 - 기본 데이터 타입19 개의 내장 원시 데이터 타입문자열 , 부호화된 이진 , 숫자 , 날짜 / 시간 데이터 타입문자열 데이터 타입
부호화된 이진 데이터 타입
Section 02 XML 스키마 사용법
string 유효한 문자열
anyURI 표준 인터넷 URI 의 데이터 타입
NOTATION 외부의 비 XML 컨텐츠에 대한 링크를 선언
QName "Namespace in XML" 에 정의된 것에 적합한 QName 문자열
boolean true 나 false 상태를 가지는 상태 (flag) 값을 가짐
hexBinary 일련의 16 진수 숫자쌍으로 부호화된 이진 데이터 타입
base64Binary base64 로 부호화된 이진 데이터 타입
11
Section 02 XML 스키마 사용법
미리 정의된 데이터 타입 - 기본 데이터 타입숫자 데이터타입
날짜 / 시간 데이터 타입duration 기간 표현
dateTime 날자와 시간 표현 , 날자는 그레고리력 사용
date 날자 표현 , yyyy-mm-dd 형태 표현
time 시간 표현
gYearMonth 그레고리력의 년과 월 표현 , yyyy-mm 형태로 표현
gYear 그레고리력의 년 표현
gMonthDay 그레고리력의 월과 일 표현
gMonth 그레고리력의 월 표현
gDay 그레고리력의 일 표현
decimal 십진수
float 4 바이트 실수
double 8 바이트 실수
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 값들로 구성된 목록
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 바이트 정수
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>
15
XML 스키마 선언 속성
Section 02 XML 스키마 사용법
속성 설명
①xmlns:xsd XML 스키마의 네임스페이스 지정
②targetNamespace 현재 스키마에서 선언된 요소의 네임스페이스 지정
③xmlns 기본 네임스페이스를 지정
④elementFormDefault
스키마를 사용하는 XML 문서에 대한 지시문속성값이 qualified 면 XML 문서에서 사용하는 모든 요소는 targetNamespace 에서 선언된 네임스페이스를 사용해야 하지만 , unqualified 일 경우는 targetNamespace 에서 선언된 네임스페이스를 사용하지 않아도 된다 .
⑤attributeFormDefault속성에 대한 지시문개념은 elementFormDefault 속성과 동일
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>
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>
18
XML 스키마 요소 정의 요약
Section 02 XML 스키마 사용법
<xsd:element [ 이름 ] [ 참조 ] [ 타입 ] [ 최소반복횟수 ] [ 최대반복횟수 ]>
속성 설명
이름name
선언하려는 요소 이름을 정의
참조reference
참조할 다른 요소 이름을 정의
타입type
요소 타입을 정의 ( 기본 데이터 타입 또는 사용자 정의 데이터 타입을 정의 )
최소반복횟수minOccurs
요소가 나타날 수 있는 최소 횟수를 정수로 정의생략하면 기본값이 1 로 지정
최대반복횟수maxOccurs
요소가 나타날 수 있는 최대 횟수를 정수로 정의생략하면 기본값이 1 로 지정
[ 표 6-9] 요소 선언 속성
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>
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>
21
목록 요소 정의와 사용단일 타입 값들의 연속으로 이루어진 것을 의미개발자는 원하는 경우에 목록 요소를 이용해서 새로운 목록 타입을 정의할 수 있다 .
목록 요소의 “ itemType" 속성은 목록에서 사용할 수 있는 데이터 타입을 기술한다 .
XML 스키마에서 목록 요소 정의 형식
Section 02 XML 스키마 사용법
<list id = ID itemType = QName {any attributes with non-schema namespace . . .}> Content: (annotation?, (simpleType?))</list>
22
Section 02 XML 스키마 사용법
결합 요소 정의와 사용주어진 여러 개의 단일타입이나 목록 타입 중에서 선택적으로 지정하여 결합해서 사용할 수 있는 방법<union> 요소를 이용해서 표현할 수 있으며 , 사용할 수 있는 데이터 타입들은 "memberType" 속성을 이용해서 표현할 수 있다 .
결합 타입을 정의하는 형식<union id = ID memberTypes = List of QName {any attributes with non-schema namespace . . .}> Content: (annotation?, (simpleType*))</union>
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>
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>
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>
26
Section 02 XML 스키마 사용법
그룹 요소 정의와 사용여러 요소를 하나로 묶어 사용하기 위해 사용형식
그룹 정의는 <group> 요소 내부에 정의스키마 요소의 직계 자식인 전역으로 정의되어야 함<group> 요소에는 이름을 줄 수 있기 때문에 스키마의 어느 곳에서나 참조할 수 있고 , 따라서 재사용 가능한 컨텐츠를 만드는데 그룹이 매우 유용하게 사용될 수 있다 .
속성인 all, choice, sequence 요소들은 <group> 요소 내부에 중첩된다 .
<groupname = NCName>Content: (annotation?, (all | choice | sequence))</group>
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>
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>
29
속성 그룹 정의속성 선언들을 그룹으로 묶어서 이름을 지정해 주는 것 여러 요소가 동일한 속성 집합을 지니고 있을 때 유용형식
속성 그룹은 반드시 <attributeGroup> 요소를 사용하여 전역으로 정의해야 함
Section 02 XML 스키마 사용법
<attributeGroup id = ID name = NCName ref = QName {any attributes with non-schema namespace . . .}> Content: (annotation?, ((attribute | attributeGroup)*, anyAttribute?))</attributeGroup>
30
XML 스키마 주석<annotation> 요소의 자식 요소인 <documentation> 요소와 <appinfo> 요소를 이용해서 정의<documentation> 요소
• 자신뿐만 아니라 다른 사람이 문서의도와 목적을 이해하는데 도움이 되는 정보를 수록
<appinfo> 요소• 처리 애플리케이션에 대한 추가적인 정보 제공
Section 02 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>
32
교재 277 페이지 참조
Section 03 [ 실습 ] XML 스키마 활용
Thank you