XML 프로세서 배재대학교 김창수 sungu@markup.paichai.ac.kr
XML 프로세서개요 정의 XML 문서를읽어문서내용및구조에대한접근을제공하는소프트웨어 지원기능 엘리먼트, 속성, 엔티티정보생성 문서의정확성검증 XML 문서처리를수행하도록지원 2
XML 프로세서역할 XML 브라우저 XML 응용 SAX 범용 XML 프로세서 DOM Level 3 DOM Level 2 DOM Core XML DTD XML Document 3
객체모델기반 API - DOM 문서구조정보와컨텐츠를객체로이용 트리에기반한객체를이용함으로써 XML 문서의구조적변경작업에적합 XML 문서를메모리상에서공유할수있다는장점 메모리상에구체적인객체트리생성 XML 문서를다루기위한복잡한응용프로그램 ( 브라우저, 편집기 ) 에적합 메모리사용량이큼 4
이벤트기반 API SAX 문서전체구조정보를가지지않음 XML 문서를읽어나가면서이벤트발생 특정엘리먼트에대한이벤트발생시처리 문서의부분을처리할때유리 데이터구조조작에유리 응용프로그램을최적화가능 효율성이좋다. 5
DOM (Document Object Model)
DOM 개요 W3C 에서제안 Level 1 Recommendation 1998. 10. 1 Level 2 Recommendation 2000. 11. 13 Level 3 Working Draft 2002. 1. 14 HTML 과 XML 을위한 API 문서의논리적구조를정의 플랫폼과인터페이스에중립적임 객체지향적인터페이스 JavaScript 와 Java programs 를웹브라우저에이식하기위한 spec 에서시작 7
DOM 개요 문서에대한접근및조작 프로그래머의기능확장 문서생성 문서들의구조수정 엘리먼트와내용을추가, 수정, 삭제 XML Document (Content) XML DTD (Rules) XML Parser (Processor) DOM XML Application 1 XML Application 2 XML Application N 8
DOM 의노드와 API 관계 최상위노드 getdocumentelement() 다른조부모노드 조부모노드 getparentnode() 부모노드 현재노드 getchildnodes() 자식노드 getchildnodes().getitem(index) 9
DOM 으로표현한 XML 구조요소관계 (I) 문서형노드 주석노드 처리명령노드 표기노드 엔티티노드 문서노드 속성노드목록 요소노드 속성노드목록 자식노드들 엔티티참조노드 CDATA 노드 요소노드 처리명령노드 텍스트노드 주석노드 10
DOM 으로표현한 XML 구조요소관계 (II) < 단락 > 안녕하세요 </ 단락 > 단락노드 (Element) nodevalue = null nodevalue = 안녕하세요 내용노드 (Text-type) 11
DOM 역할 정보생성 정보출력 응용프로그램층 문서정보처리층 XML 프로세서 구조검증 문서로딩 문서저장 정보접근 정보추가 정보삭제 DOM API For XML/HTML 정보수정 XML Parser 1 XML Parser 2 XML Parser n Script Processor ECMAScript, VBScript ASP,PHP,CGI 통신층 저장층 Web/DB/XML File 12
DOM 구조 DOM Level 1 core, HTML & XML 문서모델에관한내용 navigation & manipulation DOM Level 2 스타일시트를적용한객체모델지원 문서에대한 style 정보를 manipulation 하는기능정의 DOM Level 3 DOM Level 2 Core 에기반 문서의스타일, 내용, 구조에동적접근및갱신 13
DOM Level 1-Core DOM API DocumentFragment Document 기본인터페이스 확장인터페이스 DOMImplementation DOMException Node NodeList NameNodeMap DocumentType Element Attribute CharacterData Entity EntityReference Text Comment CDATASection Notation ProcessingInstruction 14
DOM Level 1-Core DOM API 기본인터페이스 DOM Exception DOM operations 의예외적인상황에서예외처리 DOM Implementation Operation 를수행하기위한많은 method 제공 DocumentFragment "lightweight" or "minimal" Document object Document HTML 또는 XML 문서표현 문서의 root는 tree를개념적으로표현 15
DOM Level 1-Core DOM API 기본인터페이스 Node DOM 의주된 datatype document tree 에서단일노드표현 NodeList Node 들의집합에서 node 추출 NamedNodeMap Name 으로접근할수있는 node 들을나타내는데사용 NodeList 로부터상속을받지못함 CharacterData character data 의 method 나 attributes 의집합을가진확장된 Node 16
DOM Level 1-Core DOM API 기본인터페이스 Attr (Attribute) Element object 의속성을표현 Text Element 나 Attr 의문맥적내용을표현 Comment 주석을표현 17
DOM Level 1-Core DOM API 확장인터페이스 DocumentType 엔티티정보, Notation 정보, DTD 문서형을취급 Entity DocumentType의속성값으로 DOM 트리구성에서제외 EntityReference에의해 DOM 트리에삽입 EntityReference( 엔티티참조 ) Notation( 표기법선언 ) ProcessingInstruction( 처리명령 ) CDATASection(CDATA 섹션처리 ) 18
DOM Level 1-DOM HTML Core DOM 기반으로 HTML 문서핸들링을위한인터페이스 HTML 에맞는인터페이스만추가로정의 HTML4.0 에정의된모든태그에대해각각의타입등록 HTML 태그각고유의추가적인속성및기능가짐 19
DOM Level 2 문서의문맥과구조, 스타일을동적으로접근하고갱신하기위한플랫폼, 중간언어인터페이스 XML, HTML, 추상적뷰, 일반적스타일시트, CSS, 이벤트, 문서구조와객체범위의변화를결정하기위한구체적인인터페이스 20
DOM Level 2 Core (with namespace) Extends Depends XML 1.0 HTML Range Traversal Views Events Style Sheets Mutation Events HTML Events User Interface Events CSS1 Mouse Events CSS2 21
DOM Level 2 DOM Level 2 Core DOM Level 1 Core 을기반으로작성 DOM Level 1 Core Vs. DOM Level 2 Core DOM Level 2 specifications 은 CORBA 2.2 대신 CORBA 2.3.1 사용 DOM Level 1 Core interfaces 와 exceptions 변화 Type 의변화 DOM Level 2 Events DOM Level 2 Core 와 DOM Level 2 Views 에서프로그램 일반적인이벤트시스템에스크립트나프로그램을위한인터페이스정의 22
DOM Level 2 DOM Level 2 Views DOM Level 2 Core 기반에서작성 문서를표현하는내용을업데이트 동적으로접근하기위한스크립트나프로그램을위한인터페이스를정의 DOM Level 2 Style DOM Level 2 Core 와 DOM Level 2 Views 기반위에서작성 문서의스타일이나내용을업데이트 스크립트나프로그램을작성하는인터페이스나 DOM Level 2 Style Sheets, CSS 를정의 23
DOM Level 3 DOM Level 2 Event Specification 에명시된기능을확장 DOM Level 2 에이미정의된 modules 을새로운인터페이스로추가 DOM Level 2에이미정의된 interface들을기본으로설계 24
DOM Level 3 Core (with namespace, XML base) Extends Depends XML 1.0 HTML Abstract Schema Range Traversal Load/Save Views XPath Events Load/Save Abstract Schema Style Sheets Mutation Events HTML Events User Interface Events CSS1 Keyboard Events Mouse Events CSS2 25
DOM Level 3 Core 요구사항 White space 처리 XML 선언과 CDATASection 선언의명확성구분 특정클래스를사용하기위해 Java에서 DOM 로딩 노드식별 Namespace의검색과수정 예외사항처리 노드정렬처리 다른문서로의노드이동 26
DOM Level 3 Events 요구사항 Level 2 의 Events Spec 에서처리되지않고언급되지않은 Event 들을처리 EventListener grouping Key event set 키보드입력을다루는 Key event 들의집합 Input event set 키보드입력에기반한 IME(Input Method Editor) 를다루는 Input event 들의집합 Device independent event set 27
Document object properties attribute lastchild parentnode childnodes nextsibling pasererror doctype nodename previoussibling documentelement nodetype readystate firstchild nodevalue url Implementation ownerdocument 28
Document object properties attributes property 현재노드에대한속성목록을반환 기본구문 objattributelist = xmlnode.attributes; Details Null 이아닌경우객체반환 속성을포함할수없음 childnodes property 현재노드의모든하위노드목록반환 기본구문 objnodelist = node.childnodes; Details Null 이아니면객체반환 29
Document object properties doctype property 현재문서에대한 DTD 의문서형반환 기본구문 objdoctype = xmldocument.doctype; Details Null 이아니면객체반환 읽기속성만가짐 documentelement property XML 문서의최상위노드지정 기본구문 objdoc = xmldocument.documentelement; Details Null 이아니면객체반환 읽기 / 쓰기속성 30
Document object properties firstchild property 현재노드의첫자식노드지정 기본구문 objfirstchild = xmldocnode.firstchild; Details Null 이아니면객체반환 읽기속성 implementation property 현재 XML 문서에대한 DOM 구현객체를지정 기본구문 objimplementation = xmldocument.implementation; Details Null 이아니면객체반환. 읽기속성 31
Document object properties lastchild property 현재노드의마지막자식노드지정 기본구문 objlastchild = xmldocnode.lastchild; Details Null 이아니면객체반환 읽기속성 nextsibling property 현재문서노드의자식목록중에서다음형제노드반환 기본구문 objnextsibling = xmldocnode.nextsibling; Details Null 이아니면객체반환 읽기속성 32
Document object properties nodename property 현재노드의이름반환 기본구문 objnodename = xmldocnode.nodename; Details 문자열반환 (element, attribute, entity reference). 읽기속성 ownerdocument property 현재노드를포함하고있는문서의최상위노드반환 기본구문 objownerdoc = xmldocument.ownerdocument; Details 읽기속성 문서에대한최상위노드를갖는객체반환 33
Document object properties nodetype property 주어진노드에대한 DOM type 지정 기본구문 numnodetype = xmldocnode.nodetype; Details 정수값반환 ELEMENT(1) ATTRIBUTE(2) TEXT(3) CDATA(4) ENTITY REFERENCE(5) ENTITY(6) PI(7) COMMENT(8) DOCUMENT(9) DOCUMENT TYPE (10) DOCUMENT FRAGMENT(11) NOTATION(12) nodevalue property 노드의문자값반환 기본구문 varnodevalue = xmldocnode.nodevalue; Details 노드의타입에따른값반환 34
Document object properties parentnode property 현재노드의부모노드반환 기본구문 objparentnode = xmldocumentnode.parentnode; Details 읽기속성 previoussibling property 현재노드바로이전에나타난형제노드반환 기본구문 objprevsibling = xmldocument.previoussibling; Details Null 이아니면객체반환 읽기속성 35
Document object properties parsererror property DOM parse 오류객체반환 기본구문 objparsererr = xmldocument.parsererror; Details 오류가없으면 0 읽기속성 url property 가장최근로드된 XML 문서의 URL 반환 기본구문 strdocurl = xmldocument.url; Details 읽기속성 36
Document object properties readystate property XML 문서의현재상태반환 기본구문 intstate = xmldocument.readystate; Details 상태에따라정수값반환 0-UNINITIALIZED, 1-LOADING, 2-LOADED, 3-INTERACTIVE, 4-COMPLETED 읽기속성 37
SAX (Simple API for XML)
개요 큰 XML 문서를보다효율적으로분석할수있도록하기위해서개발 이벤트기반의표준 API 제공 Java 에의해정의 Perl 버전 Python 버전 독립적인파서로구현 XML-DEV 에의해주도 1998 년 5 월 SAX 1.0 발표 2000 년 5 월 SAX 2.0 발표 외부엔티티지원 Namespace 지원 39
구조 Parser Factory XML Document Document Handler SAX Parser Error Handler DTD Event Handler Entity Resolver 40
SAX Input Type InputSource : InputSource Class 사용 Java s Input/output 는 characters or byte Stream 을사용 InputSource 는 Unicode Character or byte Stream 을생성 URI : Uniform Resource Identifier 사용 File name URL (uniform Resource Locator) 41
SAX 이벤트 startdocument / enddocument 문서의시작 / 끝을알림 startelement 엘리먼트의시작을알림 엘리먼트내의모든속성과태그명을포함 endelement 엘리먼트의끝을알림 Characters character data 포함 DOM 의 Text 노드와유사 ignorablewhitespace 모든 whitespace 노드무시 warning, error, fatalerror 파싱오류를표시 42
SAX 인터페이스 XMLReader 구문분석시동, 이벤트처리기등록 구문분석도중에도다른이벤트처리기로재등록가능 setentityresolver(); getentityresolver(); getdtdhandler(); setcontenthandler(); getcontenthandler(); seterrorhandler(); geterrorhandler(); parse() DTDHandler SAX 구문분석기가구문분석중에 DTD 이벤트처리기에대한인터페이스 표기선언및구문분석되지않은개체선언을선언순서에관계없이호출하여알려준다 43
SAX 인터페이스 ContentHandler SAX 구문분석기가구문분석중에발생하는문서이벤트의처리를위한인터페이스 Application create Content Handler Feedback When event driven give parsing startdocument() characters() enddocument() endelement() startelement() Parser Event driven 44
SAX 인터페이스 ErrorHandler SAX 구문분석기가구문분석중에발생하는오류이벤트처리기에대한인터페이스 Locator warning(saxparserexception exception) error(saxparserexception exception) fatalerror(saxparserexception exception) XML 문서의현재위치를알아내기위한인터페이스 ContentHandler 인터페이스메소드내에서만호출 getpublicid(); getsystemid(); getlinenumber(); getcolumnnumber(); 45
SAX 인터페이스 EntityResolver SAX 구문분석기가구문분석중에외부개체처리의커스터마이즈화 SAX 파서가파일이름과 URL 을분석할수있기때문에 EntityResolver 구현불필요 resolverentity() AttributeList 일련의속성을전달받는다 getlength(); geturi(); getlocalname(); getqname(); getindex(); getindex(); gettype(); gettype(); gettype(); getvalue(); getvalue(); getvalue(); 46
SAX 인터페이스 ParserFactory class 파서객체를생성하며파서를위한클래스이름을가진다. HandlerBase class 각인터페이스를다음과같이동작하도록구현함. DocumentHandler 인터페이스 ErrorHandler 인터페이스 : 경고, 회복가능한오류는무시하고, 치명적오류의경우에는해당 SAXParseException 예외사항발생 DTDHandler 인터페이스 : DTD 이벤트를무 EntityResolver 인터페이스 : InputSource 로 null 을반환 47
SAX 2.0 Vs. SAX 1.0 기본적으로 namespace 제공 XMLReaderAdpater 는 SAX2 XML Reader 를 SAX1 파서로쓰기위해제공 ContentHandler 와 Attributes 역시 DocumentHandler 와 AttributeList 에 namespace 를제공 ParserAdapter 는 SAX1 파서를 SAX2 XMLReader 로쓰기위해제공 48
SAX 2.0 Core Features Namespace Processing Namespace Prefix Reporting SAX 2.0 XMLReader Implementations getfeature() : obtain feature setfeature() : set feature String Interning Validation Process External Entities 49
SAX 2.0 Core Features Namespace Processing http://xml.org/sax/features/namespaces SAX namespace callback 을통해 namespace processing 을처리하기위해파서에지시 true 일경우에만 processing 발생 Namespace prefix reporting feature 에도적용 Validation http://xml.org/sax/features/validation 유효성검사를요청하고 SAX ErrorHandler 인터페이스를통해발생한오류결과제공 false 일경우는유효성검사를하지않음 50
SAX 2.0 Core Features Namespace Prefix Reporting http://xml.org/sax/features/namespace-prefixes Namespace declaration 에서사용되는속성들의리포트를위해파서에지시 동작되지않을경우 (false) 에 namespace 에관련된속성들은리포트되지않음 파서는관련속성들을이용하여 URI Mapping 되는 namespace prefix 를발견 namespace processing 이동작될때, 일반적으로 namespace prefix Mapping 동작을중지 String Interning http://xml.org/sax/features/string-interning 모든 element raw 와 local name, namespace prefix, namespace URI 를제시 51
SAX 2.0 Core Features Process External Entities (General) http://xml.org/sax/features/external-generalentities XML 문서내에서처리되는모든일반엔티티들을요청 Process External Entities (Parameter) http://xml.org/sax/features/external-parameterentities 외부 DTD 의 subset 으로정의된엔티티를포함하여, 파싱된모든외부파라메터엔티티들을요청 52
SAX 2.0 Core Properties Parsing Process 에서사용되는 Object 들의처리방법제공 SAX 2.0 Handler 의 core set 에포함되지않는 Handler(LexicalHandler, DeclHandler) 들을처리 53
SAX 2.0 Core Properties Property Description URI Lexical Handler Declaratio n Handler DOM Node Literal (XML) Handler XML 문서내의주석과 DTD reference 들을핸들링하기위해사용되는 LexicalHandler implementation 의설정과검색을처리 DTD 의구조적정의를핸들링하기위해사용되는 DeclHandler 의설정과검색을처리 파싱이이루어질때처리되는현재위치의 DOM 노드를검색하고, 파싱이이루어지지않을시에는 DOM 의최상위노드를검색 이 property 가사용될때프로세스내에서이벤트가트리거된 XML 문서내의리터럴문자들을검색 http://xml.org/sax/properti es/lexical-handler http://xml.org/sax/properti es/declaration-handler http://xml.org/sax/properti es/dom-node http://xml.org/sax/properti es/xml-string 54
SAX 의한계 데이터를 SAX 가주는순서대로받는다. 파서가문서를탐색하는순서는어떤통제할수없음. SAX 방식에서는사전식정보를주지않음. SAX 가사용하는원래문서의정확한복사본을만들수가없다. SAX 1.0 에 DTDHandler 인터페이스가정의되어있어도 DTD 에대한어떤실제적정보도제공하지못함 읽기전용 문서의요소들을조절할수없다. 55
SAX & DOM 구분 DOM SAX 정의 Document Object Model Simple API for XML 주요요소 장점 Object children, tree structure 문서의모든부분가능 구조적정보를갖는다. DTD 를지원 node 생성 / 수정가능 XSLT 및 XPath 지원 Event every title itself Eventhandler 간단하다. 메모리를덜차지함. 빠르다. 실시간문서처리가능 filtering 56
DOM & SAX 구분 DOM SAX 단점 적용분야 무겁고느리다. 메모리많이차지 구조적접근이필요할때 특정부분으로이동할때 문서정보를쉽게파악할때 모든요구를조절할수없다. 정확한정보가없다. 정확한복사를할수없다. DTD 를지원하지않는다. node 생성 / 삭제불가 단지문서를읽기만함. catch and re-create 문서일부분을읽을경우 유효성처리 데이터변환 동일오류처리 57
결론 정보의개방환경에서이기종시스템간의정보교환이증대 XML 문서의사용이증대되고사용범위가확대되고새로운응용도증가 표준 API 를이용한전자문서처리환경에적용가능 응용도구들이 DB 나파일에대한처리하여다양한결과를얻을수있다 XML 프로세서는웹상에서문서표현및전달기능제공 웹에서사용할수있는메타미디어유용성제공 기존시스템의데이터및문서의많은부분을대체 새로운응용및시스템을도출 인터넷의새로운요소기술로자리매김 응용프로그램구축에다양한아이디어제공 58