1 / 75

간단한 DTD 작성

간단한 DTD 작성. <?xml version="1.0" encoding= “ euc-kr"?> <memo> <body> <p> 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2 시부터 시작될 예정으로 있으니 꼭 참석하여 주시 기 바랍니다 . </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시 기 바랍니다 . </p> </body> </memo>. 첫번째 문서를 위한 DTD. DTD 를 XML 문서에 포함시킬 경우.

gustav
Download Presentation

간단한 DTD 작성

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 간단한 DTD 작성

  2. <?xml version="1.0" encoding=“euc-kr"?> <memo> <body> <p> 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시작될 예정으로 있으니 꼭 참석하여 주시 기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시 기 바랍니다. </p> </body> </memo>

  3. 첫번째 문서를 위한 DTD • DTD를 XML 문서에 포함시킬 경우 <!ELEMENT memo (body) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) > <!DOCTYPE 루트 요소명 [ DTD의 내용 ]>

  4. DTD가 추가된 XML 문서 <?xml version="1.0" encoding=“euc-kr"?> <!DOCTYPE memo [ <!ELEMENT memo (body) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) > ]> <memo> <body> <p> 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시작될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시기 바랍니다. </p> </body> </memo>

  5. body와 p 요소를 추가 <?xml version="1.0" encoding=“euc-kr"?> <memo> <body> <p> 컴퓨터 시스템 구축을 위한 1차 회의가 내일 오후 2시부터 시작 될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시기 바랍니다. </p> </body> <body> <p> 컴퓨터 시스템 구축을 위한 2차 회의가 모레 오후 4시부터 시작 될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시기 바랍니다. </p> </body> </memo>

  6. DTD 변경 • 하나 이상의 body 요소가 올 수 있도록 변경된 DTD <!ELEMENT memo (body+) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) >

  7. body와 동일한 수준으로 p 요소 사용 <?xml version="1.0" encoding=“euc-kr"?> <!DOCTYPE memo [ <!ELEMENT memo (body) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) > ]> <memo> <body> <p> 컴퓨터 시스템 구축을 위한 1차 회의가 내일 오후 2시부터 시작 될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> </body> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시기 바랍니다. </p> </memo>

  8. p 요소가 없는 경우 <?xml version="1.0" encoding="EUC-KR"?> <!DOCTYPE memo [ <!ELEMENT memo (body) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) > ]> <memo> <body> </body> </memo>

  9. 확장된 XML 문서 <?xml version="1.0" encoding=“euc-kr"?> <memo> <header> <to> <heading> To: </heading> <name> 홍길동 </name> </to> <from> <heading> From: </heading> <name> 장길산 </name> </from> <date> 2000. 8. 15. </date> </header> <body> <p> 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시작될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시기 바랍니다. </p> </body> </memo>

  10. 확장된 XML 문서를 위한 DTD <!ELEMENT memo (header, body) > <!ELEMENT header (to, from, date) > <!ELEMENT to (heading, name) > <!ELEMENT from (heading, name) > <!ELEMENT heading (#PCDATA) > <!ELEMENT name (#PCDATA) > <!ELEMENT date (#PCDATA) > <!ELEMENT p (#PCDATA) > <!ELEMENT body (p*) >

  11. header 요소를 변경한 DTD <!ELEMENT memo (header, body) > <!ELEMENT header ((to, from, date) | (date, to, from)) > <!ELEMENT to (heading, name) > <!ELEMENT from (heading, name) > <!ELEMENT heading (#PCDATA) > <!ELEMENT name (#PCDATA) > <!ELEMENT date (#PCDATA) > <!ELEMENT heading (#PCDATA) > <!ELEMENT p (#PCDATA) > <!ELEMENT body (p*) >

  12. DTD 작성 연습 <?xml version="1.0" encoding="UTF-8"?> <faq> <info> <subject> XML </subject> <author> 강감찬 </author> <email> kang@janggoon.co.kr </email> <date> 2000. 7. 22. </date> </info> <part> <q> <qtext> What is XML?</qtext> <a> SGML light. </a> </q> <q> <qtext> What can I use it for?</qtext> <a> Anything. </a> </q> </part> </faq>

  13. DTD (Document Type Definition)작성법 DTD는 문서 타입 정의(Document Type Definition)를 나타낸다. DTD는 엘리먼트 , 속성, 표기법, 문서에 포함된 엔터티의 목록 뿐만 아니라 각 요소 간의 관계도 알려준다. 즉, DTD는 문서의 구조에 사용되는 규칙의 집합을 지정한다.

  14. <?xml version=“1.0” encoding=“UTF-8”?> <!DOCTYPE GREETING [ <!ELEMENT GREETING (#PCDATA)> ]> <GREETING> Hello XML! </GREETING > DTD (Document Type Definition)작성법 프롤로그 (prolog):XML 선언 Document Type Declarations 루트 엘러먼트

  15. DTD (Document Type Definition)작성법 • 첫 번째로 할 일은 루트 엘리먼트를 구분하는 것이다. • <!DOCTYPE memo [ • ]> • 단순히 루트 태그가 memo라는 사실을 알려 준다. • memo 엘리먼트가 무엇을 포함할지, 무엇을 포함하지 • 않을 지지에 관해서는 말하지 않는다.

  16. 요소 정의 • 요소 정의 문법 <!ELEMENT 요소명 내용> <!ELEMENT content (#PCDATA)> • 자식 목록 <!ELEMENT memo (content)> <!ELEMENT content (#PCDATA) 각 엘리먼트는 다른 <!ELEMENT> 선언에서 자식으로서 사용되더라도 그 자신의 <!ELEMENT>를 선언에 정확히 한 번은 선언되어야 한다.

  17. 요소 정의 • SEQUENCE • <!ELEMENT memo (header, body, body)> • 콤마로 분리된 자식 엘리먼트의 목록을 시퀀스라 부른다. • memo 엘리먼트 다음에 정확히 하나의 header 엘리먼트와 • 두 개의 body 엘리먼트가 그 순서대로 나타나야 한다. • 하나 혹은 하나 이상의 자식 엘리먼트 • (+) 기호를 추가해서 주어진 엘리먼트를 하나 이상 추가하기 원한다는 것을 나타낼 수 있다. • <!ELEMENT memo (header, body+)> • 자식 엘리먼트가 없거나 많이 가지고 있는 경우 • <!ELEMENT memo (header, body*)> • 자식 엘리먼트가 없거나 하나일 경우 • <!ELEMENT memo (header, body?)>

  18. 요소 정의 • 선택(CHOICE) : | • 여러 자식 엘리먼트 중 하나의 엘리먼트를 선택할 때 사용 • <!ELEMENT PAYMENT (CASH | CRED_CARD | CHECK)> • 괄호가 있는 자식 엘리먼트 • 그룹핑할 때 사용 • <!ELEMENT DOCUMENT (TITLE, SIGNATURE?)> • <!ELEMENT BODY (PARAGRAPH | IMAGE)*> • 혼합된 키워드(MIXED CONTENT) • <!ELEMENT TEAM (#PCDATA | CITY | NAME | PLAYER)*> • 콤마, 물음표,프러스 기호 사용 불가 • EMPTY 키워드 <!ELEMENT student EMPTY> • <student> </student> or <student />

  19. 요소 정의 • <!ELEMENT memo (header, body) > • ANY 키워드 <!ELEMENT memoANY> <?xml version=“1.0”?> <!DOCTYPE memo [ <!ELEMENT memo ANY> <!ELEMENT content (#PCDATA)> ]> <memo> <content>좋은 내용</content> 좋은 내용입니다. 좋은 일이 있으시기를… </memo>

  20. 요소 생성에 사용되는 기호 • | : OR 조건 • , : 명시된 순서대로 나타남 • ? : 0번 또는 한번 나타남 • * : 0번 또는 한번 이상 나타남 • + : 한번 이상 나타남 • () : 그룹 요소

  21. XML의 데이터 타입 • #PCDATA • parsed character data • <, >, & 기호가 없는 데이터 • 일반적인 마크업 문자 데이터 • 모든 단말 노드는 #PCDATA로 정의 • CDATA • character data • <, >, & 기호가 있는 데이터 • 속성의 내용을 CDATA로 정의

  22. #PCDATA의 문제점 • XML에서는 모든 정보를 #PCDATA로 정의 • 특수한 데이터 타입으로 지정할 수 없음 • 스트링, 정수, 통화 등으로 지정 불가능 • 데이터베이스와 연동시 올바른 데이터인지 검사하는 것을 파서 대신 응용 프로그램에서 담당 • 응용 프로그래머에게 과도한 부담을 줌 • 보다 강력한 데이터 타입을 지원하도록 하자는 제안이 나오고 있음 • 예 : XML Schema를 사용하여 다양한 데이터 타입 지원

  23. CDATA가 포함된 XML 문서 • <![CDATA 로 시작하고 ]]> 로 끝나야 함 • CDATA 문자 데이터 중에 ]]> 이 포함되어 있으면 선언된 것과 다른 결과가 발생할 수 있음 • 주석이 작동되지 않음 <?xml version="1.0" encoding="EUC-KR"?> <doc> <![CDATA[#@^% <<<>>> & <<<<<<< >>>>>>>]]> </doc> <![CDATA[ <?xml version="1.0" encoding="EUC-KR"?> <GREETING> Hello XML! </GREETING> ]]>

  24. DTD 공유하기 • <!DOCTYPE 루트엘리먼트이름 SYSTEM “DTD_URL”> • <!DOCTYPE memo SYSTEM “memo.dtd”> • 원격 URL에 있는 DTD • <!DOCTYPE memo SYSTEM “http://edu.joongang.co.kr/dtd/memo.dtd”> • 현재 디렉토리에 대한 상대 URL 사용 가능 • <!DOCTYPE memo SYSTEM “/xml/dtd/memo.dtd”> • <!DOCTYPE memo SYSTEM “../memo.dtd”>

  25. DTD 공유하기 • 공개 DTD • SYSTME 키워드는 한명의 저작 그룹에 의해 사용되는 개인적인 DTD를 위한 것이다. • 개발 조직 등에서 사용하기 위해 설계된 DTD는 PUBLIC 키워드를 사용한다. • <!DOCTYPE 루트엘리먼트이름 PUBLIC “DTD이름”“DTD_URL”> • PUBLIC은 그 DTD가 널리 사용될 것을 의도하고 만들어졌다는 것을 나타내는 키워드이다. • DTD이름은 이 DTD와 연결된 이름이다. • DTD_URL은 유명한 리파지터리에서 이름을 가지고 DTD를 찾을 수 없을 경우에 DTD를 찾기 위해서 사용되는 절대 URL이나 상대 URL이다.

  26. DTD 공유하기 • DTD 이름 • ISO : ISO 표준 • + : ISO가 아닌 표준기구 • - : 어떤 표준기구에서도 승인하지 않았다. • DTD의 소유자 이름 • DTD가 기술하는 문서의 종류 • 언어속성 • <!DOCTYPE memo PUBLIC • “-//joongang//DTD personal memo//EN” • “http://edu.joongang.ac.kr/dtds/memo.dtd”> • <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML//EN”>

  27. 내부DTD 서브셋과 외부 DTD 서브셋 • 특정한 문서가 그 사이트의 다른 페이지와 다른 구조를 가지고 있다면, 그 구조를 독립된 DTD에 정의하는 것보다는 그 문서 자체에 정의하는 것이 더 유용하다. • <?xml version=“1.0”> • <!DOCTYPE document SYSTEM “memo.dtd” [ • <!ELEMENT document (title,memo,signature)> • <!ELEMENT title (#PCDATA)> • <!ELEMENT signature (#PCDATA)> • ]>

  28. XML의 Entity(개체) • XML 문서의 특정한 부분을 담고 있는 저장 단위이다.

  29. XML의 Entity(개체) • Entity(개체) 구분 • 내부 엔터티(Internal Entity) • 외부 엔터티(External Entity) • 일반 엔터티(General Entity) • 파라미터 엔터티(Parameter Entity) • 파싱된 엔터티(Parsed Entity) • 파싱되지 않은 엔터티(Unparsed Entity)

  30. XML의 Entity(개체) • Entity(개체) 구분 • 내부 일반 엔터티 • #PCDATA로 표현하지 못하는 특수 기호 입력 • 같은 문자 데이터를 중복해서 입력하는 수고를 덜어 줌 • (입력하기 힘든 텍스트나 널리 사용되는 텍스트의 생략형)

  31. 내부 일반 Entity(개체) 정의 • 내부 일반 Entity(개체) 정의 문법 <!ENTITY 개체명 개체정의> 개체정의는 대체될 문자열이다. • 일반 엔터티(개체) 사용법 &개체명; • 예 <!ENTITY SchoolDept “중앙일보 webmaster”> <!ENTITY hearts "&#x2661;">

  32. 미리 정의된 일반 엔터티 레퍼런스 선언 • <!ENTITY lt "&#38;#60;"> • <!ENTITY gt "&#62;"> • <!ENTITY amp "&#38;#38;"> • <!ENTITY apos "&#39;"> • <!ENTITY quot "&#34;">

  33. 내부 일반 Entity(개체) 사용 예 <?xml version="1.0" encoding=“euc-kr"?> <!DOCTYPE memo [ <!ENTITY SD "중앙일보 WEBMASTER"> <!ELEMENT memo (body) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) > ]> <memo> <body> <p> &SD;에서 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시 작될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 &SD;로 알려 주시기 바랍니다. </p> <p> 회의 장소는 &SD; 회의실입니다. </p> </body> </memo>

  34. 특수문자 사용 예 <?xml version="1.0" encoding="EUC-KR"?> <!DOCTYPE memo [ <!ENTITY hearts "&#x2661;" > <!ENTITY spades "&#x2660;" > <!ELEMENT memo (body) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) > ]> <memo> <body> <p> &hearts; 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시 작될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> &spades; 회의 참석 여부를 오늘 중으로 알려 주시기 바랍니다. </p> </body> </memo>

  35. 내부 일반 Entity(개체) 요약 • 모든 엔터티 레퍼런스가 그 값으로 대체된 후에 문서에 대한 검증이 이루어진다. • 텍스트 변경이 용이한 장점이 있다. • 문서들이 하나의 DTD를 공유할 때 유용하다.

  36. XML의 Entity(개체) • Entity(개체) 구분 • 외부 일반 엔터티 • 메인 파일의 밖에 있는 데이타이다. • 여러 독립된 파일로부터 XML 문서를 구축하게 해준다.

  37. 외부 일반 Entity(개체) 정의 • 외부 일반 Entity(개체) 정의 문법 <!ENTITY 개체명 SYSTEM “URI”> • 일반 엔터티(개체) 사용법 &개체명;

  38. 외부 일반 Entity(개체) 사용 예 <?xml version="1.0" encoding="EUC-KR"?> <!DOCTYPE memo [ <!ENTITY SD "중앙일보 WEBMASTER"> <!ELEMENT memo (body,signature) > <!ELEMENT body (p+) > <!ELEMENT p (#PCDATA) > <!ELEMENT signature (position,name,organization)> <!ELEMENT position (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT organization (#PCDATA)> <!ENTITY sig SYSTEM “signature.xml”> ]> <memo> <body> <p> &SD;에서 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시 작될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 &SD;로 알려 주시기 바랍니다. </p> <p> 회의 장소는 &SD; 회의실입니다. </p> </body> &sig; </memo>

  39. 외부 일반 Entity(개체) 사용 예 signature.xml <?xml version="1.0" encoding=“euc-kr"?> <signature> <position>Chief </position> <name>Na</name> <organization> Joongang Academy</organization> </signature>

  40. XML의 Entity(개체) • Entity(개체) 구분 • 내부 파라미터 엔터티 • 일반 엔터티는 DTD의 일부가 아니라 문서의 일부분이었다. • 파라미터 엔터티 레퍼런스는 DTD에서만 나타난다. • 파라미터 엔터티 레퍼런스는 퍼센트 기호(%)로 시작한다. • 파라미터 엔터티 레퍼런스는 자식 엘리먼트나 속성을 공유할 때 상당히 유용하다. • 파라미터 엔터티 레퍼런스는 사용되기 전에 선언되어야만 한다. • 파라미터 엔터티 레퍼런스는 외부 DTD 안에서만 나타나야 한다. • 내부 DTD 에서는 선언의 밖에서만 사용될 수 있다.

  41. 파라미터 Entity(개체) 정의 • 파라미터 Entity(개체) 정의 문법 <!ENTITY % 개체명 개체정의> 개체정의는 대체될 문자열이다. • 파라미터 엔터티(개체) 사용법 %개체명;

  42. 파라미터 Entity(개체) 정의 • 예 • <!ENTITY king “The Great King Alexzander!”> • <!ENTITY word “Our king is &king;”> • <!ENTITY % PCD “(#PCDATA)”> • <!ELEMENT name %PCD;> • <!ELEMENT position %PCD;>

  43. 파라미터 Entity(개체) 정의 • 예 • <!ELEMENT paragraph • (person | degree |product | animal | ingredient)*> • <!ELEMENT cell • (person | degree |product | animal | ingredient)*> • <!ELEMENT heading • (person | degree |product | animal | ingredient)*> • <!ENTITY % inlines “(person | degree |product | animal | ingredient)*”> • <!ELEMENT paragraph %inlines;> • <!ELEMENT cell %inlines;> • <!ELEMENT heading %inlines;>

  44. 파라미터 Entity(개체) 정의 <?xml version="1.0" encoding=“euc-kr"?> <!DOCTYPE memo [ <!ENTITY % pcd “(#PCDATA)”> <!ELEMENT memo (header, body) > <!ELEMENT header (to, from, date) > <!ELEMENT to (heading, name) > <!ELEMENT from (heading, name) > <!ELEMENT heading %pcd; > <!ELEMENT name %pcd; > <!ELEMENT date %pcd; > <!ELEMENT p %pcd; > <!ELEMENT body (p*) > ]>

  45. 파라미터 Entity(개체) 정의 <memo> <header> <to> <heading> To: </heading> <name> 홍길동 </name> </to> <from> <heading> From: </heading> <name> 장길산 </name> </from> <date> 2000. 8. 15. </date> </header> <body> <p> 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시작될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시기 바랍니다. </p> </body> </memo>

  46. 파라미터 Entity(개체) 정의 <?xml version="1.0" encoding=“euc-kr"?> <!DOCTYPE memo [ <!ENTITY % memo “<!ELEMENT memo (header, body) >”> <!ENTITY % header “<!ELEMENT header (to, from, date) >”> <!ENTITY % to “<!ELEMENT to (heading, name) >”> <!ENTITY % from “<!ELEMENT from (heading, name) >”> <!ENTITY % heading “<!ELEMENT heading (#PCDATA) >”> <!ENTITY % name “<!ELEMENT name (#PCDATA) >”> <!ENTITY % date “<!ELEMENT date (#PCDATA) >”> <!ENTITY % p “<!ELEMENT p (#PCDATA) >”> <!ENTITY % body “<!ELEMENT body (p*) >”> %memo; %header; %to; %from; %heading; %name; %date; %p; %body; ]>

  47. 속성이 포함된 DTD <!ELEMENT memo (header, body) > <!ELEMENT header (to, from, date) > <!ELEMENT to (heading, name) > <!ATTLIST to age CDATA #IMPLIED sex (male | female) "male" > <!ELEMENT from (heading, name) > <!ATTLIST from age CDATA #IMPLIED sex (male | female) "male" > <!ELEMENT heading (#PCDATA) > <!ELEMENT name (#PCDATA) > <!ELEMENT date (#PCDATA) > <!ELEMENT p (#PCDATA) > <!ELEMENT body (p*) >

  48. 속성이 포함된 XML 문서 <?xml version="1.0" encoding="EUC-KR"?> <!DOCTYPE memo SYSTEM “memo2.dtd"> <memo> <header> <to sex="female"> <heading>To:</heading> <name>홍길동</name> </to> <from age="35"> <heading>From:</heading> <name>장길산</name> </from> <date> 2000.12. 25. </date> </header> <body> <p> 컴퓨터 시스템 구축을 위한 회의가 내일 오후 2시부터 시작될 예정으로 있으니 꼭 참석하여 주시기 바랍니다. </p> <p> 회의 참석 여부를 오늘 중으로 제게 알려 주시기 바랍니다. </p> </body> </memo>

  49. 파라미터 Entity를 사용한 DTD <!ENTITY % age_sex 'age CDATA #IMPLIED sex (male | female) "male"' > <!ELEMENT memo (header, body) > <!ELEMENT header (to, from, date) > <!ELEMENT to (heading, name) > <!ATTLIST to %age_sex; > <!ELEMENT from (heading, name) > <!ATTLIST from %age_sex; > <!ELEMENT heading (#PCDATA) > <!ELEMENT name (#PCDATA) > <!ELEMENT date (#PCDATA) > <!ELEMENT p (#PCDATA) > <!ELEMENT body (p*) >

  50. XML의 Entity(개체) • Entity(개체) 구분 • 외부 파라미터 엔터티 • 작은 DTD에서 큰 DTD를 구축할 수 있다. • (하나의 외부 DTD가 다른 DTD에 연결이 되어서 처음에 선언된 엔터티와 엘리먼트를 사용한다.) • 재귀적 방법은 금지 되어 있다. • 큰 DTD를 작고 다루기 쉬운 크기로 나누면 DTD를 분석하기 쉽다. • 엘리먼트의 한 집합만 기술하는 더 작고 모듈화된 DTD를 사용하면 • 여러 사람이나 조직에 의해 만들어진 DTD와 혼합하고 일치시키는 것이 훨씬 쉽다.

More Related