프로그래밍 기술/XML.NET

[XML.NET] 6. XML 문서 구조 - XML 스키마(XML Schema)

언제나휴일 2016. 4. 18. 11:22
반응형

6. XML 문서 구조 - XML 스키마(XML Schema)

 

 스키마는 DTD처럼 XML문서의 구조를 표현하기 위해서 사용합니다.

 

 W3C에서는 DTD XML 스키마를 정의하고 이것에 맞게 XML을 작성하는 것을 Well Formed XML이라고 말합니다.

 

 DTD는 하나의 시스템 내에서 사용할 XML 데이터의 구조를 정의하여 유효성을 점검할 때 사용하며 스키마는 서로 다른 시스템 사이의 데이터를 주고 받아 사용할 수 있게 데이터 표준화를 위해 제공하고 있습니다.

 

 프로그램 방식으로 데이터를 처리할 때는 명확하게 문서의 구조를 정의하고 이를 기반으로 데이터 소스를 목적에 맞게 사용할 때 DTD나 스키마를 통해 안정성을 제공할 수 있습니다.

 

 DTD XML 문서 구조를 정의하면 표준화에 사용하기 힘든 이유는 다음과 같습니다.

 

 DTD XML 문서 구조와 다른 문법을 사용하므로 별도의 처리 시스템이 필요합니다.

 DTD는 네임 스페이스를 제공하지 않습니다.

 DTD는 하나의 문서에만 적용할 수 있습니다.

 DTD는 지원하는 데이터 타입의 종류가 한정되어 있습니다.

 DTD는 상속 개념을 제공하지 않습니다.

 DTD XML문법과 달라서 DOM을 지원하지 않습니다.

 

 이러한 한계점을 극복하기 위해 W3C에서는 XML 스키마 표준을 정의하고 이를 통해 XML 문서 구조를 정의할 수 있게 제공하고 있습니다.

 

 

DTD

스키마

문법

XML과 유사한 문법

XML 1.0 표준에 만족

DOM 지원

DOM 기술을 지원하지 않음

DOM을 통한 조작 가능

컨텐츠 모델

순차, 선택 리스트만 제공

순차, 리스트 복합적으로 사용 가능

데이터 타입

문자열, 토큰, ID와 그 외에

한정된 타입 지원

문장려, 숫자, 날짜/시간 및 새로운 형식

정의를 할 수 있음

Namespace

전역 이름만 사용

전역/ 로컬 이름 모두 사용 가능

상속성

제공하지 않음

제공

확장성

한계가 있음

제한 없음

기본 제약 조건

있음

없음

동적 스키마

불가능 - 읽기만 가능

가능 - 런타임에 상호작용으로 변경 가능

  [표] DTD와 스키마 비교

 

XML 스키마 문법

 

 XML 스키마는 문서의 구조와 데이터를 기술하기 위하여 구조와 데이터 타입으로 나누어져 있습니다.

 

 구조는 데이터 타입들로부터 만들어질 수 있는 조합을 의미합니다.

 

 데이터 타입은 기본 데이터 타입과 파생 데이터 타입이 있습니다.

 

 XML 스키마 선언은 <xsd:schema> 요소로 시작하며 최상위 요소는 항상 스키마여야 합니다.

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

                 xmlns="schema.xsd"

                 targetNamespace = "schema.xsd"

                 elementFormDefault = "qualified">

 

특성

의미

xmlns:xsd

XML 스키마의 네임스페이스 지정

xmlns

예약되어 있는 키워드로 네임스페이스 정의

targetNamespace

스키마에 정의한 요소나 속성들을 다른 XML 문서에서 식별할 수 있게

네임스페이스 지정

elementFormDefault

elementFormDefault 값이 qualified일 때는 모든 요소는 targetNamespace에서

선언한 네임스페이스를 사용하고 unqualified일 때는 targetNamespace에서

선언한 네임스페이스를 사용하지 않아도 됨

  [] 스키마 선언에서 사용하는 특성

 

 스키마에서 요소를 정의할 때는 element 태그를 이용해서 정의합니다. Type 속성을 이용하여 요소에 어떠한 데이터 형식을 포함할 수 있는지 나타낼 수 있습니다.

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

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

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

</xsd:schema>

 

 스키마에서 특성은 attribute 태크를 사용하여 정의합니다. 자세한 문법 사항은 W3C 권고안을 참고하세요.

<xsd:element name="price">

    <xsd:complexType>

        <xsd:simpleContent>

            <xsd:extension base="xsd:int">

                <xsd:attribute name="단위" type="xsd:string" use="optional" default=""/>

            </xsd:extension>

        </xsd:simpleContent>

    </xsd:complexType>

</xsd:element>

 

 다음은 책 목록을 표현하기 위한 스키마 파일의 내용과 책 목록 데이터를 표현한 파일의 내용입니다.

 


data.xsd


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

    xmlns="urn:books-schema"

    elementFormDefault="qualified"

    targetNamespace="urn:books-schema">

 

 <xsd:element name="books" type="booksType"/>

 

 <xsd:complexType name="booksType">

  <xsd:sequence maxOccurs="unbounded">

   <xsd:element name="book"  type="bookType"/>

  </xsd:sequence>

 </xsd:complexType>

 

 <xsd:complexType name="bookType">

  <xsd:sequence>

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

   <xsd:element name="price"  type="xsd:int"/>

  </xsd:sequence>

 </xsd:complexType>

</xsd:schema>


data.xml

<?xml version="1.0" encoding="utf-8"?>

<books xmlns="urn:books-schema">

  <book>

    <title>XML.NET ADO.NET</title>

    <price>22000</price>

  </book>

</books>


반응형