Presentation is loading. Please wait.

Presentation is loading. Please wait.

ㅎㅎ DTD DTD 개념 DTD 문법 [실습] DTD 활용.

Similar presentations


Presentation on theme: "ㅎㅎ DTD DTD 개념 DTD 문법 [실습] DTD 활용."— Presentation transcript:

1 ㅎㅎ DTD DTD 개념 DTD 문법 [실습] DTD 활용

2 학습목표 5장. DTD DTD 개념과 필용성 이해 DTD 기본 문법 학습 DTD를 XML문서에 적용하는 실습
유효한 XML 문서 작성을 위한 DTD 작성법 실습

3 DTD(Document Type Definition)
Section 01 DTD 개념 DTD(Document Type Definition) 문서 형태를 정의하는 것 XML 문서 구조를 명시적으로 선언 XML 문서가 유효한 문서인지 확인하는데 사용 DTD 필요성 문서 가독성을 높일 수 있다. 문서를 교환하는데 이식성이 높아진다. 애플리케이션에서 XML문서를 사용할 경우 해당 문서마다 동일한 규칙을 적용할 수 있다. XML문서 제작의 효율성이 높아진다.

4 DTD 사용 방법 내부 DTD Section 01 DTD 개념 내부 DTD, 외부 DTD, 혼합형 DTD
XML 문서 내에 DTD를 선언하는 경우 다른 XML 문서에 적용하기에는 좋지 않은 방법 형식 <!DOCTYPE  root_element [   .....   마크업선언 (원소선언|속성선언|개체선언|노테이션선언| PI | 주석) ]> XML_마크업 css_test.html

5 외부 DTD Section 01 DTD 개념 DTD 문서를 별도 작성하여 XML 문서에 연결
형식 <!DOCTYPE  root_element [   .....   마크업선언 (원소선언|속성선언|개체선언|노테이션선언| PI | 주석) ]> dtd_file.dtd <!DOCTYPE root_element SYSTEM “dtd_file.dtd"> XML_마크업 xml_file.xml

6 혼합형 DTD Section 01 DTD 개념 내부 DTD와 외부 DTD를 혼합하여 적용 형식
<!DOCTYPE  root_element [   .....   마크업선언 (원소선언|속성선언|개체선언|노테이션선언| PI | 주석) ]> dtd_file.dtd <!DOCTYPE root_element SYSTEM “dtd_file.dtd" [   .....   마크업선언 ]> XML_마크업 xml_file.xml

7 Section 02 DTD 문법 DTD 구성요소와 사용 예

8 DTD 문서 작성 Section 02 DTD 문법 문서 타입 선언 형식 DOCTYPE: DTD 문서 정의 키워드
root_element: XML 문서의 최상위(root) 요소 source: “SYSTEM" 혹은 ”PUBLIC“ 키워드 사용 가능 location#: 외부 선언 DTD 파일 위치 [internal DTD]: 내부 선언 DTD 내용 [!DOCTYPE root_element source location1 location2 [internal DTD]>

9 DTD 작성 기본 규칙 Section 02 DTD 문법 DTD는 <?xml ..... ?>로 XML을 선언한다.
DTD 문서 시작은 <!로 시작하고, DTD 문서를 정의하는 지시어인 DOCTYPE을 선언한다. DOCTYPE은 대문자로 표기해야 한다. <!DOCTYPE 다음에는 XML 문서에 최상위 요소 이름을 DTD 문서 이름으로 정의해야 한다. XML 문서의 DTD 선언은 [와 ] 사이에 정의하고, DTD 정의 끝은 >로 종료해야 한다. DTD 정의는 한 문서에 한 번만 정의할 수 있다. 외부 DTD 문서의 정의는 문서 파일의 확장자로 dtd를 사용한다.

10 요소 선언 Section 02 DTD 문법 요소: XML 문서의 기본이 되는 논리적 단위
선언 형식 element_name: 정의하려는 XML 문서의 요소 이름 contents: 요소가 가질 수 있는 데이터형 정의 컨텐츠는 크게 내용 모델과 내용 카테고리로 구분 <!ELEMENT element_name contents>

11 컨텐츠 구분(내용 모델과 내용 카테고리) Section 02 DTD 문법 내용 모델 (contents model)
#PCDATA : 요소는 일반 텍스트만을 포함 자식(children) : 자식요소(child element) 포함 혼합(mixed) : 일반 텍스트 형태(#PCDATA)와 자식요소 포함 내용 카테고리 (contents category) 공백(empty) : 요소에 내용을 갖지 않는 빈 요소 선언 모든(any) : 요소에 내용은 모든 데이터를 포함 할 수 있음

12 문자 데이터 선언 Section 02 DTD 문법 PCDATA는 요소에 문자 데이터(텍스트)를 갖는 요소 선언 형식 사용 예
<! <!ELEMENT element_name (#PCDATA)>element_name contents> <!DOCTYPE 학생정보[ <!ELEMENT 학생정보 (#PCDATA)> ]> <학생정보> 학생들의 정보를 문자데이터(텍스트 형태)로 표현한다. </학생정보>

13 자식 요소 선언 Section 02 DTD 문법 상위요소에 포함되어 있는 하위요소 선언 형식
[그림 5-2] 상위 요소와 자식 요소와의 관계 계층도 <!ELEMENT element_name (child_1, child_2, child_3, ...., child_n)>

14 자식 요소에서 정의할 수 있는 선언자 기호 Section 02 DTD 문법 선언자 기호 설명 무기호
  무기호 특별한 기호가 없으면 지정된 요소가 한 번만 정의    , 선언된 요소의 순서대로 자식 요소를 사용    | 선언된 요소의 사용을 선택적으로 자식 요소를 사용    ( ) 요소를 그룹으로 선언해서 정의    * 선언된 요소가 0번 이상 사용될 수 있음(0~n)    + 선언된 요소가 1번 이상 사용될 수 있음(1~n)    ? 선언된 요소가 0번 또는 1번 사용될 수 있음(0~1) [표 5-2] 자식 요소에서 정의할 수 있는 선언자 기호

15 선언자 기호 사용 예 Section 02 DTD 문법 요소 사용 설명 A A라는 요소가 한번 정의되어 사용 A,B
(A,B,C) A,B,C 요소가 순차적으로 한 번씩 사용 A, (B|C)+ A 요소가 먼저 사용되고, B또는 C 요소가 1번 이상 사용 A, (B|C)* A 요소가 먼저 사용되고, B또는 C 요소가 0번 이상 사용 [표 5-3] 선언자 기호 사용 예

16 혼합형 선언 혼합형 선언을 할 때 주의 사항 Section 02 DTD 문법
요소에 문자 데이터와 자식 요소를 동시에 선언할 때 사용 형식 혼합형 선언을 할 때 주의 사항 문자데이터 선언과(#PCDATA) 함께 정의하는 경우에는 “|”기호만 사용해서 선언 문자데이터 선언(#PCDATA)은 반드시 먼저 선언 혼합 내용의 반복성은 0번 이상(*)만 정의될 수 있음 <!ELEMENT element_name (#PCDATA | child_1, child_2, ..., child_n)>

17 공백 선언 Section 02 DTD 문법 데이터를 가지지 않는 빈 요소를 정의하기 위해 선언
빈 요소를 정의하여 표현하는 방법 <요소></요소> : 시작요소와 끝 요소만을 표현하는 경우 <요소/> : 요소 하나만 표현하는 경우 형식 <!ELEMENT element_name EMPTY>

18 ANY 선언 Section 02 DTD 문법 요소에 대해 조건을 두지 않을 경우에 사용
따라서 요소는 모든 데이터(문자 데이터, 자식요소, 주석, CDATA 섹션)를 포함할 수 있음 형식 <!ELEMENT element_name ANY>

19 속성 선언 Section 02 DTD 문법 요소가 정의되고 속성을 정의하여 사용
요소와 관련된 속성 이름, 속성 타입, 속성 기본값 등을 정의하여 선언 형식 대문자 “ATTLIST"로 시작 요소 이름: XML 문서에서 작성된 요소 이름을 선언한 후 요소에 적용되어질 속성 이름을 지정하여 선언 속성 타입: 열거형, 문자열, 토큰화된 타입 속성_기본값: 초기값을 선언하거나, #FIXED, #IMPLIED, #REQUIRED <!ATTLIST 요소이름 속성이름 속성타입 속성_기본값 데이터_기본값>

20 속성 기본값 Section 02 DTD 문법 속성 기본값 설명 속성 초기값
속성값을 지정하지 않은 경우에는 초기값을 사용하여 정의한다. #FIEXD XML 문서에서 속성이 정의될 수도 있고 안 될 수도 있다. 명시된다면 초기값과 일치해야 한다. 즉 정해진 값 이외의 값은 올 수 없다. #IMPLIED XML 문서에서 속성이 선택적으로 사용된다. 즉 속성이 명시될 수도 있고 명시되지 않을 수도 있다. #REQUIRED 속성이 반드시 명시적으로 사용이 되어야 한다.

21 속성 타입 Section 02 DTD 문법 열거형: DTD 개발자가 정의한 여러 속성값 중 하나 사용
문자열 타입: CDATA 키워드를 사용하여 속성 값을 임의의 문자열로 가질 수 있음 토큰 타입: 키워드를 사용하여 속성값을 사용 토큰 타입 설명 ID 속성값이 유일한 문자 데이터를 의미, 요소를 구분하는데 사용 IDREF 속성값이 문서 내부에서 선언된 ID를 참조 IDREFS 속성값이 문서 내부에서 선언된 여러 ID를 참조 NMTOKEN ID와 유사하고 속성값을 XML 문서 작성 규칙에 맞춰 작성해야 함 NMTOKENS 공백 문자로 구분된 NMTOKEN 값을 여러 개 사용 가능 ENTITY 외부의 이진 데이터 참조 ENTITIES 공백 문자로 구분된 이진 데이터 이름을 여러 개 참조

22 열거형 타입 사용 Section 02 DTD 문법 사용 가능한 값 목록은 속성 이름 다음에 괄호 안에 표현
“|” 구분기호를 사용해서 속성에 사용할 텍스트를 여러 개 나열한 후 이 중 하나만 선택적으로 지정해서 사용 정의 형식 괄호 안에 나열한 속성값 이외의 속성값은 사용 불가 기본 속성값 선언에는 겹따옴표(“”) 사용 <!ATTLIST 요소이름 속성이름(속성값_1 | 속성값_2 .. 속성값_n) “기본속성값”>

23 문자열 타입(CDATA) 사용 Section 02 DTD 문법
속성값에 대해 <, >, &, ‘와 “과 같은 특수문자를 제외하고는 어떤 문자열도 사용 가능 특수문자를 사용할 때는 개체 참조 문자(<, >, $amp;, &apos;, &quot)를 사용 형식 DTD 속성에 지정할 수 있는 문자열로 CDATA만 허용 PCDATA는 지원하지 않음 XML 문서 정의 부분에 CDATA 섹션과는 다른 용도이므로 사용할 때 주의가 필요 <!ATTLIST 요소이름 속성이름 CDATA 속성기본값>

24 ID 타입 사용 Section 02 DTD 문법 XML 문서에서 요소를 식별되어야 할 경우 사용 형식
속성기본값은 #IMPLIED와 #REQUIRED 만 사용가능 한 요소에서는 하나의 ID속성만 정의 ID 타입의 속성값은 반드시 XML 이름 부여 규칙을 따름 <!ATTLIST 요소이름 속성이름 ID 속성기본값>

25 IDREF 타입 사용 Section 02 DTD 문법 ID 속성 타입으로 선언된 속성값 중 하나를 가짐
XML 문서 내에서 정의한 ID 속성 중에 일치하는 ID속성이 있어야 함 기본적으로 ID 타입과 IDREF타입은 1:1의관계 형식 ID 속성 타입을 사용하여 먼저 ID 속성을 정의해야 함 정의된 ID 속성 중에서 IDREF로 정의된 속성값을 지정해야 함 IDREF 타입도 ID 타입과 마찬가지로 속성기본값은 #IMPLIED와 #REQUIRED만 사용 가능 <!ATTLIST 요소이름 속성이름 IDREF 속성기본값>

26 IDREFS 타입 사용 ID속성타입으로 선언된 속성값 중 여러 개 동시 사용 가능
Section 02 DTD 문법 IDREFS 타입 사용 ID속성타입으로 선언된 속성값 중 여러 개 동시 사용 가능 XML 문서 내에서 정의한 ID 속성 중에 일치하는 ID속성이 있어야 함. 기본적으로 ID 타입과 IDREFS타입은 1:n 관계 속성값 구분은 공백으로 구별 형식 ID 속성 타입을 사용하여 먼저 ID 속성을 정의해야 함. 정의된 ID속성중에서 IDREFS로 정의된 속성값을 지정해야 함. IDREFS 타입도 ID 타입과 마찬가지로 속성기본값은 #IMPLIED와 #REQUIRED만을 사용할 수 있음 <!ATTLIST 요소이름 속성이름 IDREFS 속성기본값>

27 NMTOKEN (Name Token) 타입 선언
Section 02 DTD 문법 NMTOKEN (Name Token) 타입 선언 XML의 특수 문자와 공백문자를 포함할 수 없음 속성값은 이름으로 사용할 수 있는 한 단어만 사용 NMTOKEN 속성값은 XML1.0 스펙에 제시된 이름을 작성하는 규칙과 비슷하지만 첫 자리가 꼭 문자일 필요는 없음 형식 속성기본값은 #IMPLIED와 #REQUIRED만 사용 <!ATTLIST 요소이름 속성이름 NMTOKEN 속성기본값>

28 NMTOKENS 타입 사용 Section 02 DTD 문법
NMTOKEN의 복수형태로 IDREFS와 같이 NMTOKEN 값들을 공백으로 구분하여 여러 개를 연속적으로 사용 형식 <!ATTLIST 요소이름 속성이름 NMTOKENS 속성기본값>

29 개체 정의 Section 02 DTD 문법 개체 정의 형식 개체 참조 형식
모든 개체 정의는 대문자 “<!ENTITY”로 시작 “<!”와 “ENTITY”사이에 공백 사용 금지 개체 정의 예와 개체 사용 예 <!ENTITY 개체이름 내용> &개체이름; <!ENTITY 학교주소 “서울 용산구 한남동 산8번지 단국대학교”> &학교주소;

30 Section 02 DTD 문법 문자 개체 문자 단위의 개체는 &# 다음에 문자 코드를 작성하고 끝에 세미콜론(;)을 붙여 코드 끝을 나타냄 문자 코드는 유니 코드 값을 표현하고, 코드 값은 10진수 혹은 16진수를 사용할 수 있다. 단, 16진수를 사용할 때는 문자 코드 값 앞에 16진수의 뜻으로 엑스(x)를 붙인다.

31 Section 02 DTD 문법 개체 분류

32 일반 개체 선언과 사용 Section 02 DTD 문법 매크로와 비슷한 개념으로 사용
DTD에서 일반 개체를 선언하고, XML 문서 내용 중에서 개체 참조를 이용해서 개체를 사용 형식 <!ENTITY 개체이름 개체내용>

33 파라미터 개체 선언과 사용 Section 02 DTD 문법 DTD 내부에서만 사용할 수 있는 개체 [파라미터 개체 정의] 형식
[파라미터 개체 참조] 형식 <!ENTITY % 개체이름 개체내용></형식> %개체이름;

34 외부 개체 선언과 사용 Section 02 DTD 문법 외부 파일에 저장되어 있는 데이터
외부 개체 위치는 시스템 식별자를 통해서 제공 [외부 개체 정의] 형식 [외부 개체 참조] 형식 시스템 식별자로는 “SYSTEM” 키워드 사용 개체내용은 참조할 외부 파일 경로와 파일명을 입력 <!ENTITY 개체이름 SYSTEM 개체내용> &개체이름;

35 노테이션 선언과 사용 Section 02 DTD 문법
XML 문서에서는 노테이션(NOTATION)을 이용해서 이진 데이터를 처리하는 방법을 선언 [노테이션 개체 선언] 형식 [노테이션 공용 개체 선언] 형식 이진 파일을 처리하면 “SYSTEM" 키워드 사용 이진 파일을 공개 식별자로 처리하면 ”PUBLIC" 키워드 사용 <!NOTATION 개체이름 SYSTEM 개체경로> <!NOTATION 개체이름 PUBLIC "개체경로1" "개체경로2“>

36 조건부 섹션 선언과 사용 Section 02 DTD 문법
DTD 문서 내부에서 어떤 조건에 따라서 DTD의 내용을 포함하거나 포함하지 않는 섹션 [조건부 섹션 선언] 형식 [조건적인 DTD 선언] 형식 키워드로는 INCLUDE와 IGNORE를 사용 INCLUDE 키워드로 정의한 부분은 유효성 검사에 대상 IGNORE 키워드로 정의한 부분은 파서가 읽기는 하지만 유효성 검사에서는 제외 <![키워드 ]>

37 영화정보 DTD 작성 1 Section 03 DTD 활용 1단계: XML 문서 수집 2단계: XML 문서 분석
3단계: 트리 구조 작성 4단계: DTD 문법에 맞게 DTD 부분 작성 5단계: 부분 DTD를 하나의 DTD로 통합 6단계: 유효한 XML 문서인지 확인

38 1단계: XML 문서 수집(1/3) [실습] 영화 정보 DTD 작성 (1/9) movies.xml
<?xml version="1.0" encoding="euc-kr"?> <movies> <movie> <movieName>살인의 추억</movieName> <Company name="싸이더스"> <Address> <시>서울시</시> <구>동작구</구> <동>신대방동</동> </Address> <Phone> </Phone> <Fax> </Fax> <URL href=" </Company> <Hero>송강호</Hero> <Hero>김상경</Hero> <Price unit="원">6,000</Price> <date> <year>2002</year> <month>10</month> <day>28</day> </date> </movie> movies.xml

39 1단계: XML 문서 수집(2/3) [실습] 영화 정보 DTD 작성 (2/9) movies.xml
<name>자카르타</name> <company name="연우필름"> <address> <시>서울시</시> <구>강남구</구> <동>역삼동</동> </address> <phone> </phone> <url /> </Company> <hero>김상중</hero> <hero>임창정</hero> <price unit="원">7,000</price> <date> <year>2003</year> <month>02</month> <day>10</day> </date> </movie> movies.xml

40 1단계: XML 문서 수집(3/3) [실습] 영화 정보 DTD 작성 (3/9) <movie> movies.xml
<name>똥개</name> <company name="진인사필름"> <address> <시>서울시</시> <구>종로구</구> <동>내수동</동> </address> <phone> </phone> <Fax> </Fax> <url /> </company> <hero>정우성</hero> <Price unit="원">8,000</Price> <date> <year>2003</year> <month>08</month> <day>11</day> </date> </movie> </movies> movies.xml

41 2단계: XML 문서 분석 [실습] 영화 정보 DTD 작성 (4/9)
최상위 요소는 <movies>로 한다. <movies>요소 안에 <movie>요소가 여러번 반복하여 나타날 수 있다. <movie> 요소에는 <movieName>, <Company>, <Hero>, <Price>, <date> 자식요소가 존재한다. <movieName>요소는 영화 명칭을 나타낸다. <Company> 요소는 “name” 속성을 가지는데 그 값은 반드시 존재한다. <URL> 요소는 “href” 속성을 가지는데 그 값은 없어도 된다. <Company> 요소는 <Address>, <Phone>, <Fax>, <URL>을 자식 요소로 존재한다. <Address>요소는 <시>, <구>, <동>을 자식 요소로 존재한다. <Fax>요소는 회사에 따라서 값을 가질 수도 있고, <URL>은 요소 데이터는 가지지 않는다. <Hero>요소는 한 명이상 여러 명 올 수 있다. <Price>요소는 “unit”이라는 속성을 가지는데, 그 값은 항상 “원”이라는 단위만 올 수 있다. <date>요소는 <연도>, <월>, <일>을 자식 요소로 가진다. DTD는 외부 DTD를 만들고 XML에서 선언해서 사용한다.

42 [실습] 영화 정보 DTD 작성 (5/9) 3단계: 트리 구조 작성 [그림 5-7] 내용 기반 트리 구조도

43 4단계: DTD 문법에 맞게 DTD 부분 작성(1/2)
최상위 요소는 <movies>로 한다. <movies>요소 안에 <movie>요소가 여러번 반복하여 나타날 수 있다. ==> <!ELEMENT movies (movie+)> <movie> 요소에는 <movieName>, <Company>, <Hero>, <Price>, <date> 자식요소가 존재한다. ==><!ELEMENT movie (movieName, Company, Hero+, Price, date)> <movieName>요소는 영화 명칭을 나타낸다. ==><!ELEMENT movieName (#PCDATA)> <company> 요소는 “name” 속성을 가지는데 그 값은 반드시 존재한다. ==> <!ATTLIST Company name CDATA #REQUIRED> <URL> 요소는 “href” 속성을 가지는데 그 값은 없어도 된다. ==> <!ATTLIST URL href CDATA #IMPLIED> <Company> 요소는 <Address>, <Phone>, <Fax>, <URL>을 자식 요소로 존재한다. ==> <!ELEMENT Company (Address, Phone, Fax?, Url?)> <Address>요소는 <시>, <구>, <동>을 자식 요소로 존재한다.

44 4단계: DTD 문법에 맞게 DTD 부분 작성(2/2)
==> <!ELEMENT Address (시, 구, 동)> <!ELEMENT 구 (#PCDATA)> <!ELEMENT 시 (#PCDATA)> <!ELEMENT 동 (#PCDATA)> <Fax>요소는 회사에 따라서 값을 가질 수도 있고, <URL>은 요소 데이터는 가지지 않는다. ==> <!ELEMENT Fax ANY> <!ELEMENT URL EMPTY> <Hero>요소는 한 명이상 여러 명 올 수 있다. ==> <!ELEMENT movie (movieName, Company, Hero+, Price, date)> ==> <!ELEMENT Hero (#PCDATA)> <price>요소는 “unit”이라는 속성을 가지는데, 그 값은 항상 “원”이라는 단위만 올 수 있다. ==> <!ATTLIST Price unit CDATA #FIXED "원"> <date>요소는 <연도>, <월>, <일>을 자식 요소로 가진다. ==> <!ELEMENT date (연도, 월, 일)> <!ELEMENT 연도 (#PCDATA)> <!ELEMENT 월 (#PCDATA)> <!ELEMENT 일 (#PCDATA)> DTD는 외부 DTD를 만들고 XML에서 선언해서 사용한다. ==> <!DOCTYPE movies SYSTEM "movies.dtd">

45 5단계: 부분 DTD를 하나의 DTD로 통합 [실습] 영화 정보 DTD 작성 (8/9)
<!ELEMENT movies (movie+)> <!ELEMENT movie (movieName, Company, Hero+, Price, date)> <!ELEMENT movieName (#PCDATA)> <!ELEMENT Company (Address, Phone, Fax?, Url?)> <!ATTLIST Company name CDATA #REQUIRED> <!ELEMENT Address (시, 구, 동)> <!ELEMENT 시 (#PCDATA)> <!ELEMENT 구 (#PCDATA)> <!ELEMENT 동 (#PCDATA)> <!ELEMENT Phone (#PCDATA)> <!ELEMENT Fax ANY> <!ELEMENT URL EMPTY> <!ATTLIST URL href CDATA #IMPLIED> <!ELEMENT Hero (#PCDATA)> <!ELEMENT Price (#PCDATA)> <!ATTLIST Price unit CDATA #FIXED "원"> <!ELEMENT date (연도, 월, 일)> <!ELEMENT 연도 (#PCDATA)> <!ELEMENT 월 (#PCDATA)> <!ELEMENT 일 (#PCDATA)> movies.dtd

46 [실습] 영화 정보 DTD 작성 (9/9) 6단계: 유효한 XML 문서인지 확인 [그림 5-8] 실행 결과

47


Download ppt "ㅎㅎ DTD DTD 개념 DTD 문법 [실습] DTD 활용."

Similar presentations


Ads by Google