XML PARSER 이야기 XML Programming!!.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

Parser 의 이해와 Parsing 손계선 강미정 서정은 5 월 25 일 발표자 : 손계선.
제 7주 2015년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Oozie Web API 기능 테스트 이승엽.
10. 예외 처리.
Introduction to Django
박용수 XML 박용수
2011년 봄학기 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
XML 응용 프로그래밍 3장 XML 문서 제작 기본
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
XML Parser 순천향대학교 정보기술공학부 이상정.
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
Ch.07-5 xml-rpc 사용하기 김상엽.
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
Overview : XML과 Database
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
7장 배열 ②.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
Java 기초 (Java JDK 설치 및 환경설정)
XML DOM (Document Object Model)
제 3장. C보다 나은 C++ II.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
12 ███████████ 12.
윤 홍 란 4 장 클래스 작성 윤 홍 란
1. C++ 시작하기.
6강. DI설정 방법 XML파일을 이용한 DI설정 방법 JAVA를 이용한 DI설정 방법 XML과 JAVA를 같이 사용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
[ 고급소프트웨어공학 ] XML parser: DOM G 김지희.
XML.NET XML 검색, 수정 프로그램 작성 2010 컴퓨터공학실험(Ⅰ)
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
14. 예외처리.
자바 5.0 프로그래밍.
객체 지향 프로그래밍.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
인터넷응용프로그래밍 JavaScript(Intro).
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
인터넷응용프로그래밍 JavaScript(array).
Lesson 2. 기본 데이터형.
김 정 석 Web Programming 김 정 석
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
XML-II (eXtensible Markup Language) DTD/DOM
자바 5.0 프로그래밍.
XML Parser 순천향대학교 정보기술공학부 이상정.
JA A V W. 06.
12. 상속 : 고급.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
발표자 : 이지연 Programming Systems Lab.
구조체(struct)와 공용체(union)
9 브라우저 객체 모델.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
자바 객체 지향 프로그래밍 Ps lab 김윤경.
AJAX Technology for Web2.0
7 생성자 함수.
6 객체.
DOM (Document Object Model)
Implementing SmartThings App Visualization tool
20 XMLHttpRequest.
Presentation transcript:

XML PARSER 이야기 XML Programming!!

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

XML Parser의 역할 Invoke the parser XML 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!!

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

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

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

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

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

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

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

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

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

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

MS의 MSXML 파서에서의 SAX MSXML Version 1.0 2.0 2.5 2.6 3.0 Installed with IE4 IE5 Win2000 MSDN DOM O XSL Xpath SAX SAX2 XML Programming!!

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

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!!

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

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

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

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

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!!

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

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

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

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

… XML Programming!!

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

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!!

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

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

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

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

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

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!!

… 중요 method public void comment (char[] ch, int start, int length) 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.String name) Report the end of an entity. public void startCDATA () Report the start of a CDATA section. public void startDTD (String name, String pubId, String sysId) Report the start of DTD declarations, if any. public void startEntity (String name) Report the beginning of an entity in content. XML Programming!!

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!!

… 중요 method public void attributeDecl (String eName, String aName, String type, String valueDefault, String value) Report an attribute type declaration. public void elementDecl (String name, String model) Report an element type declaration. public void externalEntityDecl (String name, String publicId, String systemId) Report a parsed external entity declaration. public void internalEntityDecl (String name, String value) Report an internal entity declaration XML Programming!!

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

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

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

SAX API 살펴보기 3개의 Package org.xml.sax org.xml.helper org.xml.ext XML Programming!!

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

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

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

… 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.InputStream byteStream) InputSource (java.io.Reader characterStream) InputSource (java.lang.String systemId) XML Programming!!

… 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!!

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

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

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

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!!

SAX에서 제안하는 방법 Interface인 XMLReader를 벤더가 제공하는 SAXParser를 이용해서 생성하는 것이다. ... // className은 사용할 parser class 이름. 가령 // org.apache.xerces.parsers.SAXParser 등... XMLReader myReader=XMLReaderFactory.createXMLReader( java.lang.String className); myReader.parse(String uri); XML Programming!!

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

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

Handler등록하기 SAXParser.setContentHandler(ContentHandler); SAXParser.setErrorHandler(ErrorHandler) SAXParser.setDTDHandler(DTDHandler) SAXParser.setEntityResolver(EntityResolver) XML Programming!!