...
XML (EXtensible Markup Language)
XML은 데이터를 저장하고 전달할 목적으로 만들어졌으며, 저장되는 데이터의 구조를 기술하기 위한 언어입니다.
XML 특징
- XML은 다른 목적의 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어입니다.
- XML은 다른 시스템끼리 다양한 종류의 데이터를 손쉽게 교환할 수 있도록 해줍니다.
- XML은 새로운 태그를 만들어 추가해도 계속해서 동작하므로, 확장성이 좋습니다.
- XML은 데이터를 보여주지 않고, 데이터를 전달하고 저장하는 것만을 목적으로 합니다.
- XML은 텍스트 데이터 형식의 언어로 모든 XML 문서는 유니코드 문자로만 이루어집니다.
XML 목적
서로 호환되지 않는 데이터 타입을 사용하는 시스템 간의 데이터 교환에는 많은 시간과 노력이 발생합니다.
또한, 이렇게 데이터를 변환하는 과정에서 데이터의 손실이 발생하는 경우도 종종 있습니다.
하지만 XML은 데이터를 텍스트 형식으로 저장하므로, 소프트웨어나 하드웨어에 독립적으로 데이터를 저장하고 전달할 수 있습니다.
따라서 XML을 사용하면 새로운 운영체제나 프로그램, 브라우저 등에 상관없이 데이터를 안전하고 손쉽게 전달할 수 있습니다.
XML 트리
XML 문서는 HTML 문서와 마찬가지로 트리(tree) 형태의 계층 구조를 가집니다.
이러한 XML 트리는 하나뿐인 루트(root) 요소부터 시작하여, 각각의 자식(child) 요소에 차례대로 연결됩니다.
XML 구조
기본적인 XML 문서는 다음과 같이 구성됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<shop city="서울" type="마트">
<food>
<name>귤</name>
<sort>과일</sort>
<cost>3000</cost>
</food>
<food>
<name>상추</name>
<sort>야채</sort>
<cost>2000</cost>
</food>
</shop>
XML 문서는 맨 첫줄에 <xml>태그를 사용하여 XML 문서임을 명시해야 합니다.
<?xml version="XML문서버전" encoding="문자셋" standalone="yes|no"?>
<?xml version="1.0" encoding="UTF-8"?>
- version : XML 문서에 사용된 XML의 버전
- encoding : XML 문서의 문자셋(character set)을 명시하며, 기본값은 UTF-8
- standalone : XML 문서가 외부 DTD(Document Type Definition)와 같은 외부 소스의 데이터에 의존하고 있는 문서인지 아닌지를 XML 파서(parser)에 알려주는 역할을 합니다.
이 속성의 기본값은 no이며, yes로 설정하면 이 문서를 파싱(parsing)할 때 참조해야 할 외부 소스가 없다는 것을 의미합니다.
그 다음에는 XML 문서에 단 하나만이 존재하는 루트(root) 요소를 생성합니다.
이 루트 요소는 XML 문서에 존재하는 모든 요소의 조상(ancestor) 요소가 됩니다.
<shop city="서울" type="마트">
위의 예제에서 루트 요소는 자식(child) 요소로 두 개의 <food>요소를 가집니다.
<shop city="서울" type="마트">
<food>
...
</food>
<food>
...
</food>
</shop>
첫 번째 <food>요소는 <name>요소, <sort>요소, <cost>요소의 총 세 개의 자식 요소를 가집니다.
<food>
<name>귤</name>
<sort>과일</sort>
<cost>3000</cost>
</food>
위에서 살펴본 XML 문서는 상점에서 판매하는 식품에 관한 정보를 담고 있는 문서임을 명확하게 알 수 있습니다.
이처럼 XML 문서에서 요소의 이름은 저장하고 있는 데이터의 내용을 명확히 알려줍니다.
따라서 요소의 이름만으로도 데이터의 내용을 짐작할 수 있습니다.
XML 문법
1. 모든 XML 요소는 종료 태그를 가져야 합니다.
2. XML 태그는 대소문자를 구분합니다.
HTML에서는 태그 이름에 대소문자를 구분하지 않습니다.
하지만 XML에서는 태그 이름에 대소문자를 구분하므로, 대소문자가 다르면 다른 요소로 인식합니다.
<lecture>이 요소는 lecture 요소입니다.</lecture>
<Lecture>이 요소는 Lecture 요소입니다.</Lecture>
3. XML 태그의 여닫는 순서는 반드시 지켜져야 합니다.
여닫는 순서가 지켜진다는 것은 먼저 열린 태그는 그 안의 모든 태그가 닫힌 후에야 닫힐 수 있다는 뜻입니다.
<p><strong>이 구문은 오류를 발생합니다.</p></strong>
<p><strong>이 구문이 정확한 순서입니다.</strong></p>
4. XML에서 속성값은 반드시 따옴표로 감싸야 합니다.
HTML에서는 속성값을 따옴표로 감싸지 않아도 큰 문제 없이 동작합니다.
하지만 XML에서는 속성값을 따옴표로 감싸지 않으면 오류가 발생합니다.
<student name=홍길동> /* 오류가 발생함. */
<student name="이순신"> /* 정상적으로 동작함. */
5. XML에서는 띄어쓰기를 인식합니다.
HTML에서는 띄어쓰기를 따로 인식하지 않습니다.
하지만 XML에서는 여러 번의 띄어쓰기를 그대로 인식합니다.
XML 엔티티(Entity)
XML에서는 예약되어 있는 다섯 개의 특별한 기호가 있습니다.
이렇게 예약되어 있는 기호를 XML 문서에서 사용하면 XML 파서(해석하는 기계)는 그것을 전혀 다른 의미로 해석합니다.
HTML에서는 수많은 문자와 기호를 엔티티로 미리 정의해 놓고 사용하고 있습니다.
하지만 XML에서 제공하는 엔티티는 다섯 개뿐입니다.
다음 표는 XML에서 예약되어 있는 기호와 그에 따른 엔티티를 보여줍니다.
기호 | 엔티티 이름 | 16진수 엔티티 | 설명 |
< | < | < | 보다 작은 |
> | > | > | 보다 큰 |
& | & | & | and 기호 |
" | " | " | 큰따옴표 |
' | ' | ' | 작은따옴표 |
XML 속성
XML 속성은 XML 요소에 대한 추가적인 정보를 제공해주며, 해당 요소의 특징을 정의합니다.
<요소이름 속성1="속성값" 속성2="속성값"... >
요소와 속성의 차이점
<student>
<name>홍길동</name>
<year>3</year>
<major>컴퓨터공학</major>
</student>
<student name="홍길동">
<year>3</year>
<major>컴퓨터공학</major>
</student>
위의 두 예제에서 이름(name)이라는 데이터를 하나는 XML 요소로, 하나는 XML 속성으로 표현하고 있습니다.
결과적으로 이 두 예제는 완전히 같은 정보를 제공합니다.
정보의 전달이라는 측면에서 보면 XML 요소로 표현하는 방법과 XML 속성으로 표현하는 방법에 큰 차이는 없습니다.
하지만 속성은 여러 개의 값을 가질 수 없으며, 요소처럼 손쉽게 확장할 수 없다는 단점을 가집니다.
또한, 속성은 XML 트리에 포함되지 않기 때문에 다양한 용도로 활용할 수가 없습니다.
# 참고자료
http://www.tcpschool.com/xml/intro
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.