KyungHwan's etc.

DTD(Document Type Definition) 본문

XML

DTD(Document Type Definition)

KyungHwan_0 2018. 5. 31. 14:09

DTD(Document Type Definition)

  • 문서 타입 정의(DTD)는 XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의한다.

  • DTD는 엔티티를 정의할 수 있으며, 빠른 개발을 위한 내부 DTD를 사용 할 수 있다.

  • 이러한 DTD는 XML 문서 내부에 명시할 수도 있으며, 별도의 파일로 분리할 수도 있다.

<!DOCTYPE html> 

HTML5

선언 형태, 현재 가장 많이 사용하고 웹 표준 형식.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTML 1.0 Transitional (호환모드)

국내에서 가장 많이 사용하는 DOCTYPE. 하위 브라우저 호환성 때문.

-> DOCTYPE 선언은 어떤 버전의 HTML 문서를 작성했는지 브라우저에게 알려주는 것으로, 브라우저가 문서를 오류없이 렌더링하도록 한다. HTML 버전에 따라 사용되는 태그와 속성들이 조금씩 다르기 때문에 꼭 선언해주는 것이 좋다. DOCTYPE은 HTML 문서가 시작되는 맨 위에 선언된다.

1. DTD 사용 목적

l DTD를 사용하여 새로운 XML 문서의 구조를 정의함으로써 새로운 문서 타입을 만들 수 있다..

l 이렇게 생성된 DTD는 새로운 문서 타입을 이용한 데이터의 교환에서 표준으로써 활용된다.

l 또한, 응용 프로그램은 DTD의 정의에 따라 XML 문서의 구문 및 구조에 대한 유효성을 검사할 수 있다.

2. DTD 문법

  • DTD는 <!DOCTYPE 으로 시작하여 루트(root) 요소는 XML 파서(parser)에 명시된 루트 요소부터 파싱(parsing)을 시작하고 알려준다.

  • 만약에 DTD 식별자가 외부 주소를 가리키고 있으면, 그것을 외부 서브셋**(subset)**이라고 한다.

  • 괄호([]) 안에는 내부 서브셋(subset)이라 불리는 추가로 선언한 엔티티(entity)의 리스트가 존재합니다.

3. 내부 서브셋(subset)

DTD가 XML 파일 내부에서 선언되면, 그 선언은 반드시 <!DOCTYPE>안에 위치해야 한다.

위의 예제에서 !DOCTYPE food 는 이 문서의 루트(root) 요소가 <food>요소라는 사실을 명시한다.

  • !ELEMENT food는 <food>요소가 <name>, <type>, <cost>의 세 요소를 반드시 포함해야 한다는 사실을 명시한다.

  • !ELEMENT name은 <name>요소가 #PCDATA 타입의 요소라는 사실을 명시한다.

  • !ELEMENT type은 <type>요소가 #PCDATA 타입의 요소라는 사실을 명시한다.

  • !ELEMENT cost은 <cost>요소가 #PCDATA 타입의 요소라는 사실을 명시한다.

4. DTD 외부 서브셋(subset)

  • DTD가 XML파일 외부에서 선언되면 <!DOCTYPE>은 반드시 외부 DTD파일의 주소 정보를 포함해야 한다.

5. XML 문서의 구성 요소

  • DTD에서는 모든 XML 문서가 다음과 같은 구성 요소로 이루어져 있다고 본다.

1. 요소(elements)

2. 속성(attributes)

3. 엔티티(entities)

4. PCDATA

5. CDATA

1)요소(elements)

  • DTD에서 요소(Elements)란 XML문서를 구성하는 가장 중요한 요소이다.

2)속성(attributes)

  • DTD에서 속성은 요소에 대한 추가적인 정보를 제공하여, 해당 요소의 특징을 정의한다.

3)엔티티(entities)

  • XML에서는 예약되어 있는 다섯 개의 특별한 기호가 있는데, 이렇 게 예약 되어 있는 기호를 XML 문서에서 사용하면 XML 파서는 다른 의미로 해석한다.

  • 예약된 기호를 기존에 사용하던 의미 그대로 사용하기 위해 만든 문자셋을 엔티티(entity) 라고 한다.

  • DTD 에서 내부 엔티티는 ENTITY 구문으로 작성할 수 있다.

  • 문서 외부에 존재하는 경우 외부 엔티티는 다음과 같이 SYSTEM 키워드를 사용한다.

4) PCDATA

  • PCDATA(Parsed Character DATA)란 XML 파서에 의해 분석될 문자 데이터를 의미한다.

  • 간단히 말해 XML 요소의 시작 태그와 종료 태그 사이에 위치한 텍스트를 PCDATA라고 생각하면 된다.

5) CDATA

  • CDATA(Character DATA)란 XML 파서가 분석하지 않는 문자 데이터를 의미한다.

  • DTD에서 요소의 콘텐츠에는 PCDATA만이 올 수 있으며, 속성의 속성값으로는 CDATA만이 올 수 있다.


실전 DTD 정의 예제

=>위문서를* DTD로** 정의하면


<?xml version="1.0" encoding="utf-8" ?>
<!ELEMENT 훈련일지 (훈련기관정보,훈련과정,결제정보,출결사항,훈련사항,지시사항,특기사항)>
<!ELEMENT 훈련기관정보 (#PCDATA|기관명)*>
<!ELEMENT 기관명 (#PCDATA)>
<!ELEMENT 훈련과정 (과정명,훈련일)>
<!ELEMENT 과정명 (#PCDATA)>
<!ELEMENT 훈련일 (년,월,일,요일,금일차,전체일차)>
<!ELEMENT 년 (#PCDATA)>
<!ELEMENT 월 (#PCDATA)>
<!ELEMENT 일 (#PCDATA)>
<!ELEMENT 요일 (#PCDATA)>
<!ELEMENT 금일차 (#PCDATA)>
<!ELEMENT 전체일차 (#PCDATA)>
<!ELEMENT 결제정보 (담당강사,관리자)>
<!ELEMENT 담당강사 (#PCDATA)>
<!ELEMENT 관리자 (#PCDATA)>
<!ELEMENT 출결사항 (계좌제적용자,일반인)>
<!ELEMENT 계좌제적용자 (재적,출석,결석,지각,조퇴)>
<!ELEMENT 일반인 (재적,출석,결석,지각,조퇴)>
<!ELEMENT 재적 (#PCDATA)>
<!ELEMENT 출석 (#PCDATA)>
<!ELEMENT 결석 (#PCDATA)>
<!ELEMENT 지각 (#PCDATA)>
<!ELEMENT 조퇴 (#PCDATA)>
<!ELEMENT 훈련사항 (교시별훈련사항)+>
<!ELEMENT 교시별훈련사항 (교시,훈련과목,담당교사,훈련내용,비고)>
<!ELEMENT 교시 (#PCDATA)>
<!ELEMENT 훈련과목 (#PCDATA)>
<!ELEMENT 담당교사 (#PCDATA)>
<!ELEMENT 훈련내용 (#PCDATA)>
<!ELEMENT 비고 (#PCDATA)>
<!ELEMENT 지시사항 (#PCDATA)>
<!ELEMENT 특기사항 (지각자,결석자,조퇴자*,기타사?)>
<!ELEMENT 지각자 (#PCDATA)>
<!ELEMENT 결석자 (#PCDATA)>
<!ELEMENT 조퇴자 (#PCDATA)>
<!ELEMENT 기타사항 (전달사항,외출자)>
<!ELEMENT 전달사항 (#PCDATA)>
<!ELEMENT 외출자 (#PCDATA)>

=>이 DTD 형식대로를 XML을 작성하면


<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE 훈련일지 SYSTEM "훈련일지.dtd">
<훈련일지>
  <훈련기관정보>
    <기관명>KH정보교육원</기관명>
  </훈련기관정보>
  <훈련과정>
    <과정명>필승취업</과정명>
    <훈련일>
      <년>2011</년>
      <월>5</월>
      <일>14</일>
      <요일>금</요일>
      <금일차>54</금일차>
      <전체일차>100</전체일차>
    </훈련일>
  </훈련과정>
  <결제정보>
    <담당강사>
      확인
    </담당강사>
    <관리자>
      확인
    </관리자>
  </결제정보>
  <출결사항>
    <계좌제적용자>
      .
  .
  .

  • 즉 DTD에 정의한 데이터 정의대로 XML에 데이터값을 지정할 수 있다.

  • DTD는 DB에 메타데이터 같은 느낌

Reference 

https://www.w3schools.com/

http://tcpschool.com/

'XML' 카테고리의 다른 글

JSTL XML Tag  (0) 2018.05.31
XML DOM  (0) 2018.05.31
XML( EXtensible Markup Language) Reference Document  (0) 2018.05.31
Comments