XML은 eXtensible Markup Language의 약자로, 데이터를 저장하고 전송하기 위한 목적으로 만들어진 마크업 언어이다. 사람과 기계 모두 읽기 쉬운 형태로 데이터를 저장하고 교환할 수 있도록 설계되었다.
HTML이 주로 보여주기 위한 것이랑은 다른 양상이다.
XML은 안드로이드 앱의 GUI(그래픽 유저 인터페이스), 서버프로그램의 AJAX에서도 사용된다.
XML 문서는 태그(tag)를 사용하여 데이터를 표현한다. 태그는 <와 > 기호로 둘러싸인 이름으로, 데이터의 의미를 나타낸다.
<name>홍길동</name>
이 예시에서 <name>은 태그이고, "홍길동"은 태그에 포함된 데이터이다.
XML 문서는 루트 요소(root element)라는 하나의 최상위 요소를 가지며, 그 아래에 여러 개의 자식 요소가 계층적으로 구성된다.
<person>
<name>홍길동</name>
<age>25</age>
</person>
이 예시에서 <person>은 루트 요소이고, <name>과 <age>는 자식 요소이다.
XML은 데이터를 저장하고 교환하는 데 널리 사용되는 마크업 언어이다. XML의 장점과 단점을 이해하고 적절히 활용하면 데이터 관리 및 교환 효율성을 높일 수 있다.
XML 문서는 마치 나무처럼 계층적인 구조를 가지고 있어서, 이를 XML 트리라고 부른다.
XML 트리 구조 예시
<book>
<title>XML 기본</title>
<author>John Doe</author>
<isbn>978-0-321-77640-2</isbn>
<publisher>
<name>출판사</name>
<location>서울</location>
</publisher>
</book>
이 예시에서 <book>은 루트 요소이고, <title>, <author>, <isbn>, <publisher>는 자식 요소이다. <publisher> 요소는 다시 <name>과 <location>이라는 자식 요소를 가진다.
XML 문서를 작성할 때는 다음과 같은 문법 규칙을 따라야 한다.
<name>홍길동</name>과 같이 시작 태그 <name>과 종료 태그 </name>를 사용하여 요소를 감싸야 한다.<name>과 <Name>은 서로 다른 태그로 인식된다.<person><name>홍길동</name></person>과 같이 요소 안에 다른 요소를 포함할 수 있다.<person name="홍길동"></person>과 같이 속성값은 반드시 큰따옴표(") 또는 작은따옴표(')로 감싸야 한다.XML 문법을 준수하여 작성된 XML 문서는 데이터를 구조적으로 표현하고, 다양한 시스템과 애플리케이션에서 데이터를 교환하는 데 유용하게 사용될 수 있다.
XML에서 속성은 요소에 대한 추가적인 정보를 제공하는 역할을 한다. 이름-값 쌍으로 구성되며, 요소의 시작 태그 안에 위치한다.
<person name="홍길동" age="25">
</person>
이 예시에서 name="홍길동"과 age="25"는 <person> 요소의 속성이다. name은 속성 이름이고, "홍길동"은 속성값이다.
속성 사용 시 주의 사항
XML 문서의 맨 처음에는 선택적으로 프롤로그를 포함할 수 있다. 프롤로그는 XML 선언과 문서 타입 선언으로 구성된다.
<?xml version="1.0" encoding="UTF-8"?>현재 사용되는 버전은 1.0이고, 한글의 사용을 위해서는 UTF-8로 설정해야 한다. UTF-8은 대부분의 문자를 표현할 수 있고, 메모리 사용도 가변적이므로 거이ㅡ 모든 XML 문서가 표준 인코딩으로 사용하고 있다. 또한 HTML5, CSS, PHP, JavaScript 등에서도 문제없이 사용할 수 있다.<!DOCTYPE book SYSTEM "book.dtd">XML 문서에는 주석을 추가할 수 있다. 주석은 `` 기호로 둘러싸인 텍스트로, 문서의 내용에 영향을 미치지 않는다. 파싱등에서도 제외된다. XML은 태그 안에 !(느낌표)를 사용하면 주석이 된다. '<'를 입력하고 Tab 키를 누르면 주석이 자동 생성된다.
<!-- 주석-->
XML 속성, 프롤로그, 주석을 적절히 사용하면 XML 문서의 가독성과 유지보수성을 향상시킬 수 있다.
XML에서 요소와 속성은 모두 데이터를 저장하는 데 사용되지만, 그 역할과 사용 방법에 차이가 있다.
요소는 XML 문서의 기본적인 구성 요소로, 데이터를 계층적으로 저장하는 데 사용된다. 시작 태그와 종료 태그로 둘러싸여 있으며, 태그 사이에 데이터 또는 다른 요소를 포함할 수 있다.
<name>홍길동</name>
<address>
<city>서울</city>
<street>강남대로</street>
</address>
속성은 요소에 대한 추가적인 정보를 제공하는 데 사용된다. 이름-값 쌍으로 구성되며, 요소의 시작 태그 안에 위치한다.
<person name="홍길동" age="25"></person>
속성의 장점
속성의 단점
어떤 경우에 요소를 사용하고 어떤 경우에 속성을 사용해야 할까?
요소와 속성을 적절히 사용하면 XML 문서를 더욱 효율적으로 구성하고 관리할 수 있다.
XML 네임스페이스는 XML 문서에서 요소나 속성의 이름이 중복되는 것을 방지하기 위해 사용한다. 마치 여러 사람이 모여서 회의를 할 때, 이름이 같은 사람이 있으면 서로 혼동될 수 있으므로, 각자 소속된 부서를 함께 말하여 구분하는 것과 같은 원리이다.
XML 네임스페이스는 URI (Uniform Resource Identifier)형식으로 정의되며, 일반적으로 URL (Uniform Resource Locator)을 사용한다. URI는 인터넷에서 자원을 식별하는 데 사용되는 문자열이다.
XML 네임스페이스는 xmlns 속성을 사용하여 선언한다. xmlns 속성은 요소의 시작 태그 안에 위치하며, 다음과 같은 형식을 가진다.
xmlns:접두사="네임스페이스"
접두사(네임스페이스 이름): 네임스페이스를 식별하기 위해 사용하는 네임스페이스의 짧은 이름이다.네임스페이스: 네임스페이스를 나타내는 URI이다.네임스페이스를 선언한 후에는 접두사를 사용하여 요소와 속성을 네임스페이스에 연결할 수 있다.
<root xmlns:my="http://www.example.com/my">
<my:element1>...</my:element1>
</root>
이 예시에서 my:element1 요소는 http://www.example.com/my 네임스페이스에 속한다.
네임스페이스는 요소 이름 앞에 '네임스페이스 이름:'을 사용한다. 네임스페이스를 사용하기 위해서는 먼저 네임스페이스를 정의해 주어야 한다.
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="https://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
이 예시에서 xmlns:h="http://www.w3.org/TR/html4/"는 h라는 접두사를 http://www.w3.org/TR/html4/ 네임스페이스에 연결한다. 따라서 <h:table> 요소는 http://www.w3.org/TR/html4/ 네임스페이스에 속하는 table 요소를 나타낸다. 마찬가지로 <f:table> 요소는 https://www.w3schools.com/furniture 네임스페이스에 속하는 table 요소를 나타낸다.
이처럼 XML 네임스페이스를 사용하면 같은 이름의 요소나 속성이라도 서로 다른 네임스페이스에 속하면 구분할 수 있으므로, 이름 충돌을 방지할 수 있다.
모든 요소 앞에 '네임스페이스 이름:'을 붙여야 하는 번거로움이 있다. 따라서 상위요소에 디폴트 네임 스페이스를 정해두고, 그 하위요소에서는 네임스페이스명이 없는 요소를 사용하게 한다.
디폴트 네임스페이스는 접두사 없이 요소를 네임스페이스에 연결하는 방법이다. 디폴트 네임스페이스는 xmlns 속성에 접두사 없이 네임스페이스를 지정하여 선언한다.
<table xmlns="http://www.example.com/my">
<element1>...</element1>
<td>...</td>
</root>
이 예시에서 element1 요소는 http://www.example.com/my 네임스페이스에 속한다. 위와 같이 디폴트 네임스페이스를 사용하면
네임스페이스 이름:요소명처럼 사용해 줄 필요가 없어진다.
XML 네임스페이스는 XML 문서를 구조화하고 관리하는 데 유용한 도구이다.