DTD ELEMENT weatherforecast today tomorrow longrange ELEMENT today

  • Slides: 67
Download presentation

예제: DTD <!ELEMENT weather-forecast (today, tomorrow, long-range)> <!ELEMENT today (#PCDATA)> <!ELEMENT tomorrow (#PCDATA)> <!ELEMENT

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

유효한/유효하지 않은 문서 <!ELEMENT weather-forecast (today, tomorrow, long-range)> <!ELEMENT today (#PCDATA)> <!ELEMENT tomorrow (#PCDATA)>

유효한/유효하지 않은 문서 <!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 valid </today> <tomorrow> showers </tomorrow> <long-range> unsettled </long-range> </weather-forecast> 4 <? xml version="1. 0"? > <weather-forecast> <today> Rain invalid </today> <tomorrow> Showers </tomorrow> </weather-forecast> <? xml version="1. 0"? > <weather-forecast> <today> Rain invalid </today> <long-range> Unsettled </long-range> <tomorrow> Showers </tomorrow> </weather-forecast> 4

예제: 문서 내부에 DTD 포함 문서가 DTD를 포함하고 있음 을 나타냄 <? xml version="1.

예제: 문서 내부에 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> 6

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

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

문서 외부 DTD l DTD는 XML 문서와 별개 파일로 작성 <? xml version="1. 0"

문서 외부 DTD l 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> 14

문서 외부 DTD l DTD와 문서를 별개 파일로 작성하며, 동일한 DTD가 여러 문서 를

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

PUBLIC DTD l PUBLIC DTD 식별자는 URL이 아닌 FDI(Formal Public Identifier) 형식으로 표현 §

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

외부 DTD 포함 문서 l SYSTEM DTD(문서 타입) 이용 <? xml version="1. 0" standalone="no"?

외부 DTD 포함 문서 l 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> 18

DTD 구성 l DTD 구성 요소 § 요소 선언 § 속성 선언 § 개체

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

DTD 요소 선언 (1) l 일반 형식: <!ELEMENT name (regular-expression)> § 정규식은 요소의 타입(요소가

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

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

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

DTD 요소 선언 (3) l 자식 요소 선언 <!ELEMENT element_name (child_1, child_2, child_3, .

DTD 요소 선언 (3) l 자식 요소 선언 <!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)> ]> 22

DTD 요소 선언 (4) l 일반 형식: <!ELEMENT name (regular-expression)> § 정규식 상에 ‘,

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

DTD 요소 선언 (5) l 일반 형식: <!ELEMENT name (regular-expression)> § ‘+’는 ‘one or

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

예제: DTD l 다음 DTD가 기술하는 문서의 구조는? <!ELEMENT qualifications (qualification+, higher-qualification? , institution+)>

예제: DTD l 다음 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)> 28

예제: DTD 포함 문서 l 다음 문서는 유효한가? <? xml version='1. 0'? > <!DOCTYPE

예제: DTD 포함 문서 l 다음 문서는 유효한가? <? 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> </qualification> <higher-qualification/> <institution> <name>Oxford University</name> </institution> <name>MIT</name> </institution> </qualifications> <!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)> 29

예제: DTD 포함 문서 l 다음 문서는 유효한가? <? xml version='1. 0'? > <!DOCTYPE

예제: DTD 포함 문서 l 다음 문서는 유효한가? <? xml version='1. 0'? > <!DOCTYPE qualifications SYSTEM "qualifications. dtd"> <qualifications> <qualification> <year>1999</year> <!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)> <certificate>Baking</certificate> </qualification > <institution> <name>Springfield College</name> </institution> </qualifications> 30

속성 키워드 l 속성 키워드는 속성 값이 반드시 요구되는지(required), 선택적 인지(implied), 상수 값인지(fixed)를 명세

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

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

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

속성 타입 (2) l CDATA로 선언되지 않은 속성은 디폴트 값, 열거 타입, NMTOKENS, IDREF,

속성 타입 (2) l CDATA로 선언되지 않은 속성은 디폴트 값, 열거 타입, NMTOKENS, 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> 38

예제: 속성 <!ELEMENT qualifications (qualification+, higher-qualification? , institution+)*> <!ELEMENT qualification (year, (certificate | diploma

예제: 속성 <!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)> 39

속성을 포함한 문서 l 다음 문서는 유효한가? <? xml version="1. 0"? > <qualifications> <qualification

속성을 포함한 문서 l 다음 문서는 유효한가? <? 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 Mc. Baking Institute of Culinary Technology</name> <!ELEMENT qualifications (qualification+, higherqualification? , 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)> </institution> </qualifications> 40

예제: 일반 개체 l 일반 개체 정의 및 참조 형식 <!ENTITY &개체이름; 개체이름 값>

예제: 일반 개체 l 일반 개체 정의 및 참조 형식 <!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> s 100 </sno> <name> 홍 민 성 </name> <age> 20 </age> <phone> 02 -1299 -8989 </phone> <address> 서울 강남구 신사동 119번지 </address> </students> 47

예제: 파라미터 개체 l 파라미터 개체 정의 및 참조 형식 <!ENTITY % 개체이름 값>

예제: 파라미터 개체 l 파라미터 개체 정의 및 참조 형식 <!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 “서울 강남구 역삼동 대학로 한국대학교”> … 48

XML 문서로부터 DTD 생성(2) l 1단계: XML 문서 수집 <? xml version="1. 0" encoding="utf-8"?

XML 문서로부터 DTD 생성(2) l 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> <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> <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> </movies> 51

XML 문서로부터 DTD 생성(4) l 3단계: 트리 구조 생성 <? xml version="1. 0" encoding="utf-8"?

XML 문서로부터 DTD 생성(4) l 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> 53

XML 문서로부터 DTD 생성(6) l 4단계: DTD를 부분적으로 생성(2/2) § <address> 요소에는 <city>, <gu>,

XML 문서로부터 DTD 생성(6) l 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"> 55

XML 문서로부터 DTD 생성(7) l 5단계: 부분 DTD를 통합 <!ELEMENT movies (movie+)> <!ELEMENT movie

XML 문서로부터 DTD 생성(7) l 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)> 56

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

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

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

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