1 / 54

XML PARSER 이야기

XML PARSER 이야기. XML Parser 의 종류. SAX (The Simple API for XML) DOM (Document Object Model). XML Parser 의 역할. Invoke the parser Parser 가 하는 일 Validation Well formedness checking Building a document tree Notifying the application of errors. file, stream 을 다룸 XML Parser 자신만의 파서를 구성할 수 있다

medge-cruz
Télécharger la présentation

XML PARSER 이야기

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. XML PARSER 이야기 XML Programming!!

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

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

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

  5. DOM(Document Object Model) • W3C에서 제안 • 현재 Level 2.0(2000.11), Level 3.0 진행중 • HTML, XML문서에 대한 표준 Interface 정의 • JavaScript의 document객체 XML Programming!!

  6. DOM(계속) • XML문서의 객체와 인터페이스 포함 • XML문서에 대한 프로그램할 수 있는interface 제공 • 인터페이스에는 문서의 논리적구조와 접근 방법에 대한 tree-based API제공 XML Programming!!

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

  8. Parser 비교 • SAX • Event-based API • 전체 Tree를 만드는 것이 아니라 등록된 Event의 Callback함수를 만들어 사용 • 장점 • 대용량 대규모 문서 처리 가능 • 순차적으로 일괄 처리하는 경우에 빠른 처리 가능 • 구조자체가 관심사항이 아닌 경우 • 단점 • 문서의 구조를 얻어내기가 힘들다. • 동일한 구조를 여러 번 반복 사용할 경우 반복해서 parsing을 해야 한다. XML Programming!!

  9. <학생>을 찾으면 저를 불러 주세요!!! Parsing Event-Based SAX Parser <?xml version=“1.0” …?> <연구실 이름 = “xmlab"> <담당교수> <이름>홍길동</이름> </담당교수> <학생> <이름>이몽룡</이름> <과정>석사2학기</과정> </학생> </연구실> Method 화면에 “찾았다”를 출력한다. Call-Back!!! “찾았다” XML Programming!!

  10. Parser의 비교(계속) • DOM • Tree-based API • Parsing 후에 Memory상에 문서전체의 Tree구조를 만들어 사용 • 장점 • Tree구조를 가지므로 처리가 용이하다. • 몇 번이고 원하는 부분을 추가 및 수정 가능 • 문서의 구조가 충실히 보존돼야 하는 경우(ex:XML Editor.. • 단점 • 메모리상에 DataStructure를 만들기 때문에 큰 문서에는 적당하지 않다 • DOM구조를 생성하는데 시간이 오래 걸린다. XML Programming!!

  11. DOM Tree 구조 DOM Parser Parsing NODE NODE NODE NODE NODE Tree-Based <?xml version=“1.0” …?> <연구실 이름 = “xmlab"> <담당교수> <이름>홍길동</이름> </담당교수> <학생> <이름>이몽룡</이름> <과정>석사2학기</과정> </학생> </연구실> XML Programming!!

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

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

  14. MS의 MSXML 파서에서의 SAX XML Programming!!

  15. 새로운 Version에서 추가된 것들… • SAX 2.0 • DeclHandler • LexicalHandler • Namespace지원 • DOM Level 2 • Views • Stylesheets • Events (org.w3c.dom.events) • Traversal (org.w3c.dom.traversal) • Range (org.w3c.dom.range) • Namespace지원 XML Programming!!

  16. Namespace • 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!!

  17. 주요 Parsers • Apache Xerces • IBM XML4J • Oracle XML Parser • Sun Microsystems Project X ( !=JAXP) • JamesClark’s XP • OpenXML • MicroSoft’s MSXML • … XML Programming!!

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

  19. 쉬어가는 페이지 • 쉬어갑니다!! XML Programming!!

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

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

  22. XML4J 둘러 보기 • Vendor제공 API • org.apache.* • JAXP 지원 API • javax.xml.* • DOM API • org.w3c.dom.* • SAX API • org.xml.sax.* XML Programming!!

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

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

  25. Handler이야기 • 7개의 Handler • ContentHandler • ErrorHandler • DTDHandler • EntityResolver • DefaultHandler • DeclHandler • LexicalHandler XML Programming!!

  26. XML Programming!!

  27. EventHandler vs SAXHandler • EventHandler public class Test { … button.addActionListener(myHandler); ... } class MyHandler implements ActionListener{ public void actionPerformed(ActionEvent e) { System.out.println(“button click!!!”); } } XML Programming!!

  28. SAX Handler public void creatSAXParser() { // SAXParser를 생성한다. SAXParser mySAXParser = new SAXParser(); // handler를 생성한다. handler내에 startElement()가 있다. MyContentHandler contentHandler = new MyContentHandler(); // contentHandler를 등록 시켰다. mySAXParser.setContentHandler(contentHandler); // parsing작업을 시작한다. mySAXParser.parse(uri); } class MyContentHandler implements ContentHandler { // element를 만나면 호출되어진다. public void startElement(, , ,){ System.out.println("element를 만났습니다!!!") } } XML Programming!!

  29. ContentHandler • 가장 기본이 되는 인터페이스 • Document가 시작되거나 엘리먼트가 시작되는 등의 파싱중 발생되는 거의 대부분의 이벤트를 처리한다. XML Programming!!

  30. • 중요 method • public void startDocument() • Document가 시작된다는 이벤트가 발생할 때 호출된다. 즉 parsing 시작에 발생 • public void endDocument() • XML문서의 파싱이 끝날 때 발생하는 이벤트에 호출된다. • public void startElement() • 엘리먼트가 시작된다는 이벤트가 발생할 때 호출된다. • public void endDocument() • 엘리먼트가 끝났다는 이벤트가 발생할 때 호출된다. • public void Characters() • 파싱시 character를 만났을 때 발생하는 이벤트에 호출된다. XML Programming!!

  31. ErrorHandler • 입력된 문서가 well-formed한가? 또 valid한가? 등을 검사해 발생하는 에러 이벤트를 처리한다. • 중요 method • public void warning() • 가벼운 경고 이벤트가 발생할 때 호출된다. 각 벤더의 파서 마다 경고가 발생하는 경우가 다르다. • public void error() • Valid Parser에서 valid하지 않은 문서를 파싱했을 때 발생하는 에러 이벤트에 호출된다. • public void fatalError() • Well-formed하지 않은 문서를 파싱할 경우 발생하는 에러 이벤드에 호출된다. XML Programming!!

  32. DTDHandler • 노테이션 선언이나 파싱되지 않은 엔티티 선언을 만나면 발생하는 이벤트를 처리한다. • 중요 method • notationDecl(String name, String pubID, String sysID) • Notation 선언을 만나면 호출된다. • unparsedEntityDecl(String name, String pubID, String sysID, String notationName) • unparsedEntityDecl선언을 만나면 호출된다. XML Programming!!

  33. EntityResolver • 외부 엔티티를 만났을 때 발생하는 이벤트를 처리한다. • 시스템 식별자를 얻어내는 등의 목적으로 사용한다. • 중요 method • public InputSource resolveEntity(String pubID, String sysID) • 외부 Entity를 만나면 호출된다. XML Programming!!

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

  35. • 중요 method • public void comment(char[]ch, intstart, intlength) • Report an XML comment anywhere in the document. • public void endCDATA() • Report the end of a CDATA section. • public void endDTD () • Report the end of DTD declarations. • public void endEntity (java.lang.Stringname) • Report the end of an entity. • public void startCDATA () • Report the start of a CDATA section. • public void startDTD (Stringname, StringpubId, StringsysId) • Report the start of DTD declarations, if any. • public void startEntity(Stringname) • Report the beginning of an entity in content. XML Programming!!

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

  37. • 중요 method • public void attributeDecl (StringeName, StringaName, Stringtype, StringvalueDefault, Stringvalue) • Report an attribute type declaration. • public void elementDecl(Stringname, Stringmodel) • Report an element type declaration. • public void externalEntityDecl(Stringname, StringpublicId, StringsystemId) • Report a parsed external entity declaration. • public void internalEntityDecl (Stringname, Stringvalue) • Report an internal entity declaration XML Programming!!

  38. DefaultHandler • Interface • ContentHandler • ErrorHandler • DTDHandler • EntityResolver • Class • DefaultHandler implements ContentHandler, ErrorHandler, DTDHandler, EntityHandler XML Programming!!

  39. ContentHandler ErrorHandler DTDHandler EntityResolver Implements DefaultHandler Extends MyHandler 모든 Handler역할가능 XML Programming!!

  40. 쉬어가는 페이지 • 쉬어갑니다!! XML Programming!!

  41. SAX API 살펴보기 • 3개의 Package • org.xml.sax • 기본적인 SAX의 기능을 기술한 인터페이스와 클래스, 그리고 예외클래스를 담은 패키지 • org.xml.helper • org.xml.sax 패키지의 클래스를 도와주는 기능의 클래스가 담긴 패키지 • org.xml.ext • SAX2.0에서 처음 추가된 기능의 패키지 XML Programming!!

  42. Deprecated • SAX1.0 -> SAX2.0 • NameSpace지원 문제 • Deprecated Class XML Programming!!

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

  44. 기타 Class들 • XMLReaderFactory • InputSource • AttributesImpl • LocatorImpl • XMLFilterImpl • ParserAdapter • XMLReaderAdapter • NamespaceSupport XML Programming!!

  45. • InputSource • This class encapsulates all information about a resurce used in XML processing • This can be as little as a String or InputSteam used for locating lnput, or as complex as an entity with a publicID and systemID as well as a URI reference • 중요 생성자 • InputSource () • InputSource (java.io.InputStreambyteStream) • InputSource (java.io.ReadercharacterStream) • InputSource (java.lang.StringsystemId) XML Programming!!

  46. • Ex : public Node getDOM(File uri){ … try{ /* 수정 fis = new FileInputStream(uri); isr = new InputStreamReader(fis); InputSource is = new InputSource(isr); */ InputSource is = new InputSource(uri.toURL().toString()); … } XML Programming!!

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

  48. SAX Parser 생성하기 • 3가지 생성방법 비교 • SAXParser 클래스를 직접 생성해 사용한다. • XML4J에서 가능 • SAXParserFactory를 이용해 SAXParser를 생성해 사용한다. • JAXP에서 제안 • XMLReader로 SAXParser를 생성해 사용한다. • SAX에서 제안 XML Programming!!

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

  50. JAXP에서 생성 • JAXP에서는 SAXParser가 추상클래스이다. • 그러므로 SAXParserFactory를 이용해서 생성해 사용한다. • Ex: import javax.xml.parsers.*; ... SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance(); SAXParser mySAXParser = mySAXParserFactory.newSAXParser(); mySAXParser.parse(String uri, new MyDefaultHandler()); ... XML Programming!!

More Related