목차
I. DOM (Document Object Model )
1. DOM (Document Object Model )의 정의
2. DOM의 요소
3. DOM의 구조
4. Window Object
5. 마이크로소프트 DOM 객체
II. SAX(Simple API for XML)
1. SAX(Simple API for XML)의 정의
2. SAX 의 개요
3. SAX(Simple API for XML) 란?
4. DOM vs SAX
1. DOM (Document Object Model )의 정의
2. DOM의 요소
3. DOM의 구조
4. Window Object
5. 마이크로소프트 DOM 객체
II. SAX(Simple API for XML)
1. SAX(Simple API for XML)의 정의
2. SAX 의 개요
3. SAX(Simple API for XML) 란?
4. DOM vs SAX
본문내용
SAX 구현은 DOM 보다 처리 속도가 빠르다.
기억해야 할 것은 DOM과 SAX 는 상호 배타적이지 않다는 것이다. 이벤트들의 SAX 스트림을(연속된 문자열) 생성하기 위해서 DOM을 사용할 수 있고 , DOM tree를 생성하기 위해서 SAX를 사용할 수 있다. 사실 대부분의 파서들은 실지로 SAX를 사용해서 DOM 트리를 생성한다.
SAX를 선택해야 할 때
큰 문서를 핸들링 할 때
SAX의 주요 장점중 하나가 리소스 한계에 부딪히지 않고 기가바이트 단위의 큰 XML문서라도 읽어 들이고 파싱할 수 있다는 것이다. 왜냐하면, DOM트리를 메모리상에 생성하지 않기 때문이다. 구현하는 사람은 필요에 따라 원하는 이벤트안을 메모리에 띄워 놓을 수있다.
만약 서버상의 메모리 한계를 겪는다면 단호히 SAX를 사용해야 한다. 예를 들어 소설책들을 나열하기 위한 DTD 가 정의되어 있다고 가정하고, 당신이 소장하고 있는 소설책중에서 저자가 \"이문열\"인 모든것을 찾으려 한다고 하자. 이러한 특정한 일에 대해서, 검색에 관련이 없는 표지디자이너나 편집자, 발행인 등의 요소에 대한 설명을 검색할 필요는 없다. 그러므로 이럴때에는 엘리먼트중 저자를 제외한 나머지 요소는 무시하도록 클래스 인스턴스를 작성하면 된다.
문서로부터 특정한 값을 넘겨 받고자 할 때
SAX 는 XML 문서를 처음부터 끝까지 읽어들여, 다른 문서로 변환하기 위해 연산하거나 , 그 문서의 정보들을 처리하는 (예를 들어 특정 요소의 평균값을 계산하는 작업 ) 등에 적합하다. 그러나 간단한 요소의 내용이나 속성을 다른값으로 바꾸는 등의 간단한 목적에 사용될 수는 있어도 , 중쳤된 어떠한 요소들을 교환한다든지 하는 복잡한 연산등의 문서 구조 변환에는 적합하지 않다. 예를 들어 SAX를 사용하여 속성값이 \'greek\' 인 어떤 요소의 내용을 Greek 문자로 변환하는 등의 작업에는 적합하지만, 전체 책의 장을 재배치 한다는 등의 작업은 적합하지 않다.
이벤트 스트림에서 문서 필터링(Filtering)을 할때
SAX는 XMLFilter 인터페이스를 제공하여 XMLReader에서 ContentHandler로 파싱 이벤트를 전달할 때, 파싱 이벤트를 가로채는 클래스를 정의할 수 있다. 필터의 문자열은 서로 다른 처리 함수로 선정하여, 여러 단계에서 문서 변환을 할 수 있다. 이는 뒤의 필터링 부분에서 보다 자세히 설명할 것이다.
서브 문서를 생성하고자 할 때
큰 파일을 다루고자 할 때 , SAX는 데이터가 요구되는 일부 부분을 포함한 문서의 서브셋을 생성하는데 사용될 수 있다. 그리고나서 DOM 은 그 데이터를 처리할 수 있다. 앞서 DOM tree를 생성하기 위해서 SAX를 사용하는 경우가 대표적인 예가 되겠다.
DOM을 선택해야 할 때
문서를 수정하고자 할 때
SAX는 읽기 전용이기 때문에 XML 문서를 수정할 수는 없다. 물론 SAX도 새로운 문서를 생성하여 원래의 문서가 수정된 것처럼 보이게 할 수 있지만, DOM을 사용하여 메모리에 저장된 문서를 기록하는 것 만큼 쉬운 방법을 제공하지는 못한다.
XML 프로세서는 해당 문서의 트리를 생성하여 응용 프로그램에 넘겨주며 DOM은 DOM 트리 안에 있는 노드들을 접근하여 다룰 수 있는 API 집합을 제공한다. DOM을 토대로 한 XML 프로세서는 메모리 안에 XML 문서에 대한 전체 구조를 생성하므로, XML 문서를 구조적으로 변경하는 것과 같은 문서 전반에 걸쳐 영향을 미치는 응용 프로그램에 적합하다. 결국 DOM은 문서를 수정하거나 구조를 변형하고자 할 때 많이 사용된다.
랜덤 엑세스(임의 접근)를 하고자 할 때
XML 문서의 서로 다른 노드를 앞뒤로 움직일 경우 SAX는 사용하기 어렵다. SAX는 처리하는 문서 전체의 상세한 사항과 요소들간에 어떠한 관계가 있는지 신경쓰지 않기 때문에, 문맥을 프로그램적으로 유지해야만 한다. 비록 SAX를 사용하여 문맥을 유지할 수는 있지만, 복잡한 문서 핸들링을 위해서, 문서안에서 앞뒤로 움직이고자 할 경우, SAX를 사용하면 몇가지 해결해야 할 문제가 있게 된다. 즉, 우선 문서를 읽어 들일 때 찾고자 하는 것이 무엇인지 알아야 하며, 값을 얻어낸 다음, 다음으로 문서를 읽어들여서 다른 값을 얻는 과정을 반복해야 한다. 결국 , DOM은 메모리상에 전체 트리를 유지하면서 랜덤하게 XML 문서를 엑세스하기 적합하다.
참고 링크 // http://www.machi.pe.kr/xml/open_xml/sax/
기억해야 할 것은 DOM과 SAX 는 상호 배타적이지 않다는 것이다. 이벤트들의 SAX 스트림을(연속된 문자열) 생성하기 위해서 DOM을 사용할 수 있고 , DOM tree를 생성하기 위해서 SAX를 사용할 수 있다. 사실 대부분의 파서들은 실지로 SAX를 사용해서 DOM 트리를 생성한다.
SAX를 선택해야 할 때
큰 문서를 핸들링 할 때
SAX의 주요 장점중 하나가 리소스 한계에 부딪히지 않고 기가바이트 단위의 큰 XML문서라도 읽어 들이고 파싱할 수 있다는 것이다. 왜냐하면, DOM트리를 메모리상에 생성하지 않기 때문이다. 구현하는 사람은 필요에 따라 원하는 이벤트안을 메모리에 띄워 놓을 수있다.
만약 서버상의 메모리 한계를 겪는다면 단호히 SAX를 사용해야 한다. 예를 들어 소설책들을 나열하기 위한 DTD 가 정의되어 있다고 가정하고, 당신이 소장하고 있는 소설책중에서 저자가 \"이문열\"인 모든것을 찾으려 한다고 하자. 이러한 특정한 일에 대해서, 검색에 관련이 없는 표지디자이너나 편집자, 발행인 등의 요소에 대한 설명을 검색할 필요는 없다. 그러므로 이럴때에는 엘리먼트중 저자를 제외한 나머지 요소는 무시하도록 클래스 인스턴스를 작성하면 된다.
문서로부터 특정한 값을 넘겨 받고자 할 때
SAX 는 XML 문서를 처음부터 끝까지 읽어들여, 다른 문서로 변환하기 위해 연산하거나 , 그 문서의 정보들을 처리하는 (예를 들어 특정 요소의 평균값을 계산하는 작업 ) 등에 적합하다. 그러나 간단한 요소의 내용이나 속성을 다른값으로 바꾸는 등의 간단한 목적에 사용될 수는 있어도 , 중쳤된 어떠한 요소들을 교환한다든지 하는 복잡한 연산등의 문서 구조 변환에는 적합하지 않다. 예를 들어 SAX를 사용하여 속성값이 \'greek\' 인 어떤 요소의 내용을 Greek 문자로 변환하는 등의 작업에는 적합하지만, 전체 책의 장을 재배치 한다는 등의 작업은 적합하지 않다.
이벤트 스트림에서 문서 필터링(Filtering)을 할때
SAX는 XMLFilter 인터페이스를 제공하여 XMLReader에서 ContentHandler로 파싱 이벤트를 전달할 때, 파싱 이벤트를 가로채는 클래스를 정의할 수 있다. 필터의 문자열은 서로 다른 처리 함수로 선정하여, 여러 단계에서 문서 변환을 할 수 있다. 이는 뒤의 필터링 부분에서 보다 자세히 설명할 것이다.
서브 문서를 생성하고자 할 때
큰 파일을 다루고자 할 때 , SAX는 데이터가 요구되는 일부 부분을 포함한 문서의 서브셋을 생성하는데 사용될 수 있다. 그리고나서 DOM 은 그 데이터를 처리할 수 있다. 앞서 DOM tree를 생성하기 위해서 SAX를 사용하는 경우가 대표적인 예가 되겠다.
DOM을 선택해야 할 때
문서를 수정하고자 할 때
SAX는 읽기 전용이기 때문에 XML 문서를 수정할 수는 없다. 물론 SAX도 새로운 문서를 생성하여 원래의 문서가 수정된 것처럼 보이게 할 수 있지만, DOM을 사용하여 메모리에 저장된 문서를 기록하는 것 만큼 쉬운 방법을 제공하지는 못한다.
XML 프로세서는 해당 문서의 트리를 생성하여 응용 프로그램에 넘겨주며 DOM은 DOM 트리 안에 있는 노드들을 접근하여 다룰 수 있는 API 집합을 제공한다. DOM을 토대로 한 XML 프로세서는 메모리 안에 XML 문서에 대한 전체 구조를 생성하므로, XML 문서를 구조적으로 변경하는 것과 같은 문서 전반에 걸쳐 영향을 미치는 응용 프로그램에 적합하다. 결국 DOM은 문서를 수정하거나 구조를 변형하고자 할 때 많이 사용된다.
랜덤 엑세스(임의 접근)를 하고자 할 때
XML 문서의 서로 다른 노드를 앞뒤로 움직일 경우 SAX는 사용하기 어렵다. SAX는 처리하는 문서 전체의 상세한 사항과 요소들간에 어떠한 관계가 있는지 신경쓰지 않기 때문에, 문맥을 프로그램적으로 유지해야만 한다. 비록 SAX를 사용하여 문맥을 유지할 수는 있지만, 복잡한 문서 핸들링을 위해서, 문서안에서 앞뒤로 움직이고자 할 경우, SAX를 사용하면 몇가지 해결해야 할 문제가 있게 된다. 즉, 우선 문서를 읽어 들일 때 찾고자 하는 것이 무엇인지 알아야 하며, 값을 얻어낸 다음, 다음으로 문서를 읽어들여서 다른 값을 얻는 과정을 반복해야 한다. 결국 , DOM은 메모리상에 전체 트리를 유지하면서 랜덤하게 XML 문서를 엑세스하기 적합하다.
참고 링크 // http://www.machi.pe.kr/xml/open_xml/sax/
소개글