DOM/SAX
태그 :
- 개념
- DOM - XML 문서를 트리 형태의 구조로 변경하여 접근하는 API - XML 문서 전체를 파싱하여 메모리에 올려놓고 요청되는 노드 데이타를 메모리에서 끌어댕기는 Pull방식을 사용하는 기법 SAX - 자료 구조를 만들지 않고 XML 문서를 스캔해가면서 순차적으로 이벤트를 발생시켜서 XML문서에 접근할 수 있게 해주는 API - XML문서를 전체 메모리에 올려 파싱하는 방식이 아닌 XML문서를 순차적으로 읽어들여 이벤트를 해당 프로시져에게 처리하라고 밀어주는 방식을 이용한 파싱 기법
I. XML Parser 표준 API인 DOM & SAX의 이해
가. XML Parser의 기능
- XML과 DTD를 읽어서 문서의 정확성을 검증하고, 문서내용과 문서 구조에 접근 할 수 있게 해주는 라이브러리 형태의 프로그램
- XML 문서가 XML의 Constraints을 따르는 지 검사하고, Application 에게 XML 문서의 데이터 또는 자료구조를 제공하며 Element, Attributes, Entity 등의 정보를 생성함
나. XML 프로세싱의 방법
|
방법 |
주요 내용 |
|
XML 브라우저이용방법 |
- 별도의 프로그램이 없이, XML 브라우저에 전적으로 의존하는 방식 - 간단한 XML 문서는 가능하지만, 다양한 XML 응용에는 융통성 적음 |
|
XML 프로세스API 이용방법 |
- 이벤트 기반의 SAX (Simple API for XML) - 객체모델기반의 DOM (Document Object Model) |
다. DOM(Document object model) & SAX(Simple API of XML)의 정의
|
구분 |
정 의 |
|
DOM |
- XML 문서를 트리 형태의 구조로 변경하여 접근하는 API - XML 문서 전체를 파싱하여 메모리에 올려놓고 요청되는 노드 데이타를 메모리에서 끌어댕기는 Pull방식을 사용하는 기법 |
|
SAX |
- 자료 구조를 만들지 않고 XML 문서를 스캔해가면서 순차적으로 이벤트를 발생시켜서 XML문서에 접근할 수 있게 해주는 API - XML문서를 전체 메모리에 올려 파싱하는 방식이 아닌 XML문서를 순차적으로 읽어들여 이벤트를 해당 프로시져에게 처리하라고 밀어주는 방식을 이용한 파싱 기법 |
라. DOM & SAX의 특징
|
DOM |
SAX |
|
- 객체 모델 기반 API |
- 이벤트 기반 API |
|
- 노드(node)단위로 데이터 처리 |
- SAX Parser는 XML태그 시작과 끝에서 이벤트 생성 |
|
- 문서의 구조 정보와 내용을 객체로 이용 |
- XML문서를 하나의 긴 문자열로 간주 |
|
- 메모리 적재 방식 |
- 라인 인터프리트 방식 |
II. DOM & SAX 구성도 및 SAX 이벤트 유형
가. DOM 구성도


나. DOM의 계층구조
|
Level |
설 명 |
|
Level 1 |
- Core, HTML & XML 문서 모델에 관한 내용 |
|
Level 2 |
- Style Sheet를 적용한 객체 모델 지원 |
|
Level 3 |
- 문서의 스타일, 내용, 구조에 동적 접근 및 갱신 |
다. SAX 구성도

라. SAX Event 유형
|
유형 |
설 명 |
|
Start Doc / End Doc |
- 문서의 시작과 끝을 알림 |
|
Start Element |
- 엘리먼트의 시작을 알림 - 엘리먼트 내의 모든 속성과 태그 포함 |
|
End Element |
- 엘리먼트의 끝을 알림 |
|
Characters |
- Character Data 포함 |
|
Warning Error |
- 화상 오류를 표시 |
III. DOM & SAX 접근방식 및 비교
가. DOM과 SAX 접근 방식

|
DOM |
SAX |
|
- DOM은 XML Parser와 Application 사이의 계층에 놓여짐 - XML Parser에서 얻은 결과를 이용하여, 문서 객체 모델 DOM을 만듬 - 표준DOM을 이용하면 Parser에 독립적인 응용 프로그램 개발이 가능함 |
- SAX는 XML의 각 구성요소들을 순차적으로 접근하면서 이벤트 방식으로 문서를 취급 - XML문서의 각 요소나 속성, 혹은 문자열 들에 접근할 때 발생하는 이벤트를 인식하여 XML 문서를 처리 - 응용 프로그램은 이러한 Event를 가로채서 Element의 이름이나 속성값을 얻어내는 등 처리할 작업과 관련된 일을 진행할 수 있음 |
나. DOM과 SAX 비교
|
구분 |
DOM |
SAX |
|
접근방법 |
- 트리 구조 |
- Event Driven 구조 |
|
처리방법 |
- XML문서를 Tree 형태의 자료 구조로 변경하여 접근 |
- 자료 구조 없이 문서를 SCAN, 순차적으로 이벤트를 발생시켜 처리 |
|
메모리 |
- 사용량 많음 |
- 사용량 적음 |
|
문서구조 |
- 동적 변경 |
- 어려움 |
|
장점 |
- 문서 구조에 대한 풍부한 표현력 - XML 문서의 생성, 편집이 가능함 |
- XML 문서의 크기에 관계없이 파싱이 가능 - 자신만의 데이터구조생성 가능 - XML 문서의 일부분만 처리해도 될 때 장점 - 단순하고 속도가 빠름 |
|
단점 |
- 메모리 요구량이 많음 - 처리 속도가 늦음 |
- 문서의 구조에 대한 정보 파악이 불리함 - 문서 생성, 편집이 불가능 (Read Only) |
|
적용분야 |
- 구조적 접근이 필요한 경우 - 특정 부분으로 이동할 경우 - 문서 정보를 쉽게 파악하고자할 때 사용 |
- 문서 일부분만 읽는 경우 - 유효성처리, 데이터 변환 - 동일 오류 처리 - 엘리먼트를 일부 추출하는 경우 |
IV. XML 문서의 활용현황 및 고려사항
가. 웹상에 존재하는 여러 형태의 구조적인 문서를 분석하여 사용자 응용프로그램에 맞게 재생성 및 형태를 통해 사용성을 높이고 있음
나. 웹 어플리케이션과 프로그램에 부담을 줄이기 위해 DOM과 SAX의 장점을 활용한 JDOM 방식의 XML 프로세서 적용을 고려해야 함