XML 기본 구조 (요소, 속성, CDATA, 네임스페이스)

2021. 3. 23. 02:44 기타/JSON, XML

참조문서 : https://www.w3schools.com/xml/

1. 문서 분류

XML 문서에는 정형식 문서(well-formed)와 유효한 문서(valid)가 있다.

  • 정형식 문서 : XML 문법과 규칙에 맞게 만들어진 오류가 없는 문서.
  • 유효한 문서 : XML 문서를 표준화할 목적으로 문서형태정의(DTD)에 따라 만든 문서

 

 

2. 문서 구조

XML 문서는 아래와 같은 구조로 이루어져 있다.

  1. XML 선언부
  2. DTD, XML 스키마 선언, 네임스페이스 선언
  3. XML 태그와 데이터

 

XML 선언부

<?xml version="버전" encoding="인코딩방식" standalone="yes 아니면 no"?>

인코딩과 독립형 여부는 선택 속성이다. 인코딩 기본값은 UTF-8이다. 독립성 여부는 yes가 기본 값이며 해당 문서를 해석할 때 외부 DTD 문서 참조해야하는 지 여부를 XML 파서에게 전달한다는 뜻이다.

주석

<!-- comment --> 를 사용한다. 주석은 XML 선언부 이후에만 사용할 수 있다.

 

3. XML 요소

XML 문서에서 요소(element)는 아래 표처럼 구성된다. 시작과 종료 태그로 한 쌍이 되어야 한다.

시작태그 요소 내용 종료태그
<태그명> 요소 내용 </태그명>

요소내용은 PCDATA(Parsed Character DATA)라고 한다. 이 때 태그명은 시작과 종료가 일치해야하고, 대소문자를 구별한다. 요소 안에 데이터가 비어있을 때는 <태그명 /> 으로 통합해서 표현할 수도 있다. 또한 최상위 태그는 하나만 가질 수 있다. 취상위 요소는 루트 요소, 문서 요소라고도 한다. XML을 잘 짰다면 XML 문서 구조는 트리 형식이며 트리로 표현할 수 있다.

 

태그 명명규칙

  • 태그명의 첫 문자는 문자나 _(언더스코어)를 사용해야 하고 숫자로 시작할 수 없다.
  • 처음과 중간에는 공백을 사용할 수 없다.
  • 예약어를 사용할 수 없다. (xml 등)

 

4. XML 속성(Attribute)

태그 내에 인라인으로 정보나 데이터를 표현하는 것을 속성이라고 부른다.

  • 속성은 반드시 값을 가져야 한다. 빈문자열도 가능하다.
  • 속성명은 태그 명명규칙을 따른다.
  • 한 요소 내에 중복된 속성명을 사용할 수 없다.
  • 속성값은 큰따옴표나 작은따옴표로 감싼다.

예를들어, 같은 데이터를 태그 요소와 속성으로 표현할 수 있다.

<!-- 태그 표현 -->
<product>
	<id>50</id>
	<name>samsung</name>
	<category>computer</category>
	<price>1500000</price>
</product>

<!-- 속성 표현 -->
<product id="50" name="samsung" category="computer" price="1500000">
</product>

태그는 확장성이 용이하고, 속성은 단일값을 표현하기에 적합하다. 표현하고자 하는 데이터가 의존적인 경우 속성으로 표현하는 것이 권장된다.

 

5. 특수문자

>나 < 기호를 요소내용으로 표현하려고 하면 XML이 이것을 태그로 인식할 것이다. 따라서 개체 참조명을 사용하거나, 10진 코드를 적어줘야 한다. 예를들어 & 기호는 &#38 이고, &amp; 라고 표기한다. 하지만 특수문자마다 이렇게 쓰기에는 번거롭다. 이를 해결하기 위해 CDATA 를 사용할 수 있다.

CDATA

위에서 PCDATA의 반대말이며, Character DATA의 약자이다. CDATA 섹션은 문자 데이터를 XML 데이터로 해석하지 않고 그대로 표현하는 것을 말한다. 섹션 내에 이스케이프를 취한 느낌?

<![CDATA[
	특수문자가 포함된 문자열들...
]]>

단, CDATA는 태그 내부 인라인에는 쓸 수 없다.

 

6. 처리 명령문(Processing Instruction)

XML 문서는 데이터 형식 및 처리정보가 없다. 하지만 처리 명령문을 마크업 형식으로 제공한다. 이와 같은 텍스트를 읽는 XML 처리기(XML 파서)가 해당 정보를 적절히 사용하게 하는 것이다.

<?처리기명 속성1="값' 속성2="값"?> 형태로 사용한다.

흔히 보이는 예제로는 <?xml-stylesheet type="text/css" href="main.css"?> 같은 것이 있다.

 

7. 네임스페이스

태그명을 자유롭게 정의할 수 있다는 건 큰 장점이지만, 중복 태그가 생길 수 있는 문제가 있다. 태그명 충돌문제를 해결하기 위해 XML에는 네임스페이스라는 것이 있다. 네임스페이스는 각 요소명과 속성명을 정확히 인식한다.

네임스페이스는 유일하고 지속적인 특징이 있으며 xmlns를 사용한다. 보통 네임스페이스들은 프로토콜://도메인/작성년도/네임스페이스명 형식이다.

 

7-1. 기본 네임스페이스

어떤 태그의 속성으로 xmlns="URI" 을 넣어주면 그 태그의 자식 태그들에게도 영향을 미치는 기본 네임스페이스가 된다. 그러나 자식 태그들 중 네임스페이스 접두사가 붙어있다면 기본 네임스페이스가 적용되지 않는다. 이를 이용해 다중으로 네임스페이스를 이용할 수 있다. 만약 자식 태그중 하나가 xmlns="" 로 빈 문자열을 기본 네임스페이스 선언한다면, 그 태그와 그 자식태그들은 기본네임스페이스를 적용하지 않는다.

 

7-2. 접두사 사용

<태그명 xmlns:접두사명="URI"> 형식으로 사용한다. 접두사명에는 첫문자로 문자나 _(언더스코어)를 쓸 수 있고, 다음문자부터는 문자, 숫자, 하이픈 등이 사용가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<st:students xmlns:st="http://www.koreaxml.ac.kr/2016/students"
             xmlns:pf="http://www.w3.org/1999/xhtml">
    <st:student>
        <st:sid>30</st:sid>
        <st:name>빨코</st:name>
        <st:age>25</st:age>
        <st:profile>
            <pf:html>
                <pf:head>
                    <pf:title>빨간색코딩</pf:title>
                </pf:head>
            <pf:body>개발해서 내집장만</pf:body>
            </pf:html>
        </st:profile>
    </st:student>
</st:students>
 
cs

 

7-3. 속성명 충돌

태그명처럼 속성명에서도 충돌이 발생할 수 있다. 태그와 마찬가지로 네임스페이스로 해결할 수 있다.

<student st:id="54"> ...
<book bk:id="1251"> ...



출처: https://sjh836.tistory.com/118?category=687142 [빨간색코딩]

'기타 > JSON, XML' 카테고리의 다른 글

XML 개요 (개념, 설계목표)  (0) 2021.03.23
CORS vs JSONP  (0) 2021.03.23
JSONP  (0) 2021.03.23