XML 응용 프로그래밍 5장 DTD 순천향대학교 컴퓨터공학과 2016. 9. 26 하 상 호.

Slides:



Advertisements
Similar presentations
1. 브라우저에서 로 관리창으로 접속해서, 서버 인증서를 설치 할 서버를 선택하고 Manage 버튼을 클릭합니다. 2. Security 탭을 선택한 후, 인증서 Trust.
Advertisements

Chapter 2. Text Patterns 2.1 ~ 2.3 서울시립대 전자전기컴퓨터공학과 데이터마이닝 연구실 G 노준호.
파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Chapter06 폼 HTML5 Programming.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
XML 스키마 ㅎㅎ XML 스키마 개요 XML 스키마 사용법 [실습] XML 스키마 활용.
XML 응용 프로그래밍 3장 XML 문서 제작 기본
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
Entity Relationship Diagram
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
블록 속성 정의와 추출 속성 정의 블록을 만들 객체들에 문자를 사용하여 속성을 설명하는 꼬리표에 해당하는 태그를 정의하는
MySQL 및 Workbench 설치 데이터 베이스.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
5장. 참조 타입.
XML과 데이터베이스 ㅎㅎ XML과 데이터베이스 XML과 데이터베이스 매핑 관계.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
제 2 장 WML 시뮬레이터 및 무선인터넷 서버 설치
[ 고급소프트웨어공학 ] XML parser: DOM G 김지희.
(Extensible Markup Language)
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
공학컴퓨터프로그래밍 Python 염익준 교수.
자바 5.0 프로그래밍.
11장. 1차원 배열.
CHAP 12. 리소스와 보안.
C#.
CXQuery를 사용하는 STREAM XML Filter
Slice&link.
인터넷응용프로그래밍 JavaScript(Intro).
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
Linux/UNIX Programming
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
14장 XML 과 멀티미디어 14.1 XML 14.2 이름 공간 14.3 스타일 시트 14.4 링크 멀티미디어시스템
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
1. 입력 데이터 대학, 학과: 대학이 존재하지 않을 경우 학과명을 대학에 입력 학과명은 공백으로 유지
XML-II (eXtensible Markup Language) DTD/DOM
CHAP 21. 전화, SMS, 주소록.
Linux/UNIX Programming
Linux/UNIX Programming
알고리즘 알고리즘이란 무엇인가?.
에어 PHP 입문.
오라클 11g 보안.
메뉴(Menu) 컴퓨터응용 및 실습 I.
XML 문서 제작 기본 ㅎㅎ 정형식 문서와 유효한 XML 문서 XML 파서 XML 편집기.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
Chapter 10 데이터 검색1.
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
1. 입력 데이터 ② 대학, 학과: 대학이 존재하지 않을 경우 학과명을 대학에 입력 학과명은 공백으로 유지 (하단 참조)
9 브라우저 객체 모델.
ER-관계 사상에 의한 관계데이터베이스 설계 충북대학교 구조시스템공학과 시스템공학연구실
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Numerical Analysis Programming using NRs
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
ㅎㅎ DTD DTD 개념 DTD 문법 [실습] DTD 활용.
 6장. SQL 쿼리.
Docker Study 6~7.
13. 포인터와 배열! 함께 이해하기.
7 생성자 함수.
6 객체.
Presentation transcript:

XML 응용 프로그래밍 5장 DTD 순천향대학교 컴퓨터공학과 2016. 9. 26 하 상 호

DTD란? 문서의 구조에 대한 형식적 정의 기술 DTD는 다음 사항을 기술 요소명으로 사용될 수 있는 것이 무엇인지? 특정 요소가 몇 번 반복될 수 있는지 또는 반복되어야 하는지? 동일 수준에 나타나는 요소들간의 순서는 무엇인지? 요소들이 어떻게 중첩되는지? 특정 요소에 사용될 수 있는, 또는 사용되어야 하는 속성들이 있는지? 그렇다면, 무엇인지? DTD는 문서 내부에 기술되거나 외부에 기술될 수 있다.

예제: DTD 첫번째 요소(weather-forecast)는 루트 다른 요소(today, tomorrow, long-range)는 weather-forecast의 자식 요 소이며, 나열된 순서가 문서에 나타나는 순서임 이러한 요소들이 포함하는 데이터의 타입(PCDATA)을 정의 <!ELEMENT weather-forecast (today, tomorrow, long-range)> <!ELEMENT today (#PCDATA)> <!ELEMENT tomorrow (#PCDATA)> <!ELEMENT long-range (#PCDATA)>

유효한/유효하지 않은 문서 4 invalid valid invalid <!ELEMENT weather-forecast (today, tomorrow, long-range)> <!ELEMENT today (#PCDATA)> <!ELEMENT tomorrow (#PCDATA)> <!ELEMENT long-range (#PCDATA)> <?xml version="1.0"?> <weather-forecast> <today> rain </today> <tomorrow> showers </tomorrow> <long-range> unsettled </long-range> </weather-forecast> <?xml version="1.0"?> <weather-forecast> <today> Rain </today> <tomorrow> Showers </tomorrow> </weather-forecast> <?xml version="1.0"?> <weather-forecast> <today> Rain </today> <long-range> Unsettled </long-range> <tomorrow> Showers </tomorrow> </weather-forecast> invalid valid invalid 4

문서 내부에 DTD 포함 DTD를 문서 내부에 표현 가능 DTD 표현 형식 DTD는 문서의 프롤로그 상에 표현됨 문서의 프롤로그는 선언, 주석, 처리명령어들로 구성 프롤로그 이후에 문서 내용이 작성 DTD 표현 형식 DTD는 DOCTYPE 선언 내부에 표현 ‘rootelement’는 문서의 루트 요소 <!DOCTYPE rootelement[…DTD here..]>

예제: 문서 내부에 DTD 포함 문서가 DTD를 포함하고 있음을 나타냄 <?xml version="1.0" standalone="yes"?> <!DOCTYPE weather-forecast[ <!ELEMENT weather-forecast (today, tomorrow, long-range)> <!ELEMENT today (#PCDATA)> <!ELEMENT tomorrow (#PCDATA)> <!ELEMENT long-range (#PCDATA)> ]> <weather-forecast> <today>Rain</today> <tomorrow>Showers</tomorrow> <long-range>Unsettled</long-range> </weather-forecast>

XML 문서 유효성 검증 브라우저는 XML 문서의 유효성을 자동으로 검증하지 않으며, 이를 위해서 XMLSpy와 같은 도구가 필요. 문서가 well-formed 되어 있는지 검사 주어진 DTD(또는 XML Schema)에 대해서 유효한지 검증

XMLSpy 사용법(1) new 파일 생성 ‘File’ 메뉴를 클릭 ‘New’ 선택

XMLSpy 사용법(2) new 파일 생성 원하는 파일 타입을 선택 ‘ok’ 클릭

XMLSpy 사용법(3) XML 문서 작성 문서 유효성 검증을 위해 DTD나 XML Schema를 선택 그렇지 않으면 ‘Cancel’ 클릭

XMLSpy 사용법(4) XML 문서 작성 DTD 연결시 forecast.dtd

XMLSpy 사용법(5) XML 문서 작성 후 외부 DTD 연결 ‘DTD/Schema’ 선택 ‘Assign DTD’ 클릭

XMLSpy 사용법(6) XML 문서 유효성 검증 ‘XML’ 선택 ‘Validate XML 클릭

문서 외부 DTD DTD는 XML 문서와 별개 파일로 작성 <?xml version="1.0" standalone="no"?> <!DOCTYPE weather-forecast SYSTEM "forecast.dtd"> <weather-forecast> <today> Rain </today> <tomorrow> Showers </tomorrow> <long-range> Unsettled </long-range> </weather-forecast>

문서 외부 DTD DTD와 문서를 별개 파일로 작성하며, 동일한 DTD가 여러 문서 를 검증하는데 사용 가능 validate tuesday-weather.xml validate forecast.dtd monday-weather.xml validate validate wednesday-weather.xml sunday-weather.xml validate validate validate thursday-weather.xml saturday-weather.xml friday-weather.xml

DTD 유형 DTD는 SYSTEM 혹은 PUBLIC SYSTEM DTD는 응용에 맞게 내부적으로 작성된 DTD 해당 파일은 여러분의 지역 시스템에 존재(URL이나 파일 경로로 표현) PUBLIC DTD는 공통 문서 타입 명세 여러 응용에서 사용 전역적으로 알려진 식별자가 존재 예: HTML 문서에 대한 DTD

PUBLIC DTD PUBLIC DTD 식별자는 URL이 아닌 FDI(Formal Public Identifier) 형식으로 표현 FDI 형식: ‘owner//keyword description //language’ ‘language’는 문서가 아닌 DTD에 연관 Ex. HTML 4.01의 public dtd PUBLIC DTD는 SYSTEM 대체 요소도 반드시 표현해야 함 Public dtd가 발견되지 않을 경우에 이 대체 요소가 사용됨 -//W3C//DTD HTML 4.01//EN Owner keyword description language <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN“ "http://www.w3.org/TR/html4/strict.dtd">

외부 DTD 포함 문서 SYSTEM DTD(문서 타입) 이용 <?xml version="1.0" standalone="no"?> <!DOCTYPE weather-forecast SYSTEM "forecast.dtd"> <weather-forecast> <today> Rain </today> <tomorrow> Showers </tomorrow> <long-range> Unsettled </long-range> </weather-forecast>

DTD 구성 DTD 구성 요소 DTD 문서 형식 요소 선언 속성 선언 개체 선언 내부 DTD: 외부 DTD: [!DOCTYPE root_element[internal DTD]> [!DOCTYPE root_element source location1 location2> DTD 문서 정의 키워드 루트 요소 SYSTEM/PUBLIC 키워드 DTD 파일 위치

DTD 요소 선언 (1) 일반 형식: 정규식은 요소의 타입(요소가 사용될 수 있는 방식)을 기술 #PCDATA 자식 요소 포함 #PCDATA로 정의된 요소는 자식 요소 포함 불가 <!ELEMENT name (regular-expression)> <!ELEMENT today (#PCDATA)> <!ELEMENT weather-forecast (today, tomorrow, long-range)> weather-forecast의 자식들

DTD 요소 선언 (2) 자식 요소 선언 <!ELEMENT element_name (child_1, child_2, child_3, ...., child_n)>

DTD 요소 선언 (3) 자식 요소 선언 <!ELEMENT element_name (child_1, child_2, child_3, ...., child_n)> <!DOCTYPE 학생정보 [ <!ELEMENT 학생정보(학번, 이름, 나이, 이메일, 주소지, 전화)> <!ELEMENT 학번(#PCDATA)> <!ELEMENT 이름(#PCDATA)> <!ELEMENT 나이(#PCDATA)> <!ELEMENT 이메일(#PCDATA)> <!ELEMENT 주소지(주소, 우편번호)> <!ELEMENT 주소(#PCDATA)> <!ELEMENT 우편번호(#PCDATA)> <!ELEMENT 전화(#PCDATA)> ]>

DTD 요소 선언 (4) 일반 형식: 정규식 상에 ‘,’로 구분된 요소는 나열된 순서대로 태그가 나타나야 함을 기술 ‘|’는 ‘or‘를 의미: 해당 태그들이 나타날 수 있음을 의미 ‘*’는 ‘zero or more’를 의미 <!ELEMENT name (regular-expression)> <!ELEMENT qualification (certificate, diploma, degree)> <!ELEMENT certificate (#PCDATA)> <!ELEMENT diploma (#PCDATA)> <!ELEMENT degree (#PCDATA)> qualification 요소는 certificate, diploma, degree 요소를 순서대로 포함함 <!ELEMENT qualification (certificate | diploma | degree) > qualification 요소는 certificate, diploma, degree 요소 중에서 어느 하나를 포함함 <!ELEMENT qualifications (qualification*)> qualifications 요소는 0개 이상의 qualification 요소를 포함함

DTD 요소 선언 (5) 일반 형식: ‘+’는 ‘one or more’를 의미 ‘?’는 선택(0 or 1)을 의미 EMPTY 요소 이러한 태그는 내용을 포함하지 않음 보통 속성을 가짐 <!ELEMENT name (regular-expression)> <!ELEMENT qualifications (qualification+)> <!ELEMENT qualifications (qualification+, higher-qualification?)> <!ELEMENT higher-qualification EMPTY>

DTD 요소 선언 (6) 자식 요소 기술시 사용 기호 선언자 기호 설명 , 선언한 요소의 순서대로 자식 요소를 사용 |    , 선언한 요소의 순서대로 자식 요소를 사용    | 앞 또는 뒤의 요소를 사용    ( ) 요소를 그룹으로 선언해서 정의    * 선언한 요소를 0번 이상 사용할 수 있음(0~n)    + 선언한 요소를 1번 이상 사용할 수 있음(1~n)    ? 선언한 요소를 0번 또는 1번 사용할 수 있음(0~1)

DTD 요소 선언 (7) 자식 요소 기술 예 요소 사용 설명 A A라는 요소를 1번 정의하여 사용 A,B (A,B,C) A, B, C 요소를 순차적으로 1번씩 사용 A, (B|C)+ A 요소를 먼저 사용하고, B 또는 C 요소를 1번 이상 사용 A, (B|C)* A 요소를 먼저 사용하고, B 또는 C 요소를 0번 이상 사용

예제: DTD <!DOCTYPE 학생정보[ <!ELEMENT 학생정보 (학생)+ > <!ELEMENT 학생 (학번?, 이름*)> <!ELEMENT 학번 (#PCDATA)> <!ELEMENT 이름 (#PCDATA)> ]> <학생정보> <학생> <학번> S100 </학번> <이름> 고소영 </이름> </학생> <학번> S200 </학번> <이름> 구미호 </이름> </학생정보>

예제: DTD 다음 DTD가 기술하는 문서의 구조는? <!ELEMENT qualifications (qualification+, higher-qualification?, institution+)> <!ELEMENT qualification (year, (certificate | diploma | degree)) > <!ELEMENT higher-qualification EMPTY> <!ELEMENT year (#PCDATA)> <!ELEMENT certificate (#PCDATA)> <!ELEMENT diploma (#PCDATA)> <!ELEMENT degree (#PCDATA)> <!ELEMENT institution (name)> <!ELEMENT name (#PCDATA)>

예제: DTD 포함 문서 다음 문서는 유효한가? <!ELEMENT qualifications (qualification+, higher-qualification?, institution+)> <!ELEMENT qualification (year, (certificate | diploma | degree)) > <!ELEMENT higher-qualification EMPTY> <!ELEMENT year (#PCDATA)> <!ELEMENT certificate (#PCDATA)> <!ELEMENT diploma (#PCDATA)> <!ELEMENT degree (#PCDATA)> <!ELEMENT institution (name)> <!ELEMENT name (#PCDATA)> <?xml version='1.0'?> <!DOCTYPE qualifications SYSTEM "qualifications.dtd"> <qualifications> <qualification> <year>2001</year> <diploma>Electronic Engineering</diploma> </qualification> <year>2005</year> <degree>Computer Science</degree> <higher-qualification/> <institution> <name>Oxford University</name> </institution> <name>MIT</name> </qualifications>

예제: DTD 포함 문서 다음 문서는 유효한가? <!ELEMENT qualifications (qualification+, higher-qualification?, institution+)> <!ELEMENT qualification (year, (certificate | diploma | degree)) > <!ELEMENT higher-qualification EMPTY> <!ELEMENT year (#PCDATA)> <!ELEMENT certificate (#PCDATA)> <!ELEMENT diploma (#PCDATA)> <!ELEMENT degree (#PCDATA)> <!ELEMENT institution (name)> <!ELEMENT name (#PCDATA)> <?xml version='1.0'?> <!DOCTYPE qualifications SYSTEM "qualifications.dtd"> <qualifications> <qualification> <year>1999</year> <certificate>Baking</certificate> </qualification > <institution> <name>Springfield College</name> </institution> </qualifications>

DTD 요소 선언 (8) 요소에 데이터와 자식 요소를 동시에 선언 가능

DTD 요소 선언 (9) ANY 선언 형식: 요소는 모든 데이터(PCDATA, CDATA, 자식 요소, 주석)을 포함 가능 <!ELEMENT element_name ANY>

요소 vs. 속성 언제 속성을 사용할 것인가? 데이터에 대한 부가 정보 제공 디폴트 값 정의 고정된 값(상수) 정의 유효한 값들의 집합 정의 요소에 유일한 ID 설정 (요소간의 참조 제공)

DTD 속성 선언 요소의 속성 리스트 선언 ‘element’는 DTD에 정의된 요소 ‘attribute-specification’은 ‘name type value’의 형식을 가짐 ‘name’은 속성 이름이며, 속성 선언에 단지 한번 나타날 수 있다. 다른 요소에 동일한 속성 이름이 사용 가능 속성 이름은 요소 이름과는 다르게 DTD에서 유일할 필요가 없다 <!ATTLIST element attribute-specification … attribute-specification>

속성 타입 (1) 가장 공통된 속성 타입은 CDATA 형식: 속성 값으로 Character data가 사용 <, >, &, ‘,’같은 특수 문자를 제외한 어떤 문자열도 가능(특수 문자는 개체 참조 문자를 이용) 속성 값은 파싱되지 않음 <!ATTLIST 요소이름 속성이름 CDATA 속성기본값> 속성 타입

속성 키워드 속성 키워드는 속성 값이 반드시 요구되는지(required), 선택적 인지(implied), 상수 값인지(fixed)를 명세 #REQUIRED (compulsory) #IMPLIED (optional) #FIXED (constant value) <!ATTLIST higher-qualification type CDATA #REQUIRED> <!ATTLIST qualification internationally-recognised CDATA #IMPLIED> 36 <!ATTLIST company name CDATA #FIXED "WebHomeCover.com">

속성 키워드 (2) 예제 <!ELEMENT institution (name, location)> <!ATTLIST institution is-university CDATA #REQUIRED> <!ELEMENT name (#PCDATA)>

속성 타입 (2) CDATA로 선언되지 않은 속성은 디폴트 값, 열거 타입, NMTOKEN, NMTOKENS, ID, IDREF, IDREFS 등의 타입을 가질 수 있다. 디폴트 값은 이중인용부호 안에 표현 열거 타입은 가능한 값들을 나열하고, 디폴트 값 명세 가능 <!ATTLIST qualification years-of-study "3"> <!ATTLIST institution is-university (true | false) "false"> <!ATTLIST calendar day-name (Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday) #REQUIRED>

예제: 속성 <!ELEMENT qualifications (qualification+, higher-qualification?, institution+)*> <!ELEMENT qualification (year, (certificate | diploma | degree)) > <!ATTLIST qualification level CDATA #REQUIRED internationally-recognised CDATA #IMPLIED years-of-study CDATA "3"> <!ELEMENT higher-qualification EMPTY> <!ATTLIST higher-qualification type CDATA #REQUIRED> <!ELEMENT year (#PCDATA)> <!ELEMENT certificate (#PCDATA)> <!ELEMENT diploma (#PCDATA)> <!ELEMENT degree (#PCDATA)> <!ATTLIST degree type CDATA #REQUIRED> <!ELEMENT institution (name)> <!ATTLIST institution is-university (true | false) "false"> <!ELEMENT name (#PCDATA)>

속성을 포함한 문서 <!ELEMENT qualifications (qualification+, higher-qualification?, institution+)*> <!ELEMENT qualification (year, (certificate | diploma | degree)) > <!ATTLIST qualification level CDATA #REQUIRED internationally-recognised CDATA #IMPLIED years-of-study CDATA "3"> <!ELEMENT higher-qualification EMPTY> <!ATTLIST higher-qualification type CDATA #REQUIRED> <!ELEMENT year (#PCDATA)> <!ELEMENT certificate (#PCDATA)> <!ELEMENT diploma (#PCDATA)> <!ELEMENT degree (#PCDATA)> <!ATTLIST degree type CDATA #REQUIRED> <!ELEMENT institution (name)> <!ATTLIST institution is-university (true | false) "false"> <!ELEMENT name (#PCDATA)> 다음 문서는 유효한가? <?xml version="1.0"?> <qualifications> <qualification level="3" internationally-recognised ="no"> <year>1999</year> <certificate>Baking</certificate> </qualification > <higher-qualification type="Master of Baking" /> <institution is-university="false"> <name> The McBaking Institute of Culinary Technology</name> </institution> </qualifications>

속성 타입 (3) NMTOKEN(name token) 속성 값에 포함될 수 있는 문자를 알파벳, 숫자, ., -, _, : 등으로 제한되 어 특수 문자나 공백형 문자를 포함 불가 속성 키워드는 #IMPLIED, #REQUIRED만 가능 <!ATTLIST 이름 별명 NMTOKEN # REQUIRED> <이름 별명 = “007빵”> 홍길동 </이름>

속성 타입 (4) NMTOKENS(name tokens) NMTOKEN 값들을 공백으로 구분하여 여러 개를 사용 가능 <!ATTLIST 이름 별명 NMTOKENS # REQUIRED> <이름 별명 = “007빵 _짱구”> 홍길동 </이름>

속성 타입 (5) 속성은 추가로 ID, IDREF, IDREFS 등의 타입을 가질 수 있다. 속성 키워드는 #IMPLIED, #REQUIRED만 가능 타입 설명 ID 속성 값이 문서에서 유일한 값을 가짐 IDREF 속성 값으로 문서에서 선언된 ID 값을 참조 IDREFS 속성 값으로 문서에서 선언된 여러 개의 ID 값을 참조

속성 타입: ID, IDREF, IDREFS 예제 <!ATTLIST 이름 학번 ID # REQUIRED> <!ATTLIST 학과 회장 IDREF # REQUIRED> <!ATTLIST 학과 임원 IDREFS # REQUIRED> <이름 학번 = “s100”> 홍길동 </이름> <이름 학번 = “s200”> 성춘향 </이름> <이름 학번 = “s300”> 장길산 </이름> <학과 회장=“s200”> 컴퓨터공학과</학과> <학과 임원=“s100 s300“> 컴퓨터공학과</학과>

개체(entities) 선언 DTD 내부 또는 외부에 위치한 값에 대한 참조를 정의하는데 사용 개체 이름 개체 값 개체 참조 <!ENTITY whc “WebHomeCover.com"> 개체 이름 개체 값 <company-name>&whc;</company-name> 개체 참조

개체 분류 객체 유형 설명 일반 개체 개체를 DTD에 선언하고, 문서에서 참조 파라미터 개체 내부 개체 문서 내부에 존재하는 개체 외부 개체 외부 파일에 저장된 개체(텍스트, 이미지, 사운드, 동영상 등)

예제: 일반 개체 일반 개체 정의 및 참조 형식 &개체이름; <!ENTITY 개체이름 값> <?xml version=“1.0” encoding=“utf-8”?> <!DOCTYPE students[ <!ELEMENT students (univ,student)> <!ELEMENT univ (#PCDATA)> <!ELEMENT student (sno,name,age,phone,address)> <!ELEMENT sno (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ENTITY univ_address “서울 강남구 역삼동 대학로 한국대학교”> ]> <students> <univ> &univ_address; </univ> <student> <sno> s100 </sno> <name> 홍 민 성 </name> <age> 20 </age> <phone> 02-1299-8989 </phone> <address> 서울 강남구 신사동 119번지 </address> </student> </students> &개체이름;

예제: 파라미터 개체 파라미터 개체 정의 및 참조 형식 <!ENTITY % 개체이름 값> %개체이름; <?xml version=“1.0” encoding=“utf-8”?> <!ENTITY % student_list “(sno,name,age,phone,address)”> <!ELEMENT students (univ,student)> <!ELEMENT univ (#PCDATA)> <!ELEMENT student %student_list; > <!ELEMENT sno (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ENTITY univ_address “서울 강남구 역삼동 대학로 한국대학교”> …

외부 객체 외부 객체 정의 형식 값은 외부 파일명 키워드 SYSTEM이 사용됨 <!ENTITY 개체이름 SYSTEM 값> &개체이름; <!ENTITY 증명사진 SYSTEM “pic.jpg”>

XML 문서로부터 DTD 생성(1) DTD 생성 과정 [1단계] XML 문서 수집 [2단계] XML 문서 분석 [3단계] 트리 구조 작성 [4단계] DTD 문법에 맞게 DTD 부분 작성 [5단계] 부분 DTD를 하나의 DTD로 통합 [6단계] 유효한 XML 문서인지 확인

XML 문서로부터 DTD 생성(2) 1단계: XML 문서 수집 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE movies SYSTEM "movies.dtd"> <movies> <movie> <name> 살인의 추억 </name> <company name="싸이더스"> <address> <시> 서울시 </시> <구> 동작구 </구> <동> 신대방동 </동> </address> <phone> 02-799-1234 </phone> <fax> 02-788-4321 </fax> <url href="http://www.movie.com"/> </company> <hero> 송강호 </hero> <hero> 김상경 </hero> <price unit="원"> 6,000 </price> <date> <year> 2002 </year> <month> 10 </month> <day> 28 </day> </date> </movie> <movie> <name> 자카르타 </name> <company name="연우필름"> <address> <시> 서울시 </시> <구> 강남구 </구> <동> 역삼동 </동> </address> <phone> 02-787-2989 </phone> <url/> </company> <hero> 김상중 </hero> <hero> 임창정 </hero> <price unit="원"> 7,000 </price> <date> <year> 2003 </year> <month> 02 </month> <day> 10 </day> </date> </movie> <movie> <name> 똥개 </name> <company name="진인사필름"> <address> <시> 서울시 </시> <구> 종로구 </구> <동> 내수동 </동> </address> <phone> 02-909-3746 </phone> <fax> 02-287-2938 </fax> <url/> </company> <hero> 정우성 </hero> <price unit="원"> 8,000 </price> <date> <year> 2003 </year> <month> 08 </month> <day> 11 </day> </date> </movie> </movies>

XML 문서로부터 DTD 생성(3) 2단계: XML 문서 분석 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE movies SYSTEM "movies.dtd"> <movies> <movie> <name> 살인의 추억 </name> <company name="싸이더스"> <address> <시> 서울시 </시> <구> 동작구 </구> <동> 신대방동 </동> </address> <phone> 02-799-1234 </phone> <fax> 02-788-4321 </fax> <url href="http://www.movie.com"/> </company> <hero> 송강호 </hero> <hero> 김상경 </hero> <price unit="원"> 6,000 </price> <date> <year> 2002 </year> <month> 10 </month> <day> 28 </day> </date> </movie> XML 문서로부터 DTD 생성(3) 2단계: XML 문서 분석 최상위 요소는 <movies>로 한다. <movies> 요소 안에 <movie> 요소가 여러 번 반복하여 나타날 수 있다. <movie> 요소에는 <name>, <company>, <hero>, <price>, <date>가 자식 요소로 존재한다. <name> 요소는 영화 명칭을 나타낸다. <company> 요소는 name 속성을 가지는데 그 값은 반드시 존재한다. <url> 요소는 href 속성을 가지는데 그 값은 없어도 된다. <company> 요소에는 <address>, <phone>, <fax>, <url>이 자식 요소로 존재한다. <address> 요소에는 <city>, <gu>, <dong>이 자식 요소로 존재한다. <fax> 요소는 회사에 따라서 값을 가질 수도 있다. <url> 요소 데이터는 가지지 않는다. <hero> 요소는 한 명 이상 여러 명이 올 수 있다. <price> 요소는 unit이라는 속성을 가지는데, 그 값은 항상 won이라는 단위만 올 수 있다. <date> 요소는 <year>, <month>, <day>를 자식 요소로 가진다. DTD는 외부 DTD를 만들고 XML에서 선언해서 사용한다.

XML 문서로부터 DTD 생성(4) 3단계: 트리 구조 생성 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE movies SYSTEM "movies.dtd"> <movies> <movie> <name> 살인의 추억 </name> <company name="싸이더스"> <address> <시> 서울시 </시> <구> 동작구 </구> <동> 신대방동 </동> </address> <phone> 02-799-1234 </phone> <fax> 02-788-4321 </fax> <url href="http://www.movie.com"/> </company> <hero> 송강호 </hero> <hero> 김상경 </hero> <price unit="원"> 6,000 </price> <date> <year> 2002 </year> <month> 10 </month> <day> 28 </day> </date> </movie>

XML 문서로부터 DTD 생성(5) 4단계: DTD를 부분적으로 생성(1/2) 최상위 요소는 <movies>로 한다. <movies> 요소 안에 <movie> 요소가 여러 번 반복하여 나타날 수 있다. ==> <!ELEMENT movies (movie+)> <movie> 요소에는 <name>, <company>, <hero>, <price>, <date> 자식 요소가 존재한다. ==> <!ELEMENT movie (name, company, hero+, price, date)> <name> 요소는 영화 명칭을 나타낸다. ==> <!ELEMENT name (#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?)>

XML 문서로부터 DTD 생성(6) 4단계: DTD를 부분적으로 생성(2/2) <address> 요소에는 <city>, <gu>, <dong>이 자식 요소로 존재한다. ==> <!ELEMENT address (city, gu, dong)> <!ELEMENT city (#PCDATA)> <!ELEMENT gu (#PCDATA)> <!ELEMENT dong (#PCDATA)> <fax> 요소는 회사에 따라서 값을 가질 수 있다. <url> 요소 데이터는 가지지 않는다. ==> <!ELEMENT fax ANY> <!ELEMENT url EMPTY> <hero> 요소는 한 명 이상 여러 명이 올 수 있다. ==> <!ELEMENT movie (name, company, hero+, price, date)> ==> <!ELEMENT hero (#PCDATA)> <price> 요소는 unit이라는 속성을 가지는데, 그 값은 항상 won이라는 단위만 올 수 있다. ==> <!ATTLIST price unit CDATA #FIXED "won"> <date>요소는 <year>, <month>, <date>를 자식 요소로 가진다. ==> <!ELEMENT date (year, month, date)> <!ELEMENT year (#PCDATA)> <!ELEMENT month (#PCDATA)> <!ELEMENT date (#PCDATA)> DTD는 외부 DTD를 만들고 XML에서 선언해서 사용한다. ==> <!DOCTYPE movies SYSTEM "movies.dtd">

XML 문서로부터 DTD 생성(7) 5단계: 부분 DTD를 통합 <!ELEMENT movies (movie+)> <!ELEMENT movie (name, company, hero+, price, date)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (address, phone, fax?, url?)> <!ATTLIST company name CDATA #REQUIRED> <!ELEMENT address (city, gu, dong)> <!ELEMENT city (#PCDATA)> <!ELEMENT gu (#PCDATA)> <!ELEMENT dong (#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 "won"> <!ELEMENT date (year, month, year)> <!ELEMENT year (#PCDATA)> <!ELEMENT month (#PCDATA)> <!ELEMENT date (#PCDATA)>

XML 문서로부터 DTD 생성(8) 6단계: XML 문서가 유효한지 검증

DTD 자동 생성(1) XML Copy Editor의 무료 XML 편집기 이용 http://xml-copy-editor.sourceforge.net/

DTD 자동 생성(2) 새 파일 생성 ‘File’ - ‘New’ 선택 ‘XML document’ 선택 ‘OK’ 클릭

DTD 자동 생성(3) XML 문서 작성 ‘File’ – ‘Save As’ 선택 test.xml 문서로 생성

DTD 자동 생성(4) DTD 생성 ‘XML’ – ‘Create Schema’ 선택 ‘DTD’ 선택 ‘OK’ 클릭

DTD 자동 생성(4) 생성된 DTD 저장 ‘File’ – ‘Save As’ 선택 test.dtd로 생성

DTD 자동 생성(4) 작성한 XML 문서에 생성된 DTD 연결

DTD 자동 생성(4) XML 문서의 유효성 검증 ‘XML’ – ‘Validate’ – ‘DTD/XML Schema’ 선택

DTD 생성: XMLSpy 이용(1) XML 문서를 작성한 후 ‘DTD/Schema’ – ‘Generate DTD/Schema’ 선택

DTD 생성: XMLSpy 이용(2) 팝업 창에서 ‘DTD’ 선택 ‘OK’ 클릭 DTD 파일 생성 DTD 파일 이름 입력

DTD 생성: XMLSpy 이용(3) 생성된 DTD를 문서에 연결 단지 팝업 창에서 ‘예’를 선택