760 likes | 1.12k Views
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 문법과 다름 .
E N D
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 문법과 다름. • 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와 XML Schemas의 비교
XML Schemas 기초(5/11) • DTD와 XML Schemas의 비교
XML Schemas 기초 (6/11) • XML Schemas 문서의 선언문 <접두어:schema xmlns:namespace 접두어 = “namespace 이름”> <xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”> • Namespace(이름공간)이란? • 어떤 이름이 통용되는 범위를 말하는 것.
XSD 문서의 전체 구조 XML Schemas 기초 (7/11) <?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 기초 (8/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 기초 (9/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 기초 (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의 결합 예제
XML Schemas 기초 (11/11) • XSD 문서 유효성 검사 • MSXML 파서의 경우 버전 4.0 에서부터 XSD라고 불리는 W3C 표준 스키마를 지원 합니다.따라서 이 예제들을 실행해 보려면 실습 컴퓨터에 MSXML 파서 4.0 이상의 버전이 설치되어 있어야 합니다.또한, 최신 MSXML 4.0 파서를 설치하려면 먼저 실습 컴퓨터에Windows Installer가 설치되어 있어야 합니다. • MSXML 4.0 파서와 Windows Installer 를 설치하신 후, XSD 문서 유효성 검사기를 설치 하세요
XML Schemas 데이터 형식(1/5) • 미리 정의된 데이터 타입 • 데이터 타입 분류 • XML 스키마에서 미리 정의된 데이터 타입(built-in datatype) • 사용자가 정의하는 타입(user-derived datatype)
XML Schemas 데이터 형식(2/5) 1) 기본 데이터형
2) 유도 데이터형 XML Schemas 데이터 형식(3/5)
XML Schemas 데이터 형식(4/5) 미리 정의된 데이터 타입들의 상속 관계
XML Schemas 데이터 형식(5/5) • 사용자 정의 데이터 타입 • Complex Types • Allow element children • Attributes allowed • Simple Types • No element children • No attributes
엘리먼트의 선언:Complex Type(1/10) • Sequence 엘리먼트들이 스키마에 나타난 순서대로 나타나야 함을 지정 • choice 엘리먼트나 엘리먼트 그룹 사이에서 하나를 선택 하고자 할때 사용. • all 엘리먼트들이 순서에 얽매이지 않고 올 수 있음을 지정.
엘리먼트의 선언:Complex Type(2/10) <sequence> 태그
엘리먼트의 선언:Complex Type(5/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(6/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>
<Choice> 태그 수정하시오!
<all> 태그 분류,제목,출판사,저자-> 순서를 바꿔 보세요.
엘리먼트의 선언:Complex Type(7/10) • minOccurs와 maxOccurs • 하위 엘리먼트의 반복 횟수를 정의. • minOccurs • 최소 반복 횟수 정의 • 기본값 = 1 • minOccurs=0엘리먼트 생략 가능. • minOccurs=1반드시 엘리먼트 정의. • maxOccurs • 최대 반복 횟수 정의 • 기본값 = 1 • maxOccurs=1무조건 한번만 정의. • maxOccurs=unbounded반복 횟수에 제한을 받지 않고 사용.
엘리먼트의 선언:Complex Type(8/10) • minOccurs와 maxOccurs 어트리뷰트 • 반복 횟수 • minOccurs : 0 or 1 or unbounded (Default : 1) • maxOccurs : 0 or 1 or unbounded (Default : 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</제목> </도서> </도서목록>
엘리먼트의 선언:Complex Type(9/10) • Default와 fixed 속성 • Default • 엘리먼트 값이 default 값이거나 아니거나 상관없음. • Fixed • 엘리먼트에 정의되는 값이 반드시 ‘fixed’로 정의된 값이어야 함.
파일명:도서목록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</제목> </도서> </도서목록>
엘리먼트의 선언:Complex Type(10/10) • <group> 선언 • 재사용 가능한 엘리먼트들의 그룹 생성 • 반복되는 엘리먼트의 그룹을 <group>태그로 묶은 후 XSD에서 필요할때 사용.
파일명 : 도서목록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) • restriction • list • union • simpleType 원소를 이용.
엘리먼트 선언:simpleType(2/27) • 제한(restriction)을 통한 단순 타입 정의 • 값의 범위를 제한 함. • 제한을 통해서 새로운 타입을 정의하기 위해서는 restriction 원소를 사용하고, 바탕이 되는 기존 단순 타입(base) 속성을 이용해서 기술한다. • 기존의 데이터 타입(기본 타입)으로부터 새로운 데이터 타입을 생성할 수 있음 • 하나 이상의 facet를 통해 값을 제어할 수 있음
엘리먼트 선언:simpleType(3/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(4/27) • 패싯(facet)의 종류 • length • minLength / maxLength • pattern • enumeration • whiteSpace • minInclusive / maxInclusive • minExclusive / maxExclusive • totalDigits / fractionDigits
엘리먼트 선언:simpleType(5/27) • 패싯(facet)의 종류(1) • length –길이<simpleType name=‘productCode’> <restriction base=‘NMTOKEN’> <length value=‘8’/> </restriction></simpleType>
엘리먼트 선언:simpleType(6/27) • 패싯(facet)의 종류(2) • minLength –최소 길이<simpleType name=‘non-empty-string’> <restriction base=‘string’> <minLength value=‘1’/> </restriction></simpleType>
엘리먼트 선언:simpleType(7/27) • 패싯(facet)의 종류(3) • maxLength –최대 길이<simpleType name=‘form-input’> <restriction base=‘string’> <maxLength value=‘50’/> </restriction></simpleType>
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>
유효한 XML 문서를 완성하시오! <?xml version="1.0" encoding="EUC-KR"?> <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="도서목록29.xsd"> <도서 분류=“”제목="XML" /> <도서 분류="소설1”제목="소설 무작정" /> </도서목록>
엘리먼트 선언:simpleType(8/27) • 패싯(facet)의 종류(4) • pattern –패턴<simpleType name=‘isbnType’> <restriction base=‘string’> <pattern value=‘\d{10}’/> </restriction></simpleType>
엘리먼트 선언:simpleType(9/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>
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>
엘리먼트 선언:simpleType(10/27) • 패싯(facet)의 종류(5) • enumeration –유효한 값의 리스트<simpleType name=‘season’> <restriction base=‘string’> <enumeration value=‘봄’/> <enumeration value=‘여름’/> <enumeration value=‘가을’/> <enumeration value=‘겨울’/> </restriction></simpleType>
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 무작정 따라하기" /> <도서 분류="소설 만화” 제목="소설 무작정 따라하기" /> </도서목록>