Programming/Etc

[XML] XML 용법 - 구성요소, 문법 등

Sujin Lee (Daisy) 2020. 4. 5. 14:56

<XML>

 

1. 개괄 

 - XML : eXtensible Markup Language

 - 마크업 언어의 일종이다. 소프트웨어/하드웨어의 종류와 관계 없이 (어떤 OS를 쓰던 호환 가능) 데이터를 전송하고 저장하는 데에 사용할 수 있다. 

 - 즉, 다른 시스템끼리 다양한 종류의 데이터를 손쉽게 교환할 수 있게 해준다. 

 - 사용자 정의 태그이다. 즉, 사용자가 태그를 만들어서 사용할 수 있다. 그러므로 확장성이 좋다. 

 - XML을 기반으로 만들어진 언어: XTHML, SVG, RSS 등

 - XML을 이용하는 프로그램: MyBatis, Spring, Kotlin, AJAX, React, Vue 등 

 - XML 표준: https://www.w3.org/TR/xml/  참고 

 

 

2. XML의 구조 

 - XML은 HTML과 마찬가지로 Tree 구조이다. 

 - 부모/자식/형제 관계 등 HTML과 전반적인 구조가 거의 동일하다. 

이미지 출처: W3Schools.com 

 

 

3. XML의 구성 요소

 

 1) 요소 (element)

  (1) 여는 태그, 닫는 태그

   - HTML과 동일하게 여는 태그와 닫는 태그로 구성된다. 

   - 형식) 

      일반적: <여는태그 속성1="속성값" 속성2="속성 값" ... > 내용 </닫는 태그>

      empty tag: <여는 태그 속성1="속성값" 속성2="속성 값" ... /> 

      물론 속성과 속성값은 없을 수 있다. 

  (2) 빈 태그(empty tag)

   - HTML에서 empty tag는 <br/>, <input/>, <img/>와 같이 속성으로 값을 지정하는 태그를 일컫는 말이다.

      XML에서도 HTML과 같이 빈 태그들이 있다. 

   - 일반적 태그: <태그> 데이터 저장 </태그>

   - empty tag: <태그 속성="데이터 저장"/> ← 태그 사이에 데이터가 없으니까 empty tag라고 부름.

  (3) XML element naming 규칙 

    - 태그 이름은 대소문자를 구분한다.

    - 태그 이름은 반드시 영문 혹은 '_'로 시작해야 한다. 

    - 태그 이름에는 영문/숫자/-/_/. 을 포함할 수 있다. 

    - 태그 이름은 공백을 포함할 수 없다. 

 

 2) 속성 (attribute)

   (1) element 값으로 데이터를 주는 것과 속성 값으로 데이터를 주는 것의 차이? 

   - 즉,  <element>값</element>    vs    <element 속성="값"></element>  두 방법의 차이?

     ex) <coffee>Cafe Latte</coffee>    vs     <coffee type="Cafe Latte"></coffee> 

    : 딱히 없다.그냥 원하는대로 쓰면 된다. 

      다만, 속성은 여러개의 값을 가질 수 없고, 요소처럼 쉽게 확장이 불가능하다. 

  (2) 속성 naming 규칙

   - XML 속성의 이름은 하나의 요소 내에서 중복되어서는 안 된다.

     ex) <coffee type="Latte" type="Ice"/> // (X)

           <coffee type="Latte" temp="Ice"/> // (O) 

 

 

4. XML 사용

 1) XML 선언

 - XML 문서는 맨 첫줄에 <xml> 태그를 써서 이 문서가 XML 문서라는 것을 명시해야 한다. 이것을 XML 프롤로그(prolog)라고 부른다. 

 - <?xml version="XML 문서버전" encoding="문자셋" standalone="yes|no"?>

    standalone: XML 문서가 DTD와 같은 외부 소스의 데이터에 의존하는지 아닌지를 XML 파서에 알려준다. 디폴트 값은 no이다.

 2) DTD

  - XML은 사용자 정의 태그로, 사용자가 자유롭게 원하는 태그를 만들 수 있다. 

  - XML에 어떤 태그를 사용할 지 미리 구조를 결정해둘 수 있는데, XML 구조를 작성할 때 DTD 또는 XML 스키마(XSD)를 사용한다. 

  - 즉, DTD(Document Type Definition, 문서 타입 정의)는 XML 문서의 요소(태그)와 속성을 정의하는 문서이다. 

  - DTD 선언 형식)

    <!DOCTYPE 루트요소 DTD 식별자 [선언1 선언2 ...]>

    XML에서 DTD는 위와 같이 <!DOCTYPE> 안에 선언된다.

  - 예시) 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">

 3) 주석: <!-- 주석 --> 

  - XML 태그 안에 주석 쓸 수 없음. 주의. 

    ex) <property name="username" value="hr"/> <!-- 주석 --> // (O) 

          <property name="username" <!-- 주석 --> value="hr"/> // (X). Error. 

 

 

5. XML 문법 

 1) 최상위 태그를 가지고 있다. 

   ex) 위의 4.2) DTD 코드박스와 같은 <!DOCTYPE>을 가진 XML 문서는 최상위 태그가 <configuration> 이다. 

 2) 반드시 닫는 태그가 존재해야 한다. 

  - HTML은 문법이 엄격하지 않기 때문에 종료태그를 생략해도 (ex. <div><h1>제목</div>) 정상적으로 해석된다. 

    empty tag의 경우도 <여는 태그 속성="값"> 이렇게 닫는 태그를 쓰지 않아도 동작한다.

    하지만, XML에서는 반드시 닫는 태그가 있어야 한다. 

    ex) <property></property>,  <property name="이름"/> 

 3) 태그나 속성은 대소문자를 구분한다. 

  - 대소문자가 다르면 다른 태그, 다른 요소로 인식한다.

    ex) <Coffee Type="Americano" type="Ice"></Coffee> → 'Type'과 'type'은 다른 속성이다. 

          <coffee Type="Americano" type="Ice"></coffee> → 위의 <Coffee>태그와 아래의 <coffee>태그는 다른 태그이다. 

 4) 속성값은 반드시 "" 큰따옴표 안에 써야 한다. 

 5) XML은 띄어쓰기를 인식한다. 

     ex) <h1>공 백  입   니    다</h1>

          → HTML: 공백입니다

          → XML: 공 백  입   니    다

 6) 키워드(xml)는 사용할 수 없다. 

 

 

6. XML Entity 

 - HTML과 마찬가지로 엔티티가 있다. 다만, HTML의 엔티티는 종류가 많은 반면 XML의 엔티티는 아래의 다섯가지 뿐이다. 

기호 엔티티 설명
< &lt; less than. ~보다 작은.
> &gt; greater than. ~보다 큰. 
& &amp; ampersand. AND 기호.
" &quot; quotation. 인용부호. 큰 따옴표. 
' &apos; apostrophy. 작은 따옴표.

 

반응형