■ 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 |