ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [공유] XML, DTD, XSD, XSLT, XPATH 정리_인스피언
    Learning/IT 용어 2022. 10. 21. 12:38

     

    안녕하세요. 인스피언입니다.

    오늘은 새롭게 저희 회사 인턴이 직접 정리한 IT 용어 포스팅을 들고 왔습니다!

    XML, DTD, XSD, XSLT, XPATH에 대해 좀 더 깊게 알아보는 시간이 되시면 좋겠습니다!

     


    XML 이란?

    Extensible Markup Language의 약자로 데이터를 저장하고 전달할 목적으로 만들어졌으며, 저장되는 데이터의 구조를 기술하기 위한 언어

    XML과 비슷한 언어로 HTML이 있다. HTML은 웹 페이지의 구조를 만들기 위한 언어로 정의된 태그만 사용하여 작성하는 것이다. 정의된 태그는 예를 들어 글씨를 크게 나타내고 싶을 때 <h1> </h1>이라는 태그를 사용해서 작성한다.

    XML은 플랫폼 간 데이터를 교환하는 데 사용되는 언어이고 확장 가능한 언어이기 때문에 사용자가 태그를 임의로 지정해서 사용할 수 있다는 점에서 HTML과 차이가 있다.

    XML 특징

    1. XML은 다른 목적의 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어입니다. 
    2. XML은 다른 시스템끼리 다양한 종류의 데이터를 손쉽게 교환할 수 있도록 해줍니다. 
    3. XML은 새로운 태그를 만들어 추가해도 계속해서 동작하므로, 확장성이 좋습니다.
    4. XML은 데이터를 보여주지 않고, 데이터를 전달하고 저장하는 것 만을 목적으로 합니다. 
    5. XML은 텍스트 데이터 형식의 언어로 모든 XML 문서는 유니코드 문자로만 이루어집니다.

    XML 사용 이유

    서로 호환되지 않는 데이터 타입을 사용하는 두 시스템 A와 B가 있는데 데이터를 교환하게 되면 많은 시간이 들고 데이터를 변환하는 데 있어서 손실이 발생할 수 있다. 그렇기 때문에 XML을 사용하게 되었다. XML을 사용하면 데이터를 안전하고 쉽게 전달할 수 있다.

    XML 구조

    XML은 트리 형태의 계층 구조를 가진다.

    예제와 같이 맨 첫 줄에 XML 문서임을 명시한다. XML은 하나의 루트 태그를 가질 수 있는데 그 역할을 이 예제에서 shop이 해주고 있다. 그리고 그 안에 2개의 food 요소가 존재한다. 또한 food 요소는 name, sort, cost의 자식 요소를 갖는데 name, sort, cost 요소들은 각자 텍스트 값을 가지고 있는 요소인 것을 알 수 있다. 이렇게 XML 문서에서 요소 이름은 데이터의 내용을 명확히 알려주기 때문에 요소 이름만 보고도 데이터의 내용을 짐작할 수 있다.

    XML 문법

    • 모든 XML 요소는 종료 태그를 가져야 한다.

    - 종료 태그를 닫아주지 않으면 오류가 발생하기 때문에 꼭 태그를 닫아줘야 한다.

    • XML 태그는 대소문자를 구분한다.

    - 다음 예제와 같이 lecture라는 뜻은 동일하지만 대소문자를 구분하기 때문에 서로 다른 요소로 인식한다.

    • XML 태그의 여닫는 순서는 반드시 지켜져야 한다.

    - 먼저 열린 태그는 그 안의 요소들의 태그가 모두 닫혀야 닫힐 수 있다.

    • XML에서 속성값은 반드시 따옴표로 감싸야 한다.
    • XML에서 띄어쓰기를 인식한다.

    - 예제와 같이 코드에서 띄어쓰기를 한다고 해도 HTML에서는 띄어쓰기를 인식되지 않기 때문에 결괏값이 띄어쓰기가 되지 않은 채로 나오지만 XML은 인식하기 때문에 코드에 작성한 그대로 결괏값이 나오는 것을 확인할 수 있습니다.

    XML 엔티티

    XML에서는 미리 정의되어 있는 다섯 개의 특별한 기호가 있다. 이렇게 예약되어 있는 기호를 XML 문서에서 사용하면 XML 파서(해석하는 기계)가 그것을 전혀 다른 의미로 해석한다.

    기호
    엔티티 이름
    16진수 엔티티
    설명
    <
    &lt;
    &#60;
    보다 작은
    >
    &gt;
    &#62;
    보다 큰
    &
    &amp;
    &#38;
    and 기호
    "
    &quot;
    &#34;
    큰따옴표
    '
    &apos;
    &#39;
    작은따옴표

    위의 예시와 같이 요소에 텍스트 값을 입력할 때 표의 첫 번째 기호인 '<'를 사용을 한다면 <는 태그의 시작점으로 생각하기 때문에(= 하나의 태그가 열렸다고 생각하기 때문에) 문자 그대로를 인식하지 못해서 첫 번째 사진처럼 오류가 발생한다.

    그렇기 때문에 요소 값으로 < 문자 의미 그대로를 사용하기 위해서 &lt;라는 엔티티를 사용해서 나타날 수 있다. 

    XML 요소

    요소는 시작 태그에서 종료 태그까지를 요소라고 한다. 또 요소는 시작 태그와 종료 태그 사이에 요소의 "내용"을 텍스트로 작성한다. (다른 자식 요소가 포함될 수 있다)

    예제를 보면 food 요소의 시작 태그와 종료 태그 사이에 name 과 color 2개의 요소가 작성되어 있다. 여기서 food는 name과 color의 부모 요소이고 name 과 color는 food의 자식 요소가 된다.

    XML 속성

    XML 속성은 요소의 추가적인 정보를 제공해 주며 특징을 정의한다.

    예시로 가져온 부분은 이름이라는 데이터를 하나는 요소로 다른 하나는 속성으로 표현한 것이다. 정보의 전달이라는 측면에서 보면 XML 요소로 표현하는 방법과 XML 속성으로 표현하는 방법에 큰 차이는 없지만 속성은 여러 개의 값을 가질 수 없으며 요소처럼 손쉽게 확장할 수 없다는 단점을 가진다. 속성은 XML 트리에 포함되지 않기 때문에 다양한 용도로 활용할 수가 없다.

    XML Namespace (네임스페이스)

    네임스페이스는 요소 간의 중복되는 이름에 대한 충돌을 방지하기 위해 사용한다. 요소의 이름과 속성의 이름을 하나의 그룹으로 묶어서 이름에 대한 충돌을 해결한다.

    XML은 태그를 임의로 지정해서 사용할 수 있기 때문에 XML 문서를 합칠 때 중복되는 이름이 존재할 수 있다. 

    위 예제를 보면 HTML과 XML 둘 다 table 태그를 사용하고 있는 것을 볼 수 있다. HTML에서 table은 표를 나타내는 태그, XML에서 table은 가구를 정의하고 있는 태그로 사용하고 있는데 요소 이름이 같아서 이것을 합칠 때 충돌이 일어난다. 이때 xmlns 속성을 이용해 네임스페이스를 정의해서 충돌을 방지할 수 있다.


    DTD와 XSD란?

    DTD(문서 타입 정의)와 XSD(XML 스키마 정의)는 XML 문서의 구조를 정의하는 언어로 적합한 요소나 속성을 명시하고 XML 구조에 대한 유효성을 점검할 때 사용한다.

    XSD가 등장한 이유

    XSD가 등장한 이유로는 DTD의 단점 때문이다.

    DTD 단점
    XSD 특징
    ① 네임스페이스 지원하지 않음
    ① 네임스페이스 지원
    ② XML 문법을 사용하지 않아 새로운 문법을 사용해야 함
    ② XML 문법을 사용
    ③ 제한된 데이터 타입만 지원
    ③ 정수, 문자열 등 다양한 데이터 타입 지원
    ④ 재사용과 확장 불가능
    ④ 재사용과 확장 쉬움

    요즘에는 DTD를 잘 사용하지 않는다.

    XSD 예제

    XML

    XSD

    위 예제를 보면 XML을 XSD로 표현한 것이다. 먼저 xmlns:xs에 XML 스키마의 네임스페이스를 지정하고 타깃 네임스페이스와 XMLNS에도 네임스페이스를 지정한다. elementFormDefault가 qualified 면 타깃 네임에 선언한 네임스페이스를 사용한다는 의미이다.

    특성
    의미
    xmlns:xsd
    XML 스키마의 네임스페이스 지정
    xmlns
    예약되어 있는 키워드로 네임스페이스 정의
    targetNamespace
    스키마에 정의한 요소나 속성들을 다른 XML 문서에서 식별할 수 있게 네임스페이스 지정
    elementFormDefault
    elementFormDefault 값이 qualified 일 때는 모든 요소는 targetNamespace에서 선언한 네임스페이스를 사용하고 unqualified 일 때는 targetNamespace에서 선언한 네임스페이스를 사용하지 않아도 됨

    그리고 complexType이라는 요소는 복합 타입 요소로 자식 요소를 갖는다는 의미이다. sequence는 name, type, cost가 순서대로 나올 수 있게 하는 지시자이며 name, type, cost는 문자열로 선언된 요소인 것을 알 수 있다. 

    이처럼 XSD는 XML 문서를 구성하는 방법을 지정할 수 있고 XML 문서의 유효성을 검사하거나 코드를 생성하는데 자주 사용된다.


    XSLT란?

    먼저 XSLT를 얘기하기 앞서 XSL을 먼저 설명하겠다.

    XSL은 Extensible Stylesheet Language의 약자로 XML 문서를 표시하기 위한 방법으로 XSLT와 XPATH로 구성된다.

    XSLT는 XSL Transformations을 의미하며 XML 문서를 다른 구조로 변환시키기 위한 언어이다.

    XPATH는 XML 문서의 특정 요소나 속성에 접근하기 위한 경로를 지정하는 언어이다.

    XML 문서

    XSL 문서

    위 예제는 XML 문서와 XSL 문서이다. 위 예제는 HTML로 표현한 것이다. 

    XSL 문서에서 HTML로 표현하기 위해 output에 HTML로 정의를 해주고 template match를 루트로 설정해 주었다. 템플릿은 어디서부터 xsl을 적용시킬지 결정해 주는 역할을 하는데 match 속성에 /를 넣으면 문서 전체를 적용시킨다는 의미로 사용된다.

    그리고 HTML table 구조를 정의하고 for-each 문을 통해서 모든 produce 부분의 요소들에 접근했다. 여기서 for-each는 선택된 각 노드에 반복해서 템플릿을 적용해 주는 것이다. 따라서 select 속성으로 전달받은 XPath 표현식에 따라 선택된 노드의 개수만큼 반복해서 템플릿을 적용하는 것을 의미한다.

    그리고 그 요소들을 value-of로 값을 꺼내어 출력한다. 여기서 value-of는 선택된 노드에서 데이터를 추출하여 해당 위치에 삽입하는 것이다. 

    결과

    그러면 위 사진과 같은 결과를 얻을 수 있다.

    XPATH

    XPATH에는 절대 경로와 상대 경로가 존재한다.

    절대 경로 - /로 시작해서 루트부터 순서대로 탐색하는 것

    상대 경로 - /로 시작하지 않고 기준으로 지점하는 노드부터 순서대로 탐색하는 것

    XPATH 예제

    이 예제에서 책의 제목만 확인하고 싶을 때 지정하는 절대 경로는 

    /bookstore/book/title로 사용할 수 있다. 상대 경로로는 book/title로 사용할 수 있다. 이것의 결괏값으로는 Everyday Italian, Harry Potter, XQuery Kick Start, Learning XML 이 나오는 것을 알 수 있다.

    또 XPath에는 비교연산자를 사용할 수 있다. 만약 책의 가격이 35 이상인 책 제목을 확인하고 싶다면 /bookstore/book[price>35.00]/title이라고 작성하면 35가 넘는 가격의 책 제목이 결괏값(XQuery Kick Start, Learning XML)으로 나오는 것을 확인할 수 있다.


    [인턴 블로그 출처]

     

    XML, DTD, XSD, XSLT, XPATH 정리

    XML 이란? Extensible Markup Language의 약자로 데이터를 저장하고 전달할 목적으로 만들어졌으며, ...

    blog.naver.com


     

     

     

    댓글

Designed by INSPIEN