반응형
출처: http://kr.blog.yahoo.com/kwon37xi/folder/3381246.html

Property

파서에 추가되는 인터페이스로서 파서에 특정 인터페이스를 추가하여 분석 기능을 추가한다(수행 동작이 인터페이스를 구현한 객체에 구현되어 있다). Property는 Feature와 마찬가지로 URI를 사용하여 구별하는데, http://xml.org/sax/properites/를 접두어로 가지며 lexical-hander 같은 구분자가 뒤에 따라온다.

  • XMLReader.setProperty(String propertyID, Object value)
  • XMLReader.setFeature(String featureID, boolean value)
  • Object XMLReader.getProperty(String propertyID)
  • boolean XMLReader.getFeature(String featureID)

Feature

파서가 수행해야 하는 동작을 나타내기 위한 플래그로서 파서가 수행 가능한 동작의 실행 여부를 표시한다(수행하는 동작은 이미 파서에 구현되어 있다). Feature는 URI를 사용하여 구분하는데 http://xml.org/sax/features/를 접두어로 가지며 뒤에 validation과 같은 구분자가 따른다. 즉, 유효성 검사와 관련된 Feature는 http://xml.org/sax/features/validation이라는 URI로 표시된다.

EntityResolver

  • org.xml.sax.EntityResolver
  • 엔티티를 분석하는 이벤트 핸들러

public InputSource resolveEntity(String publicID, String systemID)

  • XMLReader가 엔티티 참조를 만날 때마다 그 엔티티에 해당하는 공개ID와 시스템ID를 resolveEntity메소드에 넘겨준다.
  • resolveEntity() 메소드에 어떤 코드를 추가하더라도, 항상 기본적으로는 null 을 반환하도록 해야 한다.

DTDHandler

  • org.xml.sax.DTDHandler
  • DTDHandler 인터페이스는 XMLReader가 분석하지 못한 엔티티나 표기(Notation) 선언을 만나게 되면 이를 알려준다. 물론 이 두 가지 이벤트는 XML문서가 아니라 DTD에서 발생한다.
  • 유효성 검사를 하면서 동시에 이 핸들러를 사용하는 것은 피하는 것이 좋다.
  • DTDHandler를 등록했다고 해도 유효성 검사 Feature(http://xml.org/sax/features/validation)를 선언하지 않으면 유효성 검사를 하지 않는다.

public void notationDecl(String name, String publicID, String systemID)

표기 선언(Notation)을 만나면 호출된다.

public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName)

분석되지 않은 엔티티 선언을 만나면 호출된다.

org.xml.sax.helpers.DefaultHandler 클래스

  • 여러 핸들러(ContentHandler, ErrorHandler, EntityResolver, DTDHandler)를 모두 구현했다. 구현한 메소드는 아무런 작동도 하지 않는다.
  • 이것을 상속하여 클래스를 작성하면 불필요한 메소드를 뺀 핸들러 클래스를 만들 수 있다.
  • EntityResolver는 다른 핸들러 클래스와 별도로 분리하는 것이 좋다.

XMLFilter

  • 하나의 SAX Reader가 모든 것을 처리하도록 하는 대신 Reader가 특정 처리를 하고 다른 Reader에게 넘겨주는 작업을 반복적으로 수행하는 파이프라인.
  • org.xml.sax.helpers.XMLFilterImpl클래스를 상속하여 구현하고, 자기 부모로 XMLReader를 지정하면 된다.
  • 핸들러는 최종 필터에 등록해야 한다.
  • XMLFilterImpl 클래스는 기본적으로 5개의 인터페이스에 정의된 모든 메소드는 관련된 이벤트를 처리하지 않고 단순히 넘어가도록 구현돼 있다. XMLFilterImpl 클래스를 상속한 클래스는 필터가 처리하는 메소드만 오버라이딩하여 구현하면 된다.

XMLWriter

org.xml.sax.ext.LexicalHandler

  • 주석, 엔티티선언, DTD 선언 그리고 CDATA 영역과 같은 구문과 관련된 이벤트를 처리하는 메소드를 제공한다. ContentHandler는 이 구문 관련 이벤트를 기본적으로 무시한다.
  • 이것을 사용하기 위해서는 Property에 이 핸들러를 구현한 객체를 등록해야만 한다.

    reader.setProperty("http://xml.org/sax/properties/lexical-handler", lexicalHandler);
    

public void startDTD(String name, String publicID, String systemID)

DTD 참조 또는 선언의 시작

public void endDTD()

DTD 참조 또는 선언의 끝

public void startEntity(String name)

엔티티 참조 시작

public void endEntity(String name)

엔티티 참조 끝

public void startCDATA()

CDATA 영역 시작

public void endCDATA()

CDATA 영역 끝

public void comment(char[] ch, int start, int length)

  • 주석
  • <!-- 와 --> 주석 구분자를 제외한 텍스트만을 받는다.

org.xml.sax.ext.DeclHandler

  • DeclHandler 핸들러는 요소 선언이나 속성 선언과 같은 DTD에서 발생하는 특정 이벤트를 처리하는 메소드를 정의 하며 아주 특별한 경우에만 사용된다.
  • 이것을 사용하기 위해서는 Property로 이 핸들러를 구현한 객체를 등록해야 한다.

    reader.setProperty("http://xml.org/sax/properties/declaration-handler", declHandler);
    

public void attributeDecl(java.lang.String eName, java.lang.String aName, java.lang.String type, java.lang.String mode, java.lang.String value)

속성의 선언을 처리한다. <!ATTLIST>

public void elementDecl(java.lang.String name, java.lang.String model)

요소의 선언을 처리한다. <!ELEMENT>

public void externalEntityDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId)

외부 자원을 참조하는 엔티티 선언을 처리한다. <!ENTITY>

public void internalEntityDecl(java.lang.String name, java.lang.String value)

내부에서 선언된 엔티티 선언을 처리한다.

+ Recent posts