XML PARSER XML Programming 1 XML Parser n

  • Slides: 54
Download presentation
XML PARSER 이야기 XML Programming!! 1

XML PARSER 이야기 XML Programming!! 1

XML Parser의 종류 n SAX (The Simple API for XML) n DOM (Document Object

XML Parser의 종류 n SAX (The Simple API for XML) n DOM (Document Object Model) . XML Programming!! 2

XML Parser의 역할 n Invoke the parser n Parser가 하는 일 • • •

XML Parser의 역할 n Invoke the parser n Parser가 하는 일 • • • n Validation Well formedness checking Building a document tree Notifying the application of errors. file, stream을 다룸 XML Parser n n 자신만의 파서를 구성할 수 있다 Apache Xerces, IBM XML 4 J, XML 4 C, James Clark 의 XP XML Programming!! 3

SAX(The Simple API for XML) n XML-Dev mailing list 회원들의 제안 n 현재 Version

SAX(The Simple API for XML) n XML-Dev mailing list 회원들의 제안 n 현재 Version 2. 0 (2000. 5) n Parser의 상호간에 표준 API 필요성 제기 n Event-based API 제공 XML Programming!! 4

DOM(Document Object Model) n n W 3 C에서 제안 현재 Level 2. 0(2000. 11),

DOM(Document Object Model) n n W 3 C에서 제안 현재 Level 2. 0(2000. 11), Level 3. 0 진행중 HTML, XML문서에 대한 표준 Interface 정의 Java. Script의 document객체 XML Programming!! 5

XML 문서 Tree Document <? xml version="1. 0"? > <library> <!-- 주석 --> <item

XML 문서 Tree Document <? xml version="1. 0"? > <library> <!-- 주석 --> <item type="book"> 책 제목 <library> <? xml version="1. 0"? > </item> <item type="cd"> CD 제목 </item> </library> type “주석" “책 제목" <item> type <item> "CD 제목" “cd“ "book" XML Programming!! 7

Parser의 비교(계속) n SAX와 DOM 비교 XML Programming!! 12

Parser의 비교(계속) n SAX와 DOM 비교 XML Programming!! 12

SAX와 DOM의 Specification n SAX n n Interface형태로 배포 DOM n n OMG의 IDL(interface

SAX와 DOM의 Specification n SAX n n Interface형태로 배포 DOM n n OMG의 IDL(interface definition language)로 기술 http: //www. w 3. org/TR/DOM-Level-2 -Core/ XML Programming!! 13

MS의 MSXML 파서에서의 SAX MSXML Version 1. 0 2. 5 2. 6 3. 0

MS의 MSXML 파서에서의 SAX MSXML Version 1. 0 2. 5 2. 6 3. 0 Installed with IE 4 IE 5 Win 2000 MSDN DOM O O XSL O O O O O Xpath SAX 2 XML Programming!! 14

새로운 Version에서 추가된 것들… n SAX 2. 0 n n Decl. Handler Lexical. Handler

새로운 Version에서 추가된 것들… n SAX 2. 0 n n Decl. Handler Lexical. Handler Namespace지원 DOM Level 2 n n n Views Stylesheets Events (org. w 3 c. dom. events) Traversal (org. w 3 c. dom. traversal) Range (org. w 3 c. dom. range) Namespace지원 XML Programming!! 15

Namespace n Namespace는 이름의 충돌을 방지한다. <root> <!--아래의 class는 java의 class--> <java: class xmlns:

Namespace n Namespace는 이름의 충돌을 방지한다. <root> <!--아래의 class는 java의 class--> <java: class xmlns: java="http: //java. sun. com"> <parameter type="int">number</parameter> <return type="String">result</return> </java: class> <!--아래의 class는 학급이다--> <school: class xmlns: school="http: //www. dgu. ac. kr"> <학년>1</학년> <반>1</반> <학생수>20</학생수> </school: class> </root> XML Programming!! 16

주요 Parsers n n n n Apache Xerces IBM XML 4 J Oracle XML

주요 Parsers n n n n Apache Xerces IBM XML 4 J Oracle XML Parser Sun Microsystems Project X ( !=JAXP) James. Clark’s XP Open. XML Micro. Soft’s MSXML … XML Programming!! 17

JAXP n JAXP(Java API for XML Processing) n n SUN에서 제안한 표준 자바 API

JAXP n JAXP(Java API for XML Processing) n n SUN에서 제안한 표준 자바 API JAXP의 필요성 n n n 각 Vendor의 Parser가 각기 조금씩 다른 API를 제공 J 2 EE기반에서 사용할 표준 XML API필요 JAXP는 각 Vendor가 제공하는 Parser를 사용할 수 있는 추상적 인 층(abstract layer)를 제공 XML Programming!! 18

XML 4 J(Xerces-J) n n n IBM TX-Parser로 연구 시작 Apache Project에 참여 현재

XML 4 J(Xerces-J) n n n IBM TX-Parser로 연구 시작 Apache Project에 참여 현재 Apache Xerces-J를 Test하고, 배포 Java로 쓰여진 대표적인 XML Parser XML Programming!! 20

Getting Prepared n Obtaining a Parser n n http: //www. alphaworks. ibm. com/formula/ 로

Getting Prepared n Obtaining a Parser n n http: //www. alphaworks. ibm. com/formula/ 로 가서 XML 4 J를 Download한다. Make sure that your Java environment n n JDK 설치 확인 CLASSPATH에 XMLParser Class가 설정되었는가 확인 XML Programming!! 21

XML 4 J 둘러 보기 n Vendor제공 API n n JAXP 지원 API n

XML 4 J 둘러 보기 n Vendor제공 API n n JAXP 지원 API n n javax. xml. * DOM API n n org. apache. * org. w 3 c. dom. * SAX API n org. xml. sax. * XML Programming!! 22

SAX 이야기 kjaelee@orgio. net 이길재 XML Programming!! 23

SAX 이야기 kjaelee@orgio. net 이길재 XML Programming!! 23

순서 n Handler n n 7가지 Handler 살펴보기 SAX API 살펴보기 n 3가지 package

순서 n Handler n n 7가지 Handler 살펴보기 SAX API 살펴보기 n 3가지 package 살펴보기 XML Programming!! 24

Handler이야기 n 7개의 Handler n n n n Content. Handler Error. Handler DTDHandler Entity.

Handler이야기 n 7개의 Handler n n n n Content. Handler Error. Handler DTDHandler Entity. Resolver Default. Handler Decl. Handler Lexical. Handler XML Programming!! 25

… XML Programming!! 26

… XML Programming!! 26

Event. Handler vs SAXHandler n Event. Handler public class Test { … button. add.

Event. Handler vs SAXHandler n Event. Handler public class Test { … button. add. Action. Listener(my. Handler); . . . } class My. Handler implements Action. Listener{ public void action. Performed(Action. Event e) { System. out. println(“button click!!!”); } } XML Programming!! 27

SAX Handler public void creat. SAXParser() { // SAXParser를 생성한다. SAXParser my. SAXParser =

SAX Handler public void creat. SAXParser() { // SAXParser를 생성한다. SAXParser my. SAXParser = new SAXParser(); // handler를 생성한다. handler내에 start. Element()가 있다. My. Content. Handler content. Handler = new My. Content. Handler(); // content. Handler를 등록 시켰다. my. SAXParser. set. Content. Handler(content. Handler); // parsing작업을 시작한다. my. SAXParser. parse(uri); } class My. Content. Handler implements Content. Handler { // element를 만나면 호출되어진다. public void start. Element(, , , ){ System. out. println("element를 만났습니다!!!") } } XML Programming!! 28

DTDHandler n 노테이션 선언이나 파싱되지 않은 엔티티 선언을 만나 면 발생하는 이벤트를 처리한다. n

DTDHandler n 노테이션 선언이나 파싱되지 않은 엔티티 선언을 만나 면 발생하는 이벤트를 처리한다. n 중요 method n notation. Decl(String name, String pub. ID, String sys. ID) • Notation 선언을 만나면 호출된다. n unparsed. Entity. Decl(String name, String pub. ID, String sys. ID, String notation. Name) • unparsed. Entity. Decl선언을 만나면 호출된다. XML Programming!! 32

Lexical. Handler n 이름 그대로 Lexical이벤트 처리를 보강하기 위한 Handler이다. n 코멘트나 CDATA등을 만났을

Lexical. Handler n 이름 그대로 Lexical이벤트 처리를 보강하기 위한 Handler이다. n 코멘트나 CDATA등을 만났을 때 발생하는 이벤트를 처 리한다. n To set the Lexical. Handler for an XML reader, use the set. Property method with the property. Id "http: //xml. org/sax/properties/lexical-handler". XML Programming!! 34

… n 중요 method n public void comment (char[] ch, int start, int length)

… n 중요 method n public void comment (char[] ch, int start, int length) • Report an XML comment anywhere in the document. n public void end. CDATA () • Report the end of a CDATA section. n public void end. DTD () • Report the end of DTD declarations. n public void end. Entity (java. lang. String name) • Report the end of an entity. n public void start. CDATA () • Report the start of a CDATA section. n public void start. DTD (String name, String pub. Id, String sys. Id) • Report the start of DTD declarations, if any. n public void start. Entity (String name) • Report the beginning of an entity in content. XML Programming!! 35

Decl. Handler n DTD처리를 보강하기 위해 새로 추가된 Handler이다. n 여러 종류의 선언을 만났을

Decl. Handler n DTD처리를 보강하기 위해 새로 추가된 Handler이다. n 여러 종류의 선언을 만났을 때 발생하는 이벤트를 처리한다. n To set the Decl. Handler for an XML reader, use the set. Property method with the property. Id "http: //xml. org/sax/properties/declaration-handler". n If you are using the declaration handler together with a lexical handler, all of the events will occur between the start. DTD and the end. DTD events. XML Programming!! 36

… n 중요 method n public void attribute. Decl (String e. Name, String a.

… n 중요 method n public void attribute. Decl (String e. Name, String a. Name, String type, String value. Default, String value) • Report an attribute type declaration. n public void element. Decl (String name, String model) • Report an element type declaration. n public void external. Entity. Decl (String name, String public. Id, String system. Id) • Report a parsed external entity declaration. n public void internal. Entity. Decl (String name, String value) • Report an internal entity declaration XML Programming!! 37

Default. Handler n Interface n n n Content. Handler Error. Handler DTDHandler Entity. Resolver

Default. Handler n Interface n n n Content. Handler Error. Handler DTDHandler Entity. Resolver Class n Default. Handler implements Content. Handler, Error. Handler, DTDHandler, Entity. Handler XML Programming!! 38

… Content. Handler Error. Handler DTDHandler Entity. Resolver Implements Default. Handler Extends My. Handler

… Content. Handler Error. Handler DTDHandler Entity. Resolver Implements Default. Handler Extends My. Handler 모든 Handler역할 가능 XML Programming!! 39

Deprecated n SAX 1. 0 -> SAX 2. 0 n n Name. Space지원 문제

Deprecated n SAX 1. 0 -> SAX 2. 0 n n Name. Space지원 문제 Deprecated Class XML Programming!! 42

기타 Interface들 n XMLReader n Attributes n Locator n XMLFilter XML Programming!! 43

기타 Interface들 n XMLReader n Attributes n Locator n XMLFilter XML Programming!! 43

기타 Class들 n n n n XMLReader. Factory Input. Source Attributes. Impl Locator. Impl

기타 Class들 n n n n XMLReader. Factory Input. Source Attributes. Impl Locator. Impl XMLFilter. Impl Parser. Adapter XMLReader. Adapter Namespace. Support XML Programming!! 44

… n Input. Source n This class encapsulates all information about a resurce used

… n Input. Source n This class encapsulates all information about a resurce used in XML processing This can be as little as a String or Input. Steam used for locating lnput, or as complex as an entity with a public. ID and system. ID as well as a URI reference n 중요 생성자 n • • Input. Source () (java. io. Input. Stream byte. Stream) (java. io. Reader character. Stream) (java. lang. String system. Id) XML Programming!! 45

… n Ex : public Node get. DOM(File uri){ … try{ /* 수정 fis

… n Ex : public Node get. DOM(File uri){ … try{ /* 수정 fis = new File. Input. Stream(uri); isr = new Input. Stream. Reader(fis); Input. Source is = new Input. Source(isr); */ Input. Source is = new Input. Source(uri. to. URL(). to. String()); … } XML Programming!! 46

잠시 쉬어가기!! … XML Programming!! 47

잠시 쉬어가기!! … XML Programming!! 47

XML 4 J에서 생성 n XML 4 J나 Oracle의 SAXParser는 클래스(추상클래스 아 님) 이므로

XML 4 J에서 생성 n XML 4 J나 Oracle의 SAXParser는 클래스(추상클래스 아 님) 이므로 직접 생성해 사용가능 n Ex: import org. apache. xerces. parsers. SAXParser; … SAXParser my. SAXParser = new SAXParser(); my. SAXParser. parse(String uri); … XML Programming!! 49

JAXP에서 생성 n n n JAXP에서는 SAXParser가 추상클래스이다. 그러므로 SAXParser. Factory를 이용해서 생성해 사용한다.

JAXP에서 생성 n n n JAXP에서는 SAXParser가 추상클래스이다. 그러므로 SAXParser. Factory를 이용해서 생성해 사용한다. Ex: import javax. xml. parsers. *; . . . SAXParser. Factory my. SAXParser. Factory = SAXParser. Factory. new. Instance() ; SAXParser my. SAXParser = my. SAXParser. Factory. new. SAXParser(); my. SAXParser. parse(String uri, new My. Default. Handler()); . . . XML Programming!! 50

SAX에서 제안하는 방법 n n Interface인 XMLReader를 벤더가 제공하는 SAXParser를 이용해서 생성하는 것이다. Ex:

SAX에서 제안하는 방법 n n Interface인 XMLReader를 벤더가 제공하는 SAXParser를 이용해서 생성하는 것이다. Ex: . . . // class. Name은 사용할 parser class 이름. 가령 // org. apache. xerces. parsers. SAXParser 등. . . XMLReader my. Reader=XMLReader. Factory. create. XMLReader( java. lang. String class. Name); my. Reader. parse(String uri); . . . XML Programming!! 51

… n 직접 매개변수를 넣어 생성하지 않고 시스템 프로퍼티 에 설정하는 방법이다. n Ex.

… n 직접 매개변수를 넣어 생성하지 않고 시스템 프로퍼티 에 설정하는 방법이다. n Ex. . . XMLReader my. Reader = XMLReader. Factory. create. XMLReader(); my. Reader. parse(String uri); . . . n 실행방법 (-D옵션) n org. xml. sax. driver = org. apache. xerces. parsers XML Programming!! 52

… n 인터페이스인 XMLReader를 직접 구현된 SAXParser로 생성해 사용할 수도 있다. n Ex: .

… n 인터페이스인 XMLReader를 직접 구현된 SAXParser로 생성해 사용할 수도 있다. n Ex: . . . XMLReader my. Reader = new SAXParser(); my. Reader. parse(String uri); . . . XML Programming!! 53

Handler등록하기 n SAXParser. set. Content. Handler(Content. Handler); n SAXParser. set. Error. Handler(Error. Handler) n

Handler등록하기 n SAXParser. set. Content. Handler(Content. Handler); n SAXParser. set. Error. Handler(Error. Handler) n SAXParser. set. DTDHandler(DTDHandler) n SAXParser. set. Entity. Resolver(Entity. Resolver) XML Programming!! 54