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>
다음은 책 목록을 표현하기 위한 스키마 파일의 내용과 책 목록 데이터를 표현한 파일의 내용입니다.
<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> |
<?xml version="1.0" encoding="utf-8"?> <books xmlns="urn:books-schema"> <book> <title>XML.NET 과 ADO.NET</title> <price>22000</price> </book> </books> |
'프로그래밍 기술 > XML.NET' 카테고리의 다른 글
[XML.NET] 11. XmlWriter 개체로 XML 데이터 작성(Attribte 쓰기) (0) | 2016.04.18 |
---|---|
[XML.NET] 10. XmlWriter 개체로 XML 데이터 작성(요소 쓰기) (0) | 2016.04.18 |
[XML.NET] 9. XmlWriter 개체 만들기 예제 (0) | 2016.04.18 |
[XML.NET] 8. XmlWriterSettings 개요 (0) | 2016.04.18 |
[XML.NET] 7. XmlWriter 개요 (0) | 2016.04.18 |
[XML.NET] 5. XML 문서 구조 DTD (0) | 2016.04.18 |
[XML.NET] 4. CSS를 이용한 스타일 지정 (0) | 2016.04.18 |
[XML.NET] 3.XML 문서 작성 (0) | 2016.04.18 |
[XML.NET] 2. XML 문서 구조 (0) | 2016.04.18 |
[XML.NET] 1. XML 소개 (0) | 2016.04.18 |