390 likes | 610 Views
자바 개발자를 위한 XML. Chap2. DTD 와 XML 문서 김만수. CHAPTHER 2. DTD 와 XML 문서 DTD 소개 원소 선언 속성 선언 엔티티 선언 노테이션 선언과 바이너리 데이터 처리명령어 주석 조건부 섹션 CDATA 섹션 DTD 설계 DTD 파서. 2.2 XML 문서 구조. <?xml version= “ 1.0 ” encoding= “ euc-kr ” ?. XML 선언. 서론 ( 생략가능 ). <!DOCUMENT memo [
E N D
자바 개발자를 위한 XML Chap2. DTD와 XML 문서 김만수
CHAPTHER 2 • DTD와 XML 문서 • DTD 소개 • 원소 선언 • 속성 선언 • 엔티티 선언 • 노테이션 선언과 바이너리 데이터 • 처리명령어 • 주석 • 조건부 섹션 • CDATA 섹션 • DTD 설계 • DTD 파서
2.2 XML 문서 구조 <?xml version=“1.0” encoding=“euc-kr”? XML 선언 서론(생략가능) <!DOCUMENT memo [ <!ELEMENT memo (to, …)> ?]> DTD 선언(생략가능) <memo> <to what=“name”>홍길동</to> <date>2002/04/05</date> <contents>여자 친구로부터 전화 요망 </contents> <from>허준</from> </memo> 문서 내용 XML 문서 내용
2.2 XML 문서 구조 greeting.xml <?xml version="1.0" encoding="euc-kr" ?> <greeting>안녕하세요.</greeting>
2.2.1 XML 선언 부분 • version • 사용되는 XML 버전을 반드시 명시 • encoding • 데이터 인코딩에 사용되는 문자 세트 기술 • standalong • 외부 엔티티나 외부 데이터 타입을 사용하는지 여부 기술 • 외부 엔티티를 사용하지 않으면 “yes” <?xml version=“1.0” encoding=“euc-kr” standalong=“yes”?>
2.2.1 XML 선언 부분 • 용어 정리 • 잘 정의된(well-formed) : XML 문법 사항을 지킨 문서 • 유효한(valid) : XML 문서가 잘 정의되어 있으면서, 문서 내용이 DTD 규칙에 맞게 작성된 문서 • 엔티티(entity) : XML에서 정보의 단위 • 원소/태그/속성 속성 <to what = “name”>홍길동</to> 원소 시작태그 내용 끝 태그
2.2.2 DTD 선언 부분 • DTD (Document Type Definition) • XML 문서의 구조 • XML 문서에서 사용할 수 있는 원소, 속성, 엔티티 등을 정의 • XML 문서는 DTD를 사용할 수 있거나, 무시 할 수 있음 • DTD의 필요성 • 문서의 형태를 정형화된 방법으로 선언 –표준화 • 문서 내용이 올바른 구조로 되어 있는지 검사 가능 • XML 문서에서 꼭 필요한 원소와 속성을 반드시 기술하도록 만들 수 있음 • 속성에 디폴트 값을 부여
2.2.2 DTD 선언 부분 • DTD 사용 방법 (p. 2-6 참조) • XML 문서 내에서 DTD 선언 • 외부 파일로 DTD를 선언 • 외부 DTD와 내부 DTD를 같이 사용하는 방법 <!DOCTYPE memo [ … ]> <!DOCTYPE memo SYSTEM “memo.dtd”> <!DOCTYPE car SYSTEM “car.dtd” [ <!ENTITY % ownership “(name, phone, addr)”> <!ATTLIST model maker CDATA #REQUIRED > ]>
2.2.2 DTD 선언 부분 • DTD 선언 • 원소 선언, 속성 선언 등 다양한 내용 • 원소 선언(element declaration) • XML 문서에서 사용될 태그들과 태그들 사이의 포함 관계 및 순서를 기술 • <!ELEMENT .. > • 속성 선언(attribute declaration) • 원소에서 사용될 수 있는 속성의 이름과 디폴트 값에 관한 사항들을 기술 • <!ATTLIST .. > • 엔티티 선언 • <!ENTITY .. >
2.2.2 DTD 선언 부분 • DTD 선언 • 처리 명령어(processing instruction) • 특수한 응용프로그램의 명령어(Processing Instruction)을 기술 • <? ?> • 노테이션 선언(notation declaration) • 데이터의 포맷이나 처리 명령어에서 기술된 응용프로그램의 이름을 식별하기 위해서 사용 • <!NOTATION ..>
2.2.3 XML 문서 내용 • XML 문서 내용에는 실제 문서의 내용이 기술 • 원소(element) : 태그와 문서 내용을 기술 • 속성(attribute) : 원소에 포함되어서 원소에 대한 메타 정보를 기술 • 주석(comment) : 문서의 주석을 기술 • 처리 명령어(processing instruction) • 엔티티 참조(entity reference) : 엔티티를 참조해서 사용 • CDATA 섹션(CDATA Section) : <, &, ? 등의 문자를 포함하는 데이터를 편리하게 기술하기 위해서 사용
2.2.3 XML 문서 내용 • XML 문서 요소들 • XML 문서에는 오직 하나의 루트 원소가 존재
2.2.4 memo.xml memo to date contents from
2.3 DTD 소개 • DTD 선언의 요소들 • 내부 DTD + 외부 DTD 파일 참조 사용 가능 • 외부 DTD 선언의 내용을 재정의 하거나 추가 가능
2.3.1 내부 DTD • DTD 선언 • <!DOCTYPE Name [ 마크업선언*]> • 마크업선언 • 원소선언|속성선언|엔티티선언|노테이션선언|PI|주석 • Parsed Character Data • XML의 특수 문자를 제외한 임의의 문자가 올 수 있음
2.3.1 내부 DTD • ‘to’ Element의 속성 중 ‘what’은 반드시 기술 해야 함 • IE는 XML 문서가 DTD에 유효한가를 체크하지 않음
2.3.2 외부 DTD • 외부 DTD 사용의 필요성 • 공통된 DTD를 여러 XML에서 공유할 수 있음 • DTD 선언 • <!DOCTYPE Name외부ID> • 외부 ID • SYSTEM URL | PUBLIC PubidLiteral SystemLiteral • 예제 p. 2-11
2.4 원소 선언 • 원소선언 • <!ELEMENT element-namecontents> • contents • EMPTY | ANY | mixed | children
2.4.3 자식 노드만을 가질 때 - children • children은 별도의 키워드를 가지지 않음 • 선언 예 • <!ELEMENT memo(to, date, contents, from)> • <!ELEMENT spec(front, body, back?)> • <!ELEMENT div1(head, (p|list|note)*, div2*>
2.5 속성 선언 • 속성 리스트(ATTLIST) 선언 • 원소의 속성을 정의하기 위해서 사용 • 원소의 이름과 속성 이름, 속성의 타입 및 디폴트 값 기술 • <!ATTLIST element-nameattr-nameattr-typedefault-decl> • attr-type • CDATA : 임의의 문자열을 가짐 • 토큰 : ID, IDREF, IDREFS, ENTITY, ENTITYES, NMTOKEN, NMTOKENS의 키워드 중에서 하나를 사용 • 열거형 : DTD 개발자가 정해놓은 여러 개의 속성 값들 중에 하나를 사용
2.5 속성 선언 • CDATA • 속성의 값이 문자열 타입 • XML의 특수 문자들은 사용 불가능 • <!ATTLIST to what CDATA #REQUIRED>
2.5 속성 선언 • 토큰 타입 • ID, IDREF, IDREFS • <!ATTLIST termdef id ID #REQUIRED who IDREF #REQUIRED peoples IDREFS #REQUIRED name CDATA #IMPLIED> • ID • XML 문서에서 원소를 유일하게 식별할 수 있게 속성 값을 지정 • IDREF, IDREFS • XML 문서에서 문서의 다른 부분을 지칭이 필요 때 사용 • IDREFS는 여러 개의 ID를 지칭 가능 • 예제 p. 2-30
2.5 속성 선언 • 열거형 타입 • 종류 • 주어진 값들 중에서 하나를 선택하는 타입 • NOTATION 타입 • <!ATTLIST to what (name | title | nickname) “name”> • 속성의 디폴트 값 선언 • #REQUIRED : 속성 값을 반드시 명시 • #IMPLIED : 속성의 디폴트 값이 없음 • ((#FIDEX) ? AttValue : 속성의 디폴트 값을 명시
2.5 속성 선언 • 속성의 디폴트 값 선언 • #REQUIRED • <!ATTLIST to what CDATA #REQUIRED> • #IMPLIED • <!ATTLIST termdef name CDATA #IMPLIED> • #FIXED • <!ATTLIST from method CDTA #FIXED “POST”> • <!ATTLIST list type (bullets | ordered | glossary) “ordered”>
2.6 엔티티 선언 • Entity • XML 문서에서 정보의 단위 • 참조될 수 있도록 이름을 가짐 • 문자, 문장, 혹은 파일이 하나의 단위가 됨 • Entity 선언을 통해서 정의 • 문자 단위의 Entity & ; #숫자: 10진수 문자 코드#x숫자: 16진수 문자 코드#문자: 정의된 Entity 참조
2.6 엔티티 선언 엔티티 분류 엔티티 일반 엔티티 파라메터 엔티티 내부 엔티티 외부 엔티티 내부 엔티티 외부 엔티티 파싱된 엔티티 파싱된 엔티티 파싱안된 엔티티
2.6 엔티티 선언 • 일반 엔티티 • 프로그래밍 언어에서 매크로와 유사 • DTD에서 일반 엔티티를 선언 • XML 문서 내용중에서 엔티티 참조를 이용해서 엔티티 사용 • <!ENTITY namevalue >
2.6 엔티티 선언 • 파라메터 엔티티 • DTD 내부에서만 사용할 수 있는 엔티티 • 일반 엔티티 선언 방법이 다름 • <!ENTITY % namevalue> • 파라메터 엔티티 참조 방법 • %name;
2.6 엔티티 선언 • 외부 엔티티 • 외부 파일에 저장된 정보 • XML 문서, 바이너리 내용(.jpg, .mpg 등) 등 • 외부 엔티티의 위치는 시스템 식별자를 통해서 제공 – SYSTEM • <!ENTITY mydata SYSTEM “my.xml”> • 예. 2-40
2.7 노테이션 선언과 바이너리 데이터 • XML문서에 사진, 동영상, 음악 파일들(Binary Data)을 모두 기술 가능 • XML 문서는 텍스트 문서 Binary Data는 외부 파일로 저장하고 연결 • Notation • Binary Data를 어떻게 처리 할 것인지를 지정 • <!NOTATION name (외부ID | 공용ID)> • 외부 ID • SYSTEM 키워드를 사용해서 Binary Data를 처리 할 수 있는 응용 프로그램을 명시 • 공용ID • 표준화된 Binary Data일 경우 PUBLIC 키워드를 사용 • 예 • <!NOTATION gif SYSTEM “C:\gifviewer.exe”>
2.7 노테이션 선언과 바이너리 데이터 • Binary Data XML 문서에서 직접 사용 못함 • Entity를 선언해서 속성의 값으로만 사용 가능 • <!ENTITY mypic SYSTEM “mypic.gif” NDATA gif> • NDATA gif는 <!NOTATAION gif … > 를 의미 • 선언된 Binary Entity와 파싱되는 Entity는 차이점 • 파싱되는 Entity : 문서에서 직접 참조 가능 • 선언된 Binary Entity : 속성의 값으로만 사용, & ;를 붙이지 않음
2.7 노테이션 선언과 바이너리 데이터 Notation과 Binary Data Entity를 정의 Binary Data Entity는 속성 값으로만 사용 XML 문서에서 Binary Data 사용
2.8 처리 명령어(PI : Processing Instruction) • DTD 부분과 XML 문서 내용 부분에서 모두 사용 • XML 자신의 문서를 어떻게 처리 하라는 정보를 문서 처리 응용프로그램에게 전달 • 처리명령어 • <? 응용프로그램이름응용프로그램명령어?> • 응용프로그램이름 • 예 • <?xml-stylesheet type=“text/css” href=“style.css” ?> • <?xml-sytlesheet type=“text/xsl” href=“style.xsl” ?>
2.9 주석 • DTD와 XML 문서 내용 모두 사용 가능 • Tag안에서는 사용될 수 없음 • 일반 엔티티 선언 • <!-- 주석내용 --> • 예 • <greeting> 안녕하세요 </greeting> <!-- 잘못된 주석 --> >
2.10 조건부 섹션 • DTD의 일부분을 포함시키거나, 제외시킬 수 있는 기능 • 조건부 섹션 • <![keyword[ … ]]>
2.11 CDATA 섹션 • XML 문서 내용에서만 사용 • XML의 특수 문자를 사용할 수 있음 • <![CDTA[ … ]]> • 예 <script> <![CDATA[ if (x < 7 && x > 5) { alert(“x = 6”); } ]]>/script> <script> if (x < 7 && x > 5) { alert(“x = 6”); } /script>
2.12 DTD 설계 • 일반적인 방법론 • 재사용과 재정의 • Parameter Entity를 사용, 수정을 용의 • 예 p. 5-53 • 컴포지션에 의한 재사용 • 기존의 DTD를 활용하여 더 넓은 개념에서 기존의 DTD를 child 구조로 수용 • 예 p. 5-56