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의 속성으로는 name과 type이 있습니다.
<xs:attribute name="x" type="y"/>
| cs |
댓글 없음:
댓글 쓰기