XML

4.DTD를 이용한 문서 구조 설계

mangji2 2024. 3. 31. 02:11

■ DTD 개요 

? DTD

- 새로운 마크업 언어를 정의 -> 문서/data의 구조를 정의

- xml 문서에서 사용가능한 markup들의 집합 + 사용 규칙 정의

? 문서의 유효성

- 특정 dtd에 따라 작성된 문서 -> 그 dtd에 대해 유효한 문서(유효성 검사)

 

■ DTD 사용 방법

- 문서 유형 선언

:  XML 문서가 어떤 DTD에 의해 작성된 것인지 문서 내에 명시

:외부 DTD(DTD 문서) subset vs 내부 DTD subset

- 내부 DTD Subset

:마크업 언어 관련 DTD가 xml 문서 내부에서 정의

:보통 외부 dtd 재정의 위해 사용됨

:<!DOCTYPE 루트 element[ <!정의----->]>

-외부 DTD Subset

:별도의 문서로 정의 //  확장자 dtd로 사용 // 새로운 마크업 언어를 정의

●system 식별자 이용 

- <!DOCTYPE 루트엘리먼트 SYSTEM "SYSTEM 식별자">

-비공인 단체에서 정의한 외부 DTD 문서 지정경우 사용됨(비공개적 사용)

-특정 웹 서버 상 DTD 문서 존재 경우 -> URL 사용  vs  xml 문서와 동일 위치에 있을 경우 -> 파일 이름만 사용 가능

●public 식별자 이용 

-<!DOCTYPE 루트엘리먼트 PUBLIC "(+-)PUBLIC  식별자" "SYSTEM 식별자"(생략가능)> 

- 공개적 사용 목적으로 기업,기간 정의한 dtd 문서 지정경우 사용됨

-  + :ISO 같은 국제 공인 단체에서 정의한 DTD 경우

    - :비공인 단체에서 정의한 DTD 경우 

- PUBLIC 식별자를 이해하지 못하는 응용프로그램을 위해 SYSTEM 식별자를 추가->

  DTD 문서의 URL 또는 파일 경로를 지정 가능

 

■ XML 문서 유효성 검사

- XML 작성,이용 시 유효성 검사

 

■ DTD 구성요소 

ⓐ element 선언   <!ELEMENT element명 contents(element 데이터 타입)> 

                                                                  ▶contents model: #PCDATA:문자data만 //children:자식 elements  //mixed:둘 다

                                                                  ▶contents category: empty:내용 없음 //any:임의의 구조의 data 포함

※자식 element도 다 선언 // 자식 element 선언한대로 사용 순서 써줘야함 바뀌면 안됨

- 자식 element 표현 방법(children)

, 리스트 연산자: (순서대로)             + 연산자: 한 번 이상

| 선택 연산자: (하나만 선택)             * 연산자: no or unlimited

? 연산자: zero or only one 

- 혼합형 선언(mixed)

: 문자 data, 자식 element 동시 선언 // 반복성은 *으로 정의 // 문자 data 먼저 선언

-<!ELEMENT p(#PCDATA|a|ul|em)*>

-any 선언

:element의 content에 대해 조건을 두지 않을 경우 사용 // 잘 사용되지 않음

ⓑ attribute 선언  <!ATTLIST element명 속성명1 속성유형 속성기본값 ...>

- 속성 기본값: 속성의 초기 값,#FIXED:미리 지정,#IMPLIED: 생략 가능,#REQUIRED: 속성 반드시 기술

- 속성 유형: CDATA TYPE,열거형 TYPE,토큰 TYPE

1. CDATA TYPE

:문자열 사용 // 특수 문자 사용은 개체 참조 이용 

2. 열거형 TYPE

: 열거된 값 중 하나 선택 사용

3. 토큰 TYPE

. ID TYPE : XML 문서에서 element 유일하게 식별해야 할 경우 사용

                 : 속성기본값은 #IMPLIED or #REQUIRED만 사용 가능 (IDREF도)

                 : 각 엘리먼트에서 ID 타입 속성은 하나만 정의 가능 // 중복 불가

.IDREF(S) TYPE : ID 타입으로 선언된 속성이 갖는 값들 중 하나를 가짐

                            : IDREF(S) 타입 속성의 값은 문서 내에 포함된 ID 속성 값들 중에 일치(참조)하는 것이 반드시 있어야 함

                            : ID 타입으로 선언된 속성 값들 중 여러 개를 동시에 참조 가능(S)

ⓒ ENTITY 선언 : xml 구성하는 물리적인 저장 단위

- 사용 목적: xml 문서에서 구성요소의 공유 및 재사용

<개체 분류>

구분 물리적 저장 단위
내부(internal) 같은 dtd 내에 정의
외부(external) 별도의 파일(xml/dtd 문서)로 정의
구분 참조되는 곳
일반(general) xml 문서에서 참조
파라미터(parameter) DTD 문서 참조
구분 개체 내용(일반 개체만 해)
parsed XML parser가 해석 가능한 내용으로 구성
unparsed XML parser가 해석 x 비-문자 data로 구성

-built-in entity 

:미리 정의되어 있는 개체 ex) 개체 참조 

- 내부 일반 parsed entity 

: DTD 내에서 문자 데이터로 선언되고, 별도의 물리적인 파일 형태를 갖지 않음 (내부, parsed)

형식 (DTD) <!ENTITY entity명 "대체 문자 data">
참조 형식 (XML) &entity명;

- 외부 일반 parsed entity

: XML 문서에서 자주 사용되는 엘리먼트들을 별도의 물리적인 파일로 저장한 것 (외부, parsed)

DTD 문서  <!ENTITY kind SYSTEM "c4_1203_1.xml">
entity file (c4_1203_ 1.xml)  <kinds> <kind id="k1"> 컴퓨터</kind>
            <kind id="k2"> 소설</kind> </kinds>
XML 문서 &kind; → 위 entity file의 내용으로 치환

- 외부 일반 unparsed entity

:비-문자 data로 이루어진 물리적 저장 단위를 참조 ex) 음악 파일, 그림 파일, 동영상 파일 등

: 선언 (DTD 선언)

.Nitation과 외부 일반 unparsed entity 선언

. 엘리먼트에 대해 ENTITY 타입의 속성 선언

:참조(XML 문서)

.ENTITY 타입 속성으로 외부 일반 unparsed entity의 이름을 지정(참조)

- 내부 파라미터 entity

:DTD 내용이 일부를 DTD 문서 내에서 참조하기 위해 선언

:DTD 내에서 선언되고 참조되기 때문에 선언되는 위치는 반드시 참조되기 전에 와야 함

형식(DTD) <!ENTITY %(여기 공백 필수)entity명 "대치할 DTD 내용의 일부분">
참조 형식(DTD) %entity명;

- 외부 파라미터 entity 

:DTD 내용의 일부를 DTD 문서와 다른 물리적 저장 단위로 저장한 것

:여러 DTD 문서들에게서 공통 사용 부분을 별도 파일로 저장 -> 외부 parameter entity 선언 후 각 DTD 문서에서 참조 이용

형식(DTD) <!ENTITY % entity명 system "entity 파일 경로">
참조 형식(DTD) %entity명;

ⓓ Notation 선언

- 그림,동영상,음악 등 이진 파일의 포맷을 식별

- MIME type 이용 (예: text/html, image/jpeg, video/mpeg)

-선언: <!NOTATION notation명 SYSTEM(PUBLIC) ("PUBLIC식별자") "SYSTEM 식별자">

-SYSTEM 식별자 -> 응용 program // PUBLIC 식별자 -> MIME TYPE

1. 속성 값 -> NOTAION명 사용

<!ATTLIST 엘리먼트명 속성명 NOTATION ( notation명1|notation명2|··· ) "기본값선언" >

※ ▪ EMPTY 엘리먼트는 NOTATION 타입의 속성을 가질 수 없음

    ▪ 각 엘리먼트는 NOTATION 타입의 속성을 최대 하나만 가질 수 있음

2. 외부 일반 unparsed entity 포맷 지정하기 위해 사용

<!ENTITY entity명 system "entity 파일의 경로" NDATA notation>

- 외부 일반 unparsed entity를 정의하기 위해서는 그 entity가 어떤 포맷으로 저장되어 있는지를 선언해야 함

ⓔ 조건부 Section 선언

-DTD문서 내부에서 어떤 조건에 따라 DTD 내용을 포함하거나 포함하지 않도록 하기 위해 사용

-조건부 SECTION 선언 형식

더보기

<![INCLUDE [적용시킬 DTD 내용]]> // 유효성 검사 대상

<![IGNORE[무시할 DTD 내용]]> // XML parser가 읽기는 하지만 유효성 검사에서 제외

■DTD 사용 예 : BOOK MARKUP LANGUAGE

'XML' 카테고리의 다른 글

7.DOM  (0) 2024.04.25
6.XML Schema  (0) 2024.04.13
5.XML Namespaces  (0) 2024.04.12
XML  (0) 2024.03.29