메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Python-XML 기술의 현재 상태, 2003

한빛미디어

|

2003-12-26

|

by HANBIT

9,328

저자: 우체 옥버지(Uche Ogbuji), 역 전순재

첫 Python과 XML 기사 이후로 이제 1년이 되었다. 그 기사에서 필자는 Python-XML의 모든 것들을 광범위하게 조사하였다. 그때 이후로 다양한 테크닉, 패키지, 그리고 기타 유용한 자원들을 선택해서 자세하게 살펴보았다. 물론, 흥미롭거나 유용한 패키지 혹은 테크닉을 속속들이 살펴 볼 수는 없었지만, 이에 대한 내용은 내년으로 기약하기로 하겠다. 이 기사에서는 전반적으로 파이썬-XML 조사 내용 가운데 지난해에 눈에 띄는 개발들에 대해 다루었다. 많은 내용들이 이전 기사에서 언급된 것들이지만, 모쪼록 이 기사가 (본인의 견해로) 그런 목적의 달성을 위해서 가장 훌륭한 언어인 파이썬을 사용하여 XML을 처리하고자 하는 사람들에게 신속하게 출발할 수 있게 도움이 될 지침이 되어 주기를 바란다.

도서

첫 기사에서는 Python-XML을 자세히 다룬 책들에 대해 언급하였다. 올해에는 그 목록에 추가할 것이 별로 많지 않았다. 마크 필그림(Mark Pilgrim)의 『Dive Into Python』 제 5장에서 XML 처리를 다루는데, 이 책의 전자 텍스트는 자유롭게 얻을 수 있으며 전체적으로 아주 귀중한 리소스이다. 데이비드 머츠(David Mertz)가 집필한 『Text Processing in Python』(Addison Wesley)은 XML을 간략하게 다룰 뿐이지만, 자세하게 다룬 것들은 XML 처리를 많이 한다면 거의 불가피하게 필수적인 것이 될 것이다. 크리스토퍼와 프레드(Christopher A. Jones and Fred L. Drake, Jr.)의 『Python & XML』(O"Reilly and Associates)을 샀다면, 본인이 그 책에 대한 언급을 한 이전 기사를 참고하기 바란다.

소프트웨어

다음 목록은 현재 얻을 수 있는 Python-XML 소프트웨어 중에서 필자가 생각하기에 중요하다고 판단한 리스트로, XML과 조금이라도 관련이 있는 파이썬 소프트웨어를 모조리 다 나열한 목록은 아니다. 예를 들어 이 목록에는 pyglade가 없는데, 이 소프트웨어는 유닉스용 GNOME 데스크탑 사용자 시스템에서 사용자 인터페이스를 만들어 낸다. 해당 사용자 인터페이스 규격은 XML로 구성되어 있지만, 이를 파이썬용 XML 처리 도구라고 부르기에는 충분하지 않다. 포함의 기준은 우선 도구가 XML과 긴밀하게 연관된 테크놀로지나 테크놀로지 모둠을 구현하는가이며, 그 도구가 처리하기를 원하는 어떤 XML 파일에도 쓸모가 있게 그런 테크놀로지를 구현하는가이다.

XML 테크놀로지에 영역에 맞추어 목록을 조직하였다. 이렇게 하면 파이썬을 처음 접하는 사람들에게 파이썬으로 XML 테크놀로지를 다루는 법을 가뿐하게 보여줄 수 있으며, 특정 XML 처리에 접근하려면 어디로 가야할지 신속한 지침이 되어 줄 수 있기 때문이다. 나열된 프로젝트 하나하나의 활력도를 최근의 눈에 띄는 활동에 따라서 "약함", "꾸준", 또는 "강함"으로 평가하였다. 메일링 리스트 통화량, 배포횟수, 기사들, 그 프로젝트를 사용하는 다른 프로젝트들 등등을 참고해서 말이다.

일년 전, 필자는 34개의 Python-XML 프로젝트를 보고하였으며, 금년에는 24개를 추가하였는데, *로 표식하여 두었다. 그렇지만 추가한 프로젝트들은 대부분 Python-XML의 최전선에서 꾸준히 인상적인 활동을 하고 있어서 *로 표식하였다.

파이썬용 XML 처리 소프트웨어
이름 설명 활력

XML 해석 엔진

해석 엔진은 독보적인 저-수준 해석기를 제공함으로써 특징지워진다. 다른 능력들을 제공하는 엔진이 많지만, 이 섹션에서는 주로 여러 파이썬용 저-수준 XML 해석기를 문서화한다.

PyLTXML PyLTXML은 LTXML 해석기를 포장한 파이썬 확장이다. DTD 유효성평가를 지원한다. 꾸준
cDomlette cDomlette은 4Suite의 일부이다. 파이썬 API를 가진 빠른 C-기반 DOM 구현이다. expat 해석기의 포장을 포함한다. DTD 유효성평가를 지원한다. 또 XIncludeXML Base 그리고 XML 개체 카탈로그를 지원한다. 강함
libxml/python 이 파이썬 확장 모듈은 libxml을 포장한 것이다. DTD 유효성평가, XInclude (XPointer 포함), XML Base 그리고 XML Catalogs를 지원한다. 강함
pyRXP pyRXP는 RXP XML 해석기를 포장한 파이썬 확장 모듈이다. DTD 유효성평가를 지원한다. 꾸준
pyexpat Pyexpat은 PyXML의 일부이며 expat 해석기를 포장한 것이다. DTD 유효성평가를 지원한다. 강함
qp_xml qp_xml은 PyXML의 일부이다. 유효성평가가 지원되지 않고 전적으로 파이썬으로 작성된 간단한 해석기이다. 꾸준
xmlproc xmlproc은 PyXML의 일부이다. 전적으로 파이썬으로 작성된 해석기이다. DTD 유효성평가와 XML catalogs를 지원한다. 해석된 DTD 구조에 API로 접근을 제공한다. 꾸준

DOM

문서 객체 모델(Document Object Model)은 아마도 가장 유명한 XML용 API일 것이다. 그리고 파이썬 세계에 아주 잘 알려져 있다.

4DOM 4DOM은 PyXML의 일부이다. W3C DOM Level 2을 두루 구현하였다. 꾸준
cDomlette "XML 해석" 섹션 참조 강함
minidom 파이썬 버전 2.0 이상에서부터 minidom 모듈이 함께 포장된다. Minidom은 더욱 파이썬다워진 경량 DOM 구현이다. DOM Level 2의 일반적인 노선을 따른다. 강함
pulldom 파이썬 버전 2.0 이상에서부터 pulldom 모듈이 함께 포장된다. Pulldom은 오직 XML 문서에서 요구된 부분만을 적재하는 특수한 DOM-류의 구현이다. 강함
pxdom * pxdom은 순수한-파이썬 DOM 구현이고 비-유효성평가 해석기로서, DOM Level 3 코어인, XML, 적재와 저장 규격을 지원한다. pxdom은 DOM Level 1 과 2의 코어 테스트 모둠을 통과한다. 강함

데이터 엮기와 전문화된 API들

SAX와 DOM이 아마도 가장 저명한 XML 처리 API이겠지만, 많은 프로젝트에서 파이썬의 힘에 초점을 둔 API를 향해 싸우고있다.

Anobind * Anobind는 데이터 엮기로서 XPath와 Python 패턴을 사용하여 맞춤재단 엮기를 제공한다. 데이터 구조에서 XPath의 하부모둠을 지원하고, XML의 재-직렬화를 지원한다. 강함
ElementTree * XML 요소에 기반하여 전문화된 데이터 구조로 모든 종류의 계층적인 파이썬 객체를 관리하는 라이브러리이다. 데이터 구조에서 XPath의 하부모둠을 지원한다. 강함
PAX * 몇몇 API에는 반복자를 사용하여 XML 파일을 파이썬적인 데이터 구조로 변환하는 XML을 위한 파이썬적인 API이다. 또한 변환 엔진도 제공한다. 약함
POM * XML을 위한 파이썬 객체 모델(Python Object Model for XML)은 DOM-류의 라이브러리이지만, 파이썬의 관례를 보다 긴밀하게 따른다. POM 객체들은 또한 API 조작중에 DTD 제약을 동적으로 강제할 수 있다. POM은 PyNMS의 구성인데, 이는 네트워크 관리 어플리케이션에서 사용하기 위한 파이썬 모듈의 (어떤 것은 C로됨) 집단이다. 약함
Satine * Satine은 XML 문서들을 파이썬의 객체 리스트로 변환한다. 이 리스트는 XML 요소 속성들을 모사한 파이썬 속성을 가진다. 이를 "xlist" 데이터 구조라고 부른다. 또한 HTTP를 통하여 평범한 XML과 SOAP를 지원하는 웹 서비스 모듈들도 가지고 있다. 꾸준
Skyron * Skyron은 XML로 표현된 간단한 "요리" 파일에 따라서 XML 문서들을 변환하는 파이썬 모듈이다. 이 요리법은 XML 데이터를 파이썬의 처리자 코드에 묶는다. 꾸준
XBind * XBind는 언어-독립적인 데이터 엮기를 지정하는 XML 어휘집이다. 여기에는 원형 파이썬 구현이 따라온다 (링크를 따라가려면 XBind 튜토리얼의 섹션 7을 참조하자). 약함
XElf * XElf는 파이썬용 XML 처리에 바쳐진 모듈 모듬이다. 현재 이름공간과 XMLBase를 포함하여 파이썬 XOM 구현을 특징으로 하고 있다.XOM은 DOM과 JDOM을 개선하기 위하여 엘리어트 러스티 해럴드(Elliotte Rusty Harold)가 만든 자바용 XML 객체 모듈이다. 꾸준
generateDS.py * generateDS.py는 W3C XML 스키마 정의로부터 파이썬 데이터 구조를 만들어 내는 도구이다. 꾸준
gnosis.xml.objectify * 그노리스 유틸리티 모음집에서 이 모듈은 임의의 XML 문서를 파이썬 객체로 변환하는데, 사용자가 입맛대로 변환할 수 있다. 강함
xmlite * xmlite는 경량 XML 해석기이자 인쇄기로서 간단한 내포된 리스트를 내 놓는다. 꾸준
xmltramp * xmltramp은 사전을 주로 사용하여 XML 문서를 파이썬 데이터 구조로 변환한다. 강함

XPath 그리고 XSLT

XPath와 XSLT은 아마도 가장 범용적인 XML 처리 도구일 것이다. XSLT는 단순한 스타일 처리 도구가 아니라 (verbose를 사용한다면) 완전히 기능을 갖춘 XML용 스크립트 언어이다. XPath는 상상할 수 있는 거의 모든 XML 테크놀로지에 임베드되어 있다.

4XSLT 4XSLT는, 4XPath와 4XPointer가 그런 것같이 4Suite의 일부이다. 4XSLT는 EXSLT의 상당부분을 지원한다. 강함
Pyana Pyana는 Xalan XSLT 엔진을 포장한 파이썬 확장 모듈이다. 강함
libxslt/Python 이 파이썬 확장 모듈은 libxslt을 포장한 것이다. EXSLT의 상당 부분을 지원한다. 강함

(해석기 안으로 구축되어 들어가지 않은) 스키마 언어

스키마 언어로 XML 포맷을 교환할 수 있으며, 실체들이 제약을 만족하는지 평가하고, 심지어 XML 포맷을 위한 편리한 특징들을 만족하는지 평가한다. DTD는 원래의 스키마 언어이다, 그리고 보통 XML 해석기에서 구현된다 (그래서 구현을 제외한 나머지 대부분은 해석기에 관한 섹션에서 다룬다).

XSV XSV는 W3C XML Schema (WXS) 구현이다. 실제로는 처음의 WXS 구현물중의 하나로서, W3C의 온-라인 유효성평가기를 구동한다. 꾸준
XVIF XVIF는 RELAX NG를 구현한다, RELAX NG에서 XML 처리 파이프라이닝을 위한 XML 유효성평가 상호운용 작업틀(XML Validation Interoperability Framework)이 개선되었다. XML Regular Fragmentations의 구현이 포함된다. 4Suite에는 이 소프트웨어를 통하여 RELAX NG와 XVIF를 통합하는 실험이 포함된다. 꾸준
gnosis.xml.validity * 그노시스 유틸리티 모음집의 이 모듈은 XML DTD 유효성 제약을 파이썬 객체로 표현한다. 강함

프로토콜(Protocols)

최초에 가장 많은 논의된 XML 사용법중의 하나는 데이터를 한 어플리케이션(혹은 머신)에서 또다른 어플리케이션(다른 머신)으로 전송하는 것이다. 다음 도구들은 파이썬에서 사용되는 XML 편의를 제공한다.

파이썬 웹 서비스 이는 SOAP, WSDL, 그리고 관련 테크놀로지용 파이썬 모듈의 모음집이다. 꾸준
WDDX/Python PyXML에는 파이썬용 WDDX 모듈이 따라온다.     
XMLTP Light * XMLTP/L은 경량 XML-류의 RPC 프로토콜이다 (실제로는 XML의 하부모둠만을 허용한다). XMLTP/L는 인트라넷을 통하여 데이터베이스 서버에 빠르게 RPC 호출을 하기 위하여 기본적으로 디자인되었다. 파이썬과 C로 구현되었지만, 엮기는 자바로도 작성이 가능하다. 꾸준
wsdl4py wsdl4py는 WSDL 처리를 위한 간단한 파이썬 라이브러리이다. 또 uddi4py도 참조하자. 꾸준
xmlrpclib 파이썬 2.1에서부터 XML-RPC 클라이언트서버 모듈이 함께 포장된다. 강함

RDF 그리고 토픽 맵(Topic Maps)

자원 기술 작업틀(Resource Description Framework)은 메타데이트를 관리하기 위한 시스템이다. 그의 기본 직렬화 구문은 XML 어휘이다. 다음은 이런 RDF/XML 구문을 처리하는데 사용되는 파이썬 도구들이다.

4RDF 4RDF는 4Suite의 일부이다. 여기에는 RDF/XML와 NTriples 해석기, RDF 저장 시스템, 파이썬 삼중성분(triples) API와 Versa 질의 언어의 구현이 포함된다. 강함
RDFLib * Redfoot의 일부분으로 사용되는, RDFLib는 RDF/XML 해석기이며 삼중성분 저장고(triple store)이다. 강함
Redfoot Redfoot은 파이썬으로 작성된 RDF 서버이다. 약함
Redland/Python 이것은 Redland RDF 어플리케이션 작업틀을 위한 파이썬 인터페이스이다. 강함
TRAMP * TRAMP는 RDF/XML 문서와 파이썬 객체 사이의 데이터-엮기-류의 짝짓기이다. 꾸준
rdfxml.py * 가벼운 SAX-기반 RDF/XML 해석기이다. 꾸준
tmproc tmproc는 XML Topic Maps의 파이썬 구현으로서, ISO/IEC 13250 Topic Maps에 기반한다. 약함

기타

다음 라이브러리들은 파이썬을 위한 다양한 XML 테크놀로지를 구현한다.

4XLink 4XLink은 4Suite의 일부이다. XLink의 일부를 구현한다. 약함
4XUpdate 4XUpdate는 4Suite의 일부이다. XUpdate를 파이썬으로 구현한 것이다. XMLDiff에 의해서 생성된 차이 패치를 적용하는데 사용될 수 있다. 강함
Berkeley DB XML 파이썬 모듈 * Berkeley DB XML은 XML DBMS이며 여기에는 C++과 Java API를 모사한 Python API가 포함된다. 꾸준
JAXML * JAXML은 XML이나 HTML을 생성하기 위한 파이썬 함수 요청 구문을 제공한다. 꾸준
PXTL * PXTL ("Python XML Templating Language")은 XML 주형틀을 사용하여 XML, HTML과 기타 텍스트-기반의 문서 유형을 만들어 내는 도구이다. 강함
Pyxie Pyxie는 줄-지향적 XML 처리기이다. 약함
XIST "객체 지향적 XSLT"인, XIST는 쉽게 확장 가능한 DOM-류의 소스 뷰와 목표 XML 문서를 사용하여 트리 변환을 한다. 강함
XMLTools XMLTools은 그래픽적인 XML 트리 뷰어와 GTK 윈도우 라이브러리용 편집기가 포함된 소형 도구 모듬이다. 약함
XMLdiff XMLdiff는 두개의 XML 파일이나 DOM 트리사이의 중대한 차이를 알아내는 파이썬 도구이다. XUpdate 출력을 생성할 수 있다. 강함
c14n.py c14n.py는 PyXML의 일부이다. XML 규범화(canonicalization)를 구현한다. 강함
gnosis.xml.indexer* 그노시스 유틸리티 모음집에서 이 모듈은 XML 혹은 평범한 텍스트 파일로 완전한-텍스트 인덱스를 만들어 낸다. 강함
xml.sax 파이썬 2.0에서부터 SAX 모듈이 함께 포장되어 배포된다. 강함
xmlSiteMakerPy * xmlSiteMakerPy는 오프라인(즉, 정적인) 사이트 생성을 위한 파이썬-기반의 XML 그리고 XSLT 작업틀이다. 강함
xmlarch xmlarch은 파이썬으로 작성된 XML 골격구조 폼 처리기로서, SAX를 사용한다. 약함
xmlprinter * 모양을 갖춘(well-formed) XML을 만들어내는데 도움을 주는 경량 파이썬 모듈, 펄의 XML::Writer module에 영감을 받았다. 약함


다시 무슨일이 있었는지 돌아가 보자...

본 기사에서 분명히 몇 가지 리소스는 빠진 것이 있을 것이다. 필자가 간과한 것들에 대해서는, 과감하게 그것들을 말해 주길 바란다. 앞으로 개선하면서 그것들을 다룰 것을 약속한다. 필자는 각 글의 끝에다 새로운 혹은 새로이 발견된 자원들을 언급하며, 다시 편집하여 개선할 것이다. 파이썬과 XML로 좋은 것들을 새로이 발견해서 작업하고 있는 사람들은, 반드시 파이썬 XML SIG 메일링 리스트에 스펙을 포스트 해주기 바란다. 이것이 나와 다른 많은 사람들에게 여러분의 작업을 확실하게 알려주는 최선의 방법이다.

앤드류 클로버(Andrew Clover)는 이번달 갱신에서 분명히 주목 대상이다. 필자는 다양한 파이썬 DOM 구현의 준수 상태를 요약하는 놀라운 노력을 보고하였다. 이 표는 이제 HTML 문서 형태로 DOM 표준 준수라는 이름으로 얻을 수 있다.

클로버(Clover)는 또한 새로운 패키지 pxdom선언하였다. 이는 "독립적인 순수한 파이썬 DOM 구현이며 비-유효성평가 해석기로서, Level 3 Core인, XML, 적재와 저장 규격을 지원한다". pxdom의 초점은 표준의 준수이다. "W3C 규격을 완벽하게 지원한다. 아주 약간만 빗나갈 뿐... pxdom은 DOM L1/2 코어 테스트 모둠을 통과한다". 그렇지만 "pxdom의 요점은 효율성에 있지 않다. 일반적 속도와 메모리 사용은 대략 minidom과 4DOM 수준의 중간정도라고 예상할 수 있다. cDomlette의 속도에는 전혀 미치지 못한다." pxdom은 BSD-스타일 라이센스로 파이썬 1.5.2와 그 이후의 버전에서 호환된다.

pxdom은 PXTL을 위한 엔진으로 만들어졌다. 이 또한 클로버(Clover)가 선언하였다. PXTL ("Python XML Templating Language")은 XML 주형틀을 사용하여 XML, HTML, 그리고 기타 텍스트-기반의 문서 유형들을 생산하는 도구이다. PXTL도 역시 BSD-스타일 라이센스하에서 사용할 수 있다.

월터 드뤌드(Walter Dörwald)가 XIST 2.2선언하였다. 이는 XML-기반의 확장가능한 조판 생성기로서 파이썬으로 작성되었다(현재 버전 2.3이 필요함). 이 배포본에는 XSL-FO 출력 지원이 추가되었으며 코어에 많은 수정과 개선이 이루어졌다.

나는 또다른 Python-XML 데이터 엮기인, xmltramp을 발견하였다. 또한 TRAMP도 있는데 이는 RDF/XML 문서와 파이선 객체 사이에 데이터 엮기-류의 짝짓기를 제공한다.

PyMeld를 만났는데, 이는 "파이썬 객체 모델을 사용해서 [HTML]을 조작하는데 사용하는 경량 시스템이다". XML도 처리한다고 주장하지만, 분명히 비 표준 정규 표현식 모둠을 사용한다. 이 도구를 XML에 사용하는 것을 추천하지 않는다.

몇 달전에 나는 피트 올러(Pete Ohler)의 xmlite의 선언을 언급하였다. 이는 파이썬용 소형 유효성평가 XML 해석기이다. 말한 바와 같이, 그는 그 모듈을 소홀히 취급했다. 이제 소스포지의 xmlite에서 얻을 수 있다. 주의: xmlite는 내가 이전에 실수로 말한 것 같이, 유효성평가 해석기가 아니다.

샘 루비(Sam Ruby)가 새로운 파이썬용 XML API인, Lazy DOM선언하였다. 전혀 DOM 구현은 아니고, 오히려 약간 전문화된 데이터 구조 표현이다. 루비(Ruby)가 언급한 바에 의하면 "기본적인 비유는 모든 것이 배열이라는 것이다. 배열에서는 인덱스가 정수이거나, 태그 이름 혹은 속성 이름이다". 보다 정확하게 말하면 루비(Ruby)가 "사전"을 언급할 때는 배열을 의미한다. 그리고 이름공간을 대표하는 아주 똑똑한 메커니즘을 통하여 주어진 문자열들을 포함해서, 모든 키들은 문자열이다.

지난 기사에서 xmlSiteMakerPy를 소개하였다. 내가 한 언급은 폐기되었고, 다음의 갱신된 링크를 사용해야 한다.

앤드류 달케(Andrew Dalke)가 파이썬용 RSS 2.0 생성기인, PyRSS2Gen을 선언하였다. 달케(Dalke)는 PyRSS2Gen이 표준을 아주 잘 준수하면서 RSS 특징을 두루 지원하도록 개발하였다. 더 자세한 것은 선언을 참고하자.
TAG :
댓글 입력
자료실