XML 기본 구조 (요소, 속성, CDATA, 네임스페이스)
참조문서 : https://www.w3schools.com/xml/
1. 문서 분류
XML 문서에는 정형식 문서(well-formed)와 유효한 문서(valid)가 있다.
- 정형식 문서 : XML 문법과 규칙에 맞게 만들어진 오류가 없는 문서.
- 유효한 문서 : XML 문서를 표준화할 목적으로 문서형태정의(DTD)에 따라 만든 문서
2. 문서 구조
XML 문서는 아래와 같은 구조로 이루어져 있다.
- XML 선언부
- DTD, XML 스키마 선언, 네임스페이스 선언
- 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진 코드를 적어줘야 한다. 예를들어 & 기호는 & 이고, & 라고 표기한다. 하지만 특수문자마다 이렇게 쓰기에는 번거롭다. 이를 해결하기 위해 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 |