전체 페이지뷰

2017년 3월 24일 금요일

XML - Schemas

XML Schema는 보통 XML Schema Definition (XSD)으로 알려져 있습니다. 이것은 XML 문서의 구조와 내용을 validate하고 서술하기 위해 사용됩니다.
XML Schema는 element, attribute, data type을 정의합니다. Schema element는 네임스페이스를 지원하며, 데이터베이스를 설명하는 용도인 database schema와 유사합니다.

Syntax

XML 문서 내에 다음과 같이 선언합니다.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
cs

Example

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="contact">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="company" type="xs:string" />
            <xs:element name="phone" type="xs:int" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>
cs

XML Schema의 기본 개념은 XML 문서가 취할 수 있는 포맷을 서술하는 것입니다.

Element

XML - Elements 챕터에서 보았듯이 element는 빌딩블럭입니다. XSD 내에서 element는 아래와 같이 정의됩니다.
<xs:element name="x" type="y"/>
cs

Definition types

Simple type

텍스트 컨텍스트에서만 사용됩니다. 미리 정의된 simple type으로는 xs:integer, xs:boolean, xs:string, xs:date 등이 있습니다.
예) 
<xs:element name="phone_number" type="xs:int" />
cs

Complex type

다른 element를 정의할때 컨테이너로 쓰입니다. 어떤 element가 어떤 child를 가질 수 있는지 보여주고 XML문서 내에서의 구조를 보여줍니다.

예)
<xs:element name="Address">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
        <xs:element name="company" type="xs:string" />
            <xs:element name="phone" type="xs:int" /
        </xs:sequence
    </xs:complexType>
</xs:element
cs

위의 예에서 Address는 몇 개의 child element로 구성되어 있습니다. 이것은 <xs:element>의 컨테이너이며, 간단한 계층 구조를 보여줍니다.

Global type

Global type으로는 문서 내에서 다른 모든 참조에서도 사용할 수 있는 한 개의 타입을 정의할 수 있게 됩니다. 예를 들어, 서로 다른 주소의 회사에서 사용할 수 있는 person과 company 정보에 대해 일반화 한다고 가정해 봅시다. 이런 경우 다음과 같이 타입을 정의할 수 있습니다.
<xs:element name="AddressType">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
        <xs:element name="company" type="xs:string" />
        </xs:sequence
    </xs:complexType>
</xs:element
cs

그런 다음 이 타입을 사용하여 봅시다.
<xs:element name="Address1">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="address" type="AddressType" />
        <xs:element name="phone1" type="xs:int" /
        </xs:sequence
    </xs:complexType>
</xs:element
<xs:element name="Address2">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="address" type="AddressType" />
        <xs:element name="phone2" type="xs:int" /
        </xs:sequence
    </xs:complexType>
</xs:element
cs

Address1, Address2에 대해 각각 name과 company를 정의하는 것이 아니라 한번만 정의했습니다. 이렇게 하면 좀 더 유지 측면에서 간단해 집니다. 따라서 여러분이 주소에 "Postcode" element를 추가하려고 하면 한군데만 고쳐도 됩니다.


Attribute

XSD에서 Attribute는 추가 정보를 제공합니다. Attribute의 속성으로는 nametype이 있습니다.
<xs:attribute name="x" type="y"/>
cs

댓글 없음:

댓글 쓰기