XML

Pikabot (토론 | 기여)님의 2022년 5월 27일 (금) 00:54 판 (봇: 자동으로 텍스트 교체 (-<br> +<br />))
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
XML 마크업 형식

XML(eXtensible Markup Language)은 W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어이다. 각 정보를 <(tagname)>내용</(tagname)> 형식의 태그로 둘러싸인 형태로 정보를 저장한다. 웹 페이지를 제작할 때 사용하는 HTML과 유사한 형태로 표현된다.

특징[편집 | 원본 편집]

태그로 내용을 여닫는 형식의 메타 언어인 SGML의 부분집합인 언어로ㅗ, <tagname property="value">내용</tagname>처럼 <> 기호로 둘러싸인 태그명으로 내용을 전달하는 방식이다. 국제적으로 웹 표준을 정하는 기구인 W3C에서는 XML 1.0 표준을 지정하고 있다.

정보 전달 원리[편집 | 원본 편집]

예를 들면 쏘나타의 차량 최고 속력이 시속 240km이고, 가솔린 차량이며, 연비가 12km/l라는 정보를 전달하고 싶을 때 xml에서는 다음과 같이 전달할 수 있다. 편의상 태그의 단위는 태그의 속성으로 지정하고, 값은 숫자로 지정한다고 생각한다.

<?xml version="1.0"?>
<information kinds="car">
    <model>Sonata</model>
    <fuel-type>Gasoline</fuel-type>
    <maximum-speed unit="km/h">240</maximum-speed>
    <fuel-efficiency unit="km/l">12</fuel-efficiency>
</information>

이제 여기에 차의 전장 4.9m라는 정보를 추가하고자 하면 information 태그 안에 다음과 같이 정보를 추가하면 된다.

<?xml version="1.0"?>
<information kinds="car">
    <model>Sonata</model>
    <fuel-type>Gasoline</fuel-type>
    <maximum-speed unit="km/h">240</maximum-speed>
    <fuel-efficiency unit="km/l">12</fuel-efficiency>
    <length unit="m">4.9</length>
</information>

필요하다면 fuel-type(연료 종류)과 fuel-efficiency(연비) 정보를 공통 상위항목인 연료 정보에 묶을 수 있다. 또한 차의 전장 4.9m도 크기 정보 태그(size)의 하위 태그로 정리할 수도 있다.

<?xml version="1.0"?>
<information kinds="car">
    <model>Sonata</model>
    <fuel>
        <fuel-type>Gasoline</fuel-type>
        <fuel-efficiency unit="km/l">12</fuel-efficiency>
    </fuel>
    <maximum-speed unit="km/h">240</maximum-speed>
    <size>
        <length unit="m">4.9</length>
    </size>
</information>

일단 이런 규격을 잡으면 차량이 바뀌어도 같은 규격을 이용해서 정보를 전달할 수 있다. 이제는 디젤 차량인 쏘렌토로 연비 14km/l, 차의 전장 4.8m로 정보가 바뀌었다고 가정한다. 그러면 다음과 같이 정보를 전달할 수 있다.

<?xml version="1.0"?>
<information kinds="car">
    <model>Sorento</model>
    <fuel>
        <fuel-type>Diesel</fuel-type>
        <fuel-efficiency unit="km/l">14</fuel-efficiency>
    </fuel>
    <maximum-speed unit="km/h">240</maximum-speed>
    <size>
        <length unit="m">4.8</length>
    </size>
</information>

XML은 태그에 내용이 없는 경우 <(tagname) />처럼 / 기호를 이용해서 아무 내용 없이 닫을 수 있음을 의미할 수 있다.

HTML과의 비교[편집 | 원본 편집]

HTML은 웹 페이지를 표현하는 마크업 언어인데 반해 XML은 범용적으로 사용할 수 있는 마크업 언어이다. HTML에서 태그 이름은 웹 페이지의 특정한 기능을 담당하기에 정해져 있지만 XML의 태그 이름은 XML에서 임의로 약속한 방식대로 정의할 수 있다. 즉, XML의 활용성은 HTML보다 더 범용적인 마크업 언어라고 볼 수 있다.

얼핏 보면 HTML은 XML의 부분집합으로 생각할 수 있으나 사실 HTML은 의미상의 혼동이 없을 경우 닫는 태그를 누락해도 정상적으로 작동되므로 XML의 부분집합이라고 볼 수는 없다. 예를 들면 다음과 같이 닫힌 태그가 누락된 페이지는 유효한 HTML 코드이다. 하지만 XML의 규격에는 맞지 않게 된다.

<html>
    <head>
        <meta charset="UTF-8">
        <title>웹 페이지</title>
    <body>
        <p>축하합니다.
        <p>정말로요 <br /></p>
        <img src="test.png">
     </body>

기반 언어[편집 | 원본 편집]

  • RDF
  • RSS - 뉴스/블로그 사이트를 표현하기 위한 콘텐츠 표현 방식
  • Atom - 웹 콘텐츠의 신디케이션을 위한 문서 포맷
  • MathML - 수식을 표현하기 위한 표현 방식
  • XHTML - 웹 페이지를 표현하기 위한 마크업 언어. HTML과는 달리 XML 기반이기에 태그 닫는 부분에 엄격하게 적용해야 한다.
  • SVG - 벡터 그래픽

XML, JSON 비교[편집 | 원본 편집]

XML, JSON은 모두 정보 전달을 할 때 사용할 수 있다. 그러나 XML은 같은 이름으로 열고 닫는 태그를 사용하기에 키값이 늘어남에 따라서 정보 내용이 불필요하게 커지게 된다. 또한 XML 자체는 프로그래밍 언어가 사용하기 불편한 형태이다. 따라서 자바스크립트 같은 프로그래밍 언어에서는 오브젝트의 형식과 유사한 형태로 정보를 저장하게 되는데 이것을 JSON(JavaScript Object Notation)이라고 부른다. 위에서 정의한 XML 내용을 살펴보면 다음과 같다.

<?xml version="1.0"?>
<information kinds="car">
    <model>Sonata</model>
    <fuel>
        <fuel-type>Gasoline</fuel-type>
        <fuel-efficiency unit="km/l">12</fuel-efficiency>
    </fuel>
    <maximum-speed unit="km/h">240</maximum-speed>
    <size>
        <length unit="m">4.9</length>
    </size>
</information>

이것을 JSON으로 표현하면 다음과 같이 간결해진다. XML 태그 안의 prop 부분은 prop 오브젝트를 사용해서 간소화했다. 키값을 한 번만 언급하면 되고, <> 표현 대신에 중괄호와 반점으로 구분하면 되므로 좀 더 내용을 줄일 수 있다. 아래 내용에서 prop을 신경쓰지 않을 경우 훨씬 더 간결한 내용으로 묘사가 가능해진다.

{
    "information" : 
        {
            "prop": {"kinds":"car"},
            "model": "Sonata",
            "fuel": {
                 "fuel-type": "Gasoline",
                 "fuel-efficiency": {
                      "prop": {"unit":"km/l"},
                      "value": "12"
                 }
             },
             "maximum-speed": {
                  "prop": {"unit":"km/h"},
                   "value": "240"
             },
             "size": {
                 "length": {
                      "prop": {"unit": "m"},
                      "value": "4.9"
                 }
             }
        }
}

대체로 XML은 정보 전송 규격보다는 데이터 문서 규격 등 좀 더 복잡한 형식의 데이터를 다룰 때 유용하다. 여닫는 태그가 나오고 속성을 자유롭게 지정할 수 있어서 다양한 문서 포맷을 표현할 수 있기 때문이다.

참조[편집 | 원본 편집]

각주