xsd (xml schema definition)

76
XML Schemas 기기 XML Schemas 기기기 기기 XML Schemas Complex Types XML Schemas simpleTypes XSD (XML Schema Definition)

Upload: mabli

Post on 24-Jan-2016

156 views

Category:

Documents


0 download

DESCRIPTION

XSD (XML Schema Definition). XML Schemas 기초 XML Schemas 데이터 형식 XML Schemas Complex Types XML Schemas simpleTypes. XML Schemas 기초 (1/11). XML Schemas 출현배경 DTD 의 제한점 작성 / 이해하기가 어렵다 .(XML 문서와 다른 문법을 사용함 ) 확장성이 불가능 함 . Data Type 정의에 제약이 많음 . 상속 (Inheritance) 기능이 없다 . XML 문법과 다름 . - PowerPoint PPT Presentation

TRANSCRIPT

XML Schemas 기초 XML Schemas 데이터 형식XML Schemas Complex TypesXML Schemas simpleTypes

XSD (XML Schema Definition)

XML Schemas 기초 (1/11)

XML Schemas 출현배경

DTD 의 제한점 작성 /이해하기가 어렵다 .(XML 문서와 다른 문법을 사용함 ) 확장성이 불가능 함 . Data Type 정의에 제약이 많음 . 상속 (Inheritance) 기능이 없다 . XML 문법과 다름 . XML 에 대한 요구상황이 달라졌다 . ( 문서에 대한 프로세싱 요구가

많아짐 .)

DTD 보다 더 표현력이 풍부하고 , 정확한 자료 구조를 제공하는 새로운 구조 정의 언어가 필요함 .

XML Schemas 기초 (2/11)

XML Schemas 종류

다양한 XML-based schema 언어가 출현함 . 학술 단체 : RDF(Resource Description Framework) B2B 관련업체들 :

Commerceone 등 : SOX(Schema for Object-oriented XML) MS 등 : XML Data, XDR(XML Data Reduced) IBM, MS 등 : DCD(Document Content Description) DDML(Document Definition Markup Language: ‘ XSchema’)

W3C: XML Schema

스키마들의 차이점 . 스키마 작성 규칙이 다름 .

예 : 루트 엘리먼트 기술 규칙 , Intrinsic data type 등

XML Schemas 기초 (3/11)

XML Schemas XML 스키마는 하나의 XML 문서 안에 어떤 것들을 담을 수 있는지에 대한

규칙 .

XML 스키마의 장점 . XML 구문을 사용 다양한 데이터 형을 지원 네임스페이스를 지원 복잡한 내용 모델을 쉽게 생성 . DTD 보다 유연한 XML 문서를 작성하는데 적용 . Data Type 및 엘리먼트 재사용이 가능함 .

XML Schemas 기초 (4/11)

DTD XSDXML 문법을 따르지 않고 독자적인 문법을 가짐 .(SGML 의 DTD 형식 )

다양한 종류의 데이터 타입을 지원하지 않음 .

XSD 는 XML 문법을 따름 .

XSD 는 풍부한 데이터형을 제공 .

XSD 는 데이터의 제약 조건을 세밀하게 정의 함 .

http://www.w3.org/XML/Schema

DTD 와 XML Schemas 의 비교

XML Schemas 기초 (5/11)

DTD 와 XML Schemas 의 비교

DTD XSD<!ELEMENT ..

><element ... > .. </element>

<!ATTLIST .. > <attribute .. />

, <sequence> .. </sequence>

| <choice> .. </choice>

? minOccurs="0" maxOccurs="1"

+ minOccurs="1" maxOccurs="unbounded"

* minOccurs="0" maxOccurs="unbounded"

XML Schemas 문서의 선언문

< 접두어 :schema xmlns:namespace 접두어 = “namespace 이름”>

<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>

Namespace( 이름공간 ) 이란 ? 어떤 이름이 통용되는 범위를 말하는 것 .

XML Schemas 기초 (6/11)

XSD 문서의 전체 구조

<?xml version=“1.0” encoding=“EUC-KR”?>

<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”><!– 이곳에 XSD 정의 문장이 위치합니다 . -->

</xsd:schema>

<?xml version=“1.0” encoding=“EUC-KR”?>

<schema xmlns=“http://www.w3.org/2001/XMLSchema”><!– 이곳에 XSD 정의 문장이 위치합니다 . -->

</schema>

XML Schemas 기초 (7/11)

엘리먼트 선언하기

<xsd:element name=“도서목록” type=“xsd:string”>

<element> 태그 엘리먼트 이름 엘리먼트 데이터형접두사

<?xml version=“1.0” encoding=“EUC-KR”?>

<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”> <xsd:element name=“ 도서목록” type=“xsd:string”></xsd:element>

</xsd:schema>

XML Schemas 기초 (8/11)

XML 문서와 XML Schemas 의 결합

XML 문서에 XML 스키마 문서에 대한 참조를 포함 . schemaLocation 속성은 유효성 검증에 필요한 XML 스키마를 찾을 수 있는 위치를 알려

줌 .

< 도서목록 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:noNamespaceSchemaLocation=“name04.xsd”>

< 도서목록 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://www.e-xml.net name04.xsd”>

XML Schemas 기초 (9/11)

XML Schemas 기초 (10/11)

<?xml version=“1.0” encoding=“EUC-KR”?>

< 도서목록 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:noNamespaceSchemaLocation=“name04.xsd">

< 도서 > < 분류 > 컴퓨터 </ 분류 > < 제목 >XML 무작정 따라하기 </ 제목 > < 출판사 > 길벗 </ 출판사 > < 저자 > 박준서 </ 저자 > </ 도서 > </ 도서목록 >

XML 문서와 XML Schemas 의 결합 예제

XSD 문서 유효성 검사

MSXML 파서의 경우 버전 4.0 에서부터 XSD 라고 불리는 W3C 표준 스키마를 지원 합니다 .따라서 이 예제들을 실행해 보려면 실습 컴퓨터에 MSXML 파서 4.0 이상의 버전이 설치되어 있어야 합니다 .또한 , 최신 MSXML 4.0 파서를 설치하려면 먼저 실습 컴퓨터에 Windows Installer 가 설치되어 있어야 합니다 .

MSXML 4.0 파서와 Windows Installer 를 설치하신 후 , XSD 문서 유효성 검사기를 설치 하세요

XML Schemas 기초 (11/11)

XML Schemas 데이터 형식(1/5)

미리 정의된 데이터 타입 데이터 타입 분류

XML 스키마에서 미리 정의된 데이터 타입 (built-in datatype) 사용자가 정의하는 타입 (user-derived datatype)

미 리 정 의 된 타 입

사 용 자 가 정 의 하 는 타 입

단 순 타 입

단 순 타 입

복 합 타 입

restric tion

restric tion

extension

기 본 형

유 도 형

1) 기본 데이터형 데이터형 설 명

String 문자열을 의미 .

Boolean 부울값을 의미 , ‘True’ 또는 ‘False’값을 가짐 .

Decimal 숫자를 의미 .

Float 32 비트 부동 소수점 수를 의미 .

Double 64 비트 부동 소수점 수를 의미 .

Duration 날짜와 시간을 의미 .

anyURI URI 를 의미

QName 정규화된 이름을 의미 .

NOTATION Qnames 집합 .

XML Schemas 데이터 형식(2/5)

2) 유도 데이터형

데이터형 설 명

DateTime 날짜와 시간을 의미 .

Time 시간을 의미 .

Date 달력 날짜를 의미 .

gYearMonth 그레고리오력 달을 의미 .

gYear 그레고리오력 해를 의미 .

gMonthDay 일 년 중 특정한 날에 되풀이 되는 그레고리오력 날짜를 의미 .

gDay 월 중 특정한 날에 되풀이 되는 그레고리오력 일을 의미 .

gMonth 매년 되풀이되는 그레고리오력 달을 의미 .

hexBinary 16 진수로 인코딩한 임의의 2 진 데이터를 의미 .

base64Binary Base64 로 인코딩한 임의의 2 진 데이터를 의미 .

XML Schemas 데이터 형식(3/5)

미리 정의된 데이터 타입들의 상속 관계

XML Schemas 데이터 형식(4/5)

사용자 정의 데이터 타입

Complex Types Allow element children Attributes allowed

Simple Types No element children No attributes

XML Schemas 데이터 형식(5/5)

Sequence 엘리먼트들이 스키마에 나타난 순서대로 나타나야 함을 지정

choice 엘리먼트나 엘리먼트 그룹 사이에서 하나를 선택 하고자 할때 사용 .

all 엘리먼트들이 순서에 얽매이지 않고 올 수 있음을 지정 .

엘리먼트의 선언 :Complex Type(1/10)

<sequence> 태그

< 도서목록 > < 도서 > < 분류 > 컴퓨터 </ 분류 > < 제목 >XML 무작정 따라하기 </제목 > < 출판사 > 길벗 </ 출판사 > < 저자 > 박준서 </ 저자 > </ 도서 > </ 도서목록 >

<!DOCTYPE 도서목록 [ <!ELEMENT 도서목록 ( 도서 )> <!ELEMENT 도서 ( 분류 , 제목 , 출판사 , 저자 > <!ELEMENT 분류 (#PCDATA)> <!ELEMENT 제목 (#PCDATA)> <!ELEMENT 출판사 (#PCDATA)> <!ELEMENT 저자 (#PCDATA)>]>

엘리먼트의 선언 :Complex Type(2/10)

Complex Type (member.xsd)<?xml version="1.0" ?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="member"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string" />

<xsd:element name="phone_no" type="xsd:string" /> </xsd:sequence> </xsd:complexType></xsd:element></xsd:schema>

엘리먼트의 선언 :Complex Type(3/10)

Complex Type (member.xml)<?xml version="1.0" encoding="euc-kr"?>

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

<name> 홍길동 </name><phone_no>031-111-2323</phone_no></member>

엘리먼트의 선언 :Complex Type(4/10)

<?xml version="1.0" encoding="EUC-KR"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name=" 도서목록 "> <xsd:complexType> <xsd:sequence> <xsd:element name=" 도서 "> <xsd:complexType> <xsd:sequence> <xsd:element name=" 분류 " type="xsd:string" /> <xsd:element name=" 제목 " type="xsd:string" />

</xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>

엘리먼트의 선언 :Complex Type(5/10)

디폴트 네임스페이스<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name=" 도서목록 "> <complexType> <sequence> <element name=" 도서 "> <complexType> <sequence> <element name=" 분류 " type="string" /> <element name=" 제목 " type="string" />

</sequence> </complexType> </element> </sequence> </complexType> </element></schema>

엘리먼트의 선언 :Complex Type(6/10)

<Choice> 태그

도서목록 09.xsd 도서목록 10.xml<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name=" 도서목록 "> <complexType> <sequence> <element name=" 도서 "> <complexType> <choice> <element name=" 분류 " type="string" /> <element name=" 제목 " type="string" /> <element name=" 출판사 " type="string" /> <element name=" 저자 " type="string" /> </choice> </complexType> </element> </sequence> </complexType> </element></schema>

<?xml version="1.0" encoding="EUC-KR"?>

< 도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=" 도서목록09.xsd"> < 도서 >

< 제목 >XML 무작정 따라하기 </ 제목 > < 저자 > 김은희 </ 저자 > </ 도서 ></ 도서목록 >

수정하시오 !

<all> 태그

도서목록 11.xsd 도서목록 12.xml<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name=" 도서목록 "> <complexType> <sequence> <element name=" 도서 "> <complexType> <all> <element name=" 분류 " type="string" /> <element name=" 제목 " type="string" /> <element name=" 출판사 " type="string" /> <element name=" 저자 " type="string" /> </all> </complexType> </element> </sequence> </complexType> </element></schema>

<?xml version="1.0" encoding="EUC-KR"?>

< 도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=" 도서목록09.xsd"> < 도서 >

< 제목 >XML 무작정 따라하기 </ 제목 > < 분류 > 컴퓨터 </ 분류 > < 저자 > 김은희 </ 저자 > < 출판사 > 길벗 </ 출판사 > </ 도서 ></ 도서목록 >

분류 , 제목 , 출판사 , 저자 -> 순서를 바꿔 보세요 .

minOccurs 와 maxOccurs 하위 엘리먼트의 반복 횟수를 정의 .

minOccurs 최소 반복 횟수 정의 기본값 = 1 minOccurs=0 엘리먼트 생략 가능 . minOccurs=1 반드시 엘리먼트 정의 .

maxOccurs 최대 반복 횟수 정의 기본값 = 1 maxOccurs=1 무조건 한번만 정의 . maxOccurs=unbounded 반복 횟수에 제한을 받지 않고 사용 .

엘리먼트의 선언 :Complex Type(7/10)

엘리먼트의 선언 :Complex Type(8/10)

minOccurs 와 maxOccurs 어트리뷰트 반복 횟수

minOccurs : 0 or 1 or unbounded (Default : 1)

maxOccurs : 0 or 1 or unbounded (Default : 1)

DTD 연산자 minOccurs maxOccurs 출연횟수

1 1 1 번

? 0 1 0 번 또는 1 번

* 0 unbounded 0 번 이상

+ 1 unbounded 1 번 이상

파일명 : 도서목록 13.xsd

<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name=" 도서목록 "> <complexType> <sequence> <element name=" 도서 " minOccurs="1" maxOccurs="unbounded"> <complexType> <sequence> <element name=" 분류 " type="string" minOccurs="1"

maxOccurs="1" /> <element name=" 제목 " type="string" minOccurs="0"

maxOccurs="1" /> <element name=" 출판사 " type="string" minOccurs="0"

maxOccurs="unbounded" /> <element name=" 저자 " type="string" minOccurs="1"

maxOccurs="2" /> </sequence> </complexType> </element> </sequence> </complexType> </element></schema>

다음을 수정하시오 !

<?xml version="1.0" encoding="EUC-KR"?>

< 도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation=" 도서목록 13.xsd">< 도서 >

< 분류 > 컴퓨터 </ 분류 >< 제목 >XML 무작정 따라하기 </ 제목 >< 출판사 > 길벗 </ 출판사 >< 저자 > 박준서 </ 저자 >< 저자 > 최배근 </ 저자 >< 저자 > 김은희 </ 저자 >

</ 도서 >< 도서 >

< 분류 > 컴퓨터 </ 분류 >< 제목 > 알기쉬운 xml</ 제목 >

</ 도서 ></ 도서목록 >

Default 와 fixed 속성

Default 엘리먼트 값이 default 값이거나 아니거나 상관없음 .

Fixed 엘리먼트에 정의되는 값이 반드시 ‘ fixed’로 정의된

값이어야 함 .

엘리먼트의 선언 :Complex Type(9/10)

파일명 :도서목록 15.xsd

<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"> <element name=" 도서목록 "> <complexType> <sequence> <element name=" 도서 " minOccurs="1"

maxOccurs="unbounded"> <complexType> <sequence> <element name=" 분류 " type="string" default=" 컴퓨터 " /> <element name=" 제목 " type="string" fixed="XML 무작정

따라하기 " /> </sequence> </complexType> </element> </sequence> </complexType> </element></schema>

파일명 :도서목록 15.xml 다음을 수정하시오 !

<?xml version="1.0" encoding="EUC-KR"?>

< 도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation=" 도서목록15.xsd">

< 도서 >< 분류 > 노트북</ 분류 >< 제목 >NEW 알기쉬운 xml</ 제목 >

</ 도서 ></ 도서목록 >

<group> 선언 재사용 가능한 엘리먼트들의 그룹 생성 반복되는 엘리먼트의 그룹을 <group> 태그로 묶은

후 XSD 에서 필요할때 사용 .

엘리먼트의 선언 :Complex Type(10/10)

파일명 : 도서목록 17.xsd<?xml version="1.0" encoding="EUC-KR" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:group name="myItem"> <xsd:sequence> <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:sequence> </xsd:group> <xsd:element name=" 도서목록 "> <xsd:complexType> <xsd:sequence> <xsd:element name=" 도서 "> <xsd:complexType> <xsd:sequence> <xsd:group ref="myItem" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>

엘리먼트 선언 :simpleType(1/27)

사 용 자 가 정 의 하 는 단 순 타 입(simpleType)

1) restriction2) list3) union4) simpleType 원소를 이용 .

제한 (restriction) 을 통한 단순 타입 정의

값의 범위를 제한 함 . 제한을 통해서 새로운 타입을 정의하기 위해서는 restriction

원소를 사용하고 , 바탕이 되는 기존 단순 타입 (base) 속성을 이용해서 기술한다 .

기존의 데이터 타입 ( 기본 타입 ) 으로부터 새로운 데이터 타입을 생성할 수 있음

하나 이상의 facet 를 통해 값을 제어할 수 있음

엘리먼트 선언 :simpleType(2/27)

패싯 (facet) 값의 범위 (value space) 를 한 관점 (single aspect) 에서

정의하는 것 . 예 : 값의 범위를 지정하는 패싯

<xsd:simpleType name="ScoreType"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="100"/> </xsd:restriction></xsd:simpleType>

엘리먼트 선언 :simpleType(3/27)

패싯 (facet) 의 종류

length minLength / maxLength pattern enumeration whiteSpace minInclusive / maxInclusive minExclusive / maxExclusive totalDigits / fractionDigits

엘리먼트 선언 :simpleType(4/27)

패싯 (facet) 의 종류 (1) length – 길이

<simpleType name=‘productCode’> <restriction base=‘NMTOKEN’>

<length value=‘8’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(5/27)

패싯 (facet) 의 종류 (2) minLength – 최소 길이

<simpleType name=‘non-empty-string’> <restriction base=‘string’>

<minLength value=‘1’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(6/27)

패싯 (facet) 의 종류 (3) maxLength – 최대 길이

<simpleType name=‘form-input’> <restriction base=‘string’>

<maxLength value=‘50’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(7/27)

Ex. <length>,<minLength>,<maxLength>- 도서목록29.xsd

<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema">

<element name=" 도서목록 ">

<complexType>

<sequence>

<element name=" 도서 " maxOccurs="unbounded">

<complexType>

<attribute name=" 분류 ">

<simpleType>

<restriction base="string">

<length value="3" />

</restriction>

</simpleType>

</attribute>

<attribute name=" 제목 ">

<simpleType>

<restriction base="string">

<minLength value="1" />

<maxLength value="6" />

</restriction>

</simpleType>

</attribute>

</complexType>

</element>

</sequence>

</complexType>

</element>

</schema>

</complexType>

</element>

</sequence>

</complexType>

</element>

</schema>

유효한 XML 문서를 완성하시오 !

<?xml version="1.0" encoding="EUC-KR"?>

< 도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=" 도서목록 29.xsd">

< 도서 분류 =“ ” 제목 ="XML" />< 도서 분류 =" 소설 1” 제목 =" 소설 무작정 " />

</ 도서목록 >

패싯 (facet) 의 종류 (4) pattern – 패턴

<simpleType name=‘isbnType’> <restriction base=‘string’>

<pattern value=‘\d{10}’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(8/27)

Ex.pattern – 우편번호 데이터 타입

<?xml version="1.0" encoding="euc-kr"?>

<member>

<name> 을지문덕</name>

<phone_no>031-123-3333</phone_no>

<zipcode>462-710</zipcode>

<address> 경기도 성남시 ...</address>

</member>

엘리먼트 선언 :simpleType(9/27)

Ex.pattern – 우편번호 데이터 타입<?xml version="1.0" encoding="euc-kr" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- 루트요소 선언 -->

<xsd:element name="member">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="name" type="xsd:string" />

<xsd:element name="phone_no" type="xsd:string" />

<xsd:element name="zipcode" type="zipType" />

<xsd:element name="address" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<!-- zipType 선언 -->

<xsd:simpleType name='zipType'>

<xsd:restriction base='xsd:string'>

<xsd:pattern value='\d{3}(-\d{3})?'/>

</xsd:restriction>

</xsd:simpleType>

</xsd:schema>

Ex.pattern – 우편번호 데이터 타입<?xml version="1.0" encoding="euc-kr" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- 루트요소 선언 -->

<xsd:element name="member">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="name" type="xsd:string" />

<xsd:element name="phone_no" type="xsd:string" />

<xsd:element name="zipcode">

<xsd:simpleType>

<xsd:restriction base='xsd:string'>

<xsd:pattern value='\d{3}(-\d{3})?'/>

</xsd:restriction>

</xsd:simpleType>

</xsd:element>

<xsd:element name="address" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

패싯 (facet) 의 종류 (5) enumeration – 유효한 값의 리스트

<simpleType name=‘season’> <restriction base=‘string’>

<enumeration value=‘ 봄’/><enumeration value=‘ 여름’/><enumeration value=‘ 가을’/><enumeration value=‘ 겨울’/>

</restriction></simpleType>

엘리먼트 선언 :simpleType(10/27)

Ex.enumeration - 도서목록 27.xsd

<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema">

<element name=" 도서목록 ">

<complexType>

<sequence>

<element name=" 도서 " maxOccurs="unbounded">

<complexType>

<attribute name=" 분류 ">

<simpleType>

<restriction base="string">

<enumeration value=" 컴퓨터 " />

<enumeration value=" 소설 " />

<enumeration value=" 만화 " />

</restriction>

</simpleType>

</attribute>

<attribute name=" 제목 " type="string" /> </complexType>

</element>

</sequence>

</complexType>

</element>

</schema>

Ex. 유효한 XML 문서를 완성하시오 !

<?xml version="1.0" encoding="EUC-KR"?>

< 도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“ xsi:noNamespaceSchemaLocation=" 도서목록27.xsd">< 도서 분류 ="노트북” 제목 ="XML 무작정 따라하기 " />< 도서 분류 =" 소설 만화” 제목 =" 소설 무작정 따라하기 " />

</ 도서목록 >

패싯 (facet) 의 종류 (6) whiteSpace – 값의 공백 처리를 제어한다 .

preserve : 변경없음 replace : 탭 , CR, LF 문자를 공백으로 변경 collapse : replace 를 적용하고 추가적으로 연속

공백 , 시작 공백 , 후행 공백을 제거

엘리먼트 선언 :simpleType(12/27)

패싯 (facet) 의 종류 (6) whiteSpace – 값의 공백 처리를 제어한다 .

<simpleType name=‘token’> <restriction

base=‘normalizedString’><whiteSpace

value=‘collapse’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(11/27)

패싯 (facet) 의 종류 (8) minInclusive – 최소값

<simpleType name=‘one-more’> <restriction base=‘integer’>

<minInclusive value=‘1’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(13/27)

패싯 (facet) 의 종류 (7) maxInclusive – 최대값

<simpleType name=‘one-hundred’> <restriction base=‘integer’>

<maxInclusive value=‘100’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(14/27)

Ex. minInclusive 와 maxInclusive – 도서목록 31.xsd

<?xml version="1.0" encoding="EUC-KR"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema">

<element name=" 도서목록 ">

<complexType>

<sequence>

<element name=" 도서 " maxOccurs="unbounded">

<complexType>

<attribute name=" 수량 ">

<simpleType>

<restriction base="integer">

<minInclusive value=“1" />

<maxInclusive value="10" /> </restriction>

</simpleType>

</attribute>

</complexType>

</element>

</sequence>

</complexType>

</element>

</schema>

Ex. 유효한 XML 문서를 완성하시오 !

<?xml version="1.0" encoding="EUC-KR"?>

< 도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=" 도서목록 31.xsd"> < 도서 수량="11" /></ 도서목록 >

Q: 조건에 맞는 XSD 를 완성 하시오 !

지정되어야 하는 실내 온도가 20 도에서 28 도 사이라면 integer 타입을 사용하여 <simpleType>으로 지정하고 제한을 줄 수 있다 .

패싯 (facet) 의 종류 (9) minExclusive – 입력 불가능한 값 중 최소값

<simpleType name=‘more-than-ninety-nine’> <restriction base=‘integer’>

<minExclusive value=‘99’/> </restriction>

</simpleType>

엘리먼트 선언 :simpleType(15/27)

패싯 (facet) 의 종류 (9) maxExclusive – 입력 불가능한 값 중 최대값

<simpleType name=‘one-hundred-and-more’>

<restriction base=‘integer’><maxExclusive value=‘101’/>

</restriction></simpleType>

엘리먼트 선언 :simpleType(16/27)

패싯 (facet) 의 종류 (11) totalDigits – 숫자 최대 자릿수 ( 소수점 이하포함 )

<simpleType name=‘amount’> <restriction base=‘decimal’>

<totalDigits value=‘8’/> <fractionDigits value=‘2’/>

</restriction></simpleType>

엘리먼트 선언 :simpleType(17/27)

패싯 (facet) 의 종류 (12) fractionDigits – 소수점 이하 최대 자릿수

<simpleType name=‘amount’> <restriction base=‘decimal’>

<totalDigits value=‘4’/> <fractionDigits value=‘1’/>

<minInclusinve value=‘36.4’/> <maxInclusinve value=‘40.5’/>

</restriction></simpleType>

엘리먼트 선언 :simpleType(18/27)

리스트 (list) 를 이용한 단순 타입 확장

단순 타입 단일 타입 - XML 스키마 관점에서 더 이상 나눌 수 없는 값 리스트 타입 - 단일 타입 값들의 연속으로 이루어진 것을 의미 . 유니온 타입 – 주어진 값 중에서 하나 선택

예 : 리스트 타입 정의<xsd:simpleType name="authors"> <xsd:list itemType="author"/></xsd:simpleType>

엘리먼트 선언 :simpleType(19/27)

c6_1205.xsd

공백으로 분리된 여러 데이터를 가지는 심플 타입 정의공백으로 분리된 여러 데이터를 가지는 심플 타입 정의

c6_1205.xml

리스트 (list)<xsd:simpleType name=“nameType">

<xsd:list itemType=“xsd:string”/></xsd:simpleType>

nameType 이 가질 수 있는 값-> 강감찬 을지문덕 이순신 권율

11 명의 축구팀 멤버 이름을 저장하는 타입 선언-> <xsd:simpleType

name=“soccerMemberNameType"> <xsd:restriction base=“nameType”>

<xsd:length value=“11”/> </xsd:restriction></xsd:simpleType>

nameType 데이터 개수를 지정하는 것 . 문자열 길이를 지정하는 것이 아님

엘리먼트 선언 :simpleType(20/27)

유니온 (union) 을 이용한 단순 타입 확장 주어진 여러 개의 단일 타입이나 리스트 타입 중에서 한 타입을

지정해서 사용하는 방법 .

예 : 유니온 타입 정의<xsd:simpleType name="writer"> <xsd:union memberTypes="xsd:positiveInteger authors"/></xsd:simpleType>

예 : 유니온 타입의 사용<writer>123</writer><writer> 홍길동 김개똥 허준 </writer>

엘리먼트 선언 :simpleType(21/27)

여러 개의 심플 타입을 결합한 심플 타입 정의여러 개의 심플 타입을 결합한 심플 타입 정의

c6_1206.xsd

c6_1206.xml

복합 타입 확장 extension 을 이용한 복합 타입 확장

복합 타입은 simpleContent 와 complexContent 원소의 extension 자식 원소를 이용해서 새로운 복합 타입을 정의 .

simpleContent - 단순타입을 복합타입으로 변환할 때 사용 .

예 ) string 데 이 터 타 입 을 갖는 원 소 에 속 성 을 추가해야 하는 경우에 simpleContent 를 사용한다 . 속성을 갖기 위해서는 복합 타입으로 선언되어야 함 .

complexContent - 복합 타입을 바탕으로 새로운 복합 타입을 정의할 때 사용 .

엘리먼트 선언 :simpleType(22/27)

simpleContent 사용 자식 요소없이 문자 데이터와 속성만 가지는 간단한 내용 모델을 구현 .

<xsd:element name=“member”>

<xsd:complexType>

<xsd:simpelContent>

<xsd:extension base=“xsd:string”>

<xsd:attribute name="name" type="xsd:string" use=“required”/>

</xsd:extension>

</xsd:simpelContent >

</xsd:complexType>

</xsd:element>

<member name=“ 홍길동”> 동명정보 </member>

엘리먼트 선언 :simpleType(23/27)

simpleContent 사용 내부에 restriction 과 extension 을 포함 예 : 가격을 위한 XML 문서

<price currency="USD">500.25</price><price currency="WON">25000</price>

예 : PriceType 정의<xsd:complexType name="PriceType"> <xsd:simpleContent> <xsd:extension base="xsd:float"> <xsd:attribute name="currency"

type="xsd:NMTOKEN/> </xsd:extension> <xsd:simpleContent></xsd:complexType>

엘리먼트 선언 :simpleType(24/27)

c6_1305.xsd

c6_1305.xml

complexContent – extenstion 사용 복합 타입을 바탕으로 새로운 복합 타입을 정의할 때 사용 . 내부에 restriction 과 extension 을 포함하는 두가지 방법 .

예 : extension 을 사용하는 방법

<xsd:complexType name="ManagerType"><xsd:complexContent> <xsd:extension base="EmployeeType"> <xsd:sequence> <xsd:element name="subordinates“

type="xsd:NMTOKENS"/> </xsd:sequence> </xsd:extension></xsd:complexContent>

</xsd:complexType>

<xsd:element name="manager" type="ManagerType"/>

엘리먼트 선언 :simpleType(25/27)

complexContent – restriction 사용 예 : restriction 을 사용하면 기존의 <complexType> 을 제한할

수 있다 .

<xsd:complexType name="TopManagerType"> <xsd:complexContent> <xsd:restriction base="EmployeeType"> <xsd:sequence> ……

<xsd:element name="dept" type="xsd:string"

minOccurs="0" maxOccurs="0"/> ……

<xsd:attribute name="id" type="IdType"/>

……

엘리먼트 선언 :simpleType(26/27)

restriction 을 이용한 복합 타입 확장 restriction 은 기존 데이터 타입에 제약 사항들을 기술 . 예 : 전화 번호를 위한 타입

<xsd:complexType name="PhoneType"> <xsd:simpleContent> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-\d{4}"/> <xsd:attribute name="where"

type="HomeOffice"/> </xsd:restriction> <xsd:simpleContent></xsd:complexType>

엘리먼트 선언 :simpleType(27/27)