마이크로소프트사의 오피스 2007 문서들은 Open XML이라고 하는 ECMA 및 ISO 표준 문서 포맷을 따른다. Open XML은 XML 기반의 문서 포맷으로 관련된 요소들을 zip으로 압축한 형태이기 때문에 표준 압축 해제 툴로 내용을 들여다 볼 수 있다. xml 스키마와 관련 요소를 묶는 zip 기술 기반의 이런 패키징 기술은 OPC (Open Packaging Convention)이라는 좀 더 범용 규칙을 따르며, 이 OPC를 따르는 또다른 문서 포맷으로는 보고서용 Readonly 파일로 자주 사용되는 XPS (XML Paper Specification)이 있다. 이러한 OPC 기반의 파일 포맷들은 기본적으로는 .NET Framework의 System.IO.Packaging 네임스페이스가 제공하는 저수준 API를 통해 입출력 등이 가능하다. 이것에 대한 예제는 Windows SDK에 포함되어 있으니 참고하기 바란다.

System.IO.Packaging 기반으로 Open XML 파일 포맷을 다루는 데 있어 좀 더 나은 개발 경험을 전달하기 위해 제공되는 것이 Open XML Format SDK이다. 현재 Open XML Format SKD 2.0 April CTP까지 나와 있으며 1.0 버전과 비교했을 때 가장 달라진 것은, 1.0에서는 W3C XML DOM 모델을 따라 프로그래밍을 하였는데, 2.0에서는 LINQ를 통해 XML 문서를 다룰 수 있게 된 것이다. Open XML Format SDK에 대한 좀 더 상세한 설명은 아래 MSDN 싸이트를 참고하시길...
http://msdn.microsoft.com/en-us/library/bb456487(office.14).aspx

한편, Open XML Format SDK 기반으로 좀 더 나은 사용자 경험을 제공하기 위한 라이브러리로 Simple OOXML이 codeplex를 통해 오픈 소스로 제공되고 있다. 소스 코드까지 공개되어 있으며 LGPL 라이선스 정책을 따른다. Simple OOXML 라이브러리를 사용하기 위해서는 반드시 위에서 언급한 Open XML Format SDK가 설치되어 있어야 한다. Simple OOXML을 이용하면 오피스 제품이 설치되어 있지 않아도 템플릿 기반으로 쉽게 새로운 오피스 문서를 만들어낼 수 있다.

Open XML에 대한 새로운 소식은 OpenXMLDeveloper.org에서 살펴볼 수 있다.

image

Posted by 장현춘

댓글을 달아 주세요

지금까지 지구상에 존재하는 가장 많은 문서 포맷이 Microsoft Office 문서, 특히 오피스 바이너리 포맷 형태 (doc, xls, ppt) 의 문서이다. 바이너리 포맷이기 때문에 이들 문서를 프로그램에서 다루기 힘들며, 일반적으로 텍스트기반 문서 포맷보다 유연성이 떨어진다. 따라서 이들 바이너리 문서 포맷을 ISO가 문서 표준 포맷으로 지정한 XML기반의 Open XML이나 ODF와의 호환성 혹은 컨버터에 대한 관심이 높아지고 있다. 이전 버전의 오피스 문서 (doc, xls, ppt)를 Open XML 기반의 문서로 변환시켜주는 툴 및 가이드를 제공하기 위한 프로젝트가 진행중이다.

image

현재 M2 (Milestone 2) 버전이 공개되어 있으며 각 파일별로 Translator가 제공되고 있다. 즉, 파워포인트용 ppt2x.exe, 엑셀용 xls2x.exe, 워드용 doc2x.exe가 각각 소스코드와 함께 공개되어 있다. 이 Translator 프로젝트에는 오피스 제품용 OpenXML/ODF 변환기를 제공하는 독일 기업인 DIaLOGIKa가 핵심 기능을 제공하고 있다. 전체 아키텍처는 다음과 같다.

architecture

예전 블로그에서 한번 소개한 적이 있지만 업데이트 차원에서 찾아보니, 2007년 5월 시작된 OpenXML4J 프로젝트가 2008년 4월 11일 베타 상태의 결과물을 제공하기 시작했다.

OpenXML4J는 자바에서 OOXML (Office Open XML), 즉, 마이크로소프트 오피스 기반의 국제 표준인 Open XML을 통해 만들어진 문서를 쉽게 사용할 수 있는 일종의 XML 관련 라이브러리이다. OOXML은 XML 기반의 몇몇 스키마와 이들을 zip 압축 형식으로 묶은 파일이기 때문에 일반 프로그래밍 언어가 제공하는 로레벨의 압축해제 API나 XML 관련 API를 통해서도 접근 가능하다. 하지만, 우리 주변의 늘 그러했듯이 몇몇 사람의 헌신적인 노고에 의해 수많은 개발자가 로레벨의 더티한 일에서 벗어나 지적 능력을 좀 더 생산적인 일에 집중할 수 있도록 만들어주는 자바 라이브러리이며 오픈 소스 형태로 개발되고 있다.

OpenXML4J 프로젝트 홈 페이지

  현재 OpenXML4J의 전체 아키텍처는 다음과 같다. 아래 그림에서 보듯이 OpenXML4J는 오픈 소스 라이브러리인 DOM4JXMLBeans를 통해 XML 처리 작업을 하고 있으며 그외 Log4J를 이용하여 로깅을 수행하고 있음을 알 수 있다.

image
또한 그림에서 보듯이 OOXML의 기본적인 파일 구성 형태라 할 수 있는 OPC (Open Packaging Convention)를 기본으로 지원하기 때문에 XPS (XML Paper Specification) 문서 포맷도 함께 지원할 수 있는 구조이며, OPC 기반의 OpenXML 문서 포맷 지원을 위해 각 구성 요소인 WordProcessingML,  SpreadsheetML, PresentationML 등 도 로드맵을 가지고 하나씩 구현해 나가고 있다. OPC는 XPS 스펙 정제 과정에서 추출되어 별도의 표준적인 파일 패키징 방식으로 만든 것으로 마이크로소프트 오피스 문서들이 이에 기반하고 있다.

OPC 및 XPS에 대한 좀 더 자세한 설명은 다음을 참조하도록 한다.
XPS Specification
Microsoft XPS Team Blog
XPS 문서 뷰어

가끔 고객사를 방문하다보면, 엑셀 등 마이크로소프트 오피스 문서의 막강한 기능을 자바 프로그래밍에서 활용하고자 고민하는 경우가 있다. 단순히 엑셀 등으로 추출해내는 것이 아니라, 엑셀 자체를 읽고 값을 변경하고 다른 문서와 병합하고 하는 등등의 작업을 자바에서 진행하기란 쉬운일이 아니다. 이런 경우 상용 패키지를 도입하여 해결하는 경향이 많았다. OpenXML4J와 같은 라이브러리가 상용 패키지 만큼의 완성도나 고수준의 API를 제공하지는 못하지만, 문제 해결을 위한 새로운 시각을 제시해줄 수 있을 것으로 생각한다. 이와는 별도로 Open XML을 지원하지는 못하지만, 즉 최신 버전의 Microsoft Office 2007을 지원하지는 못하지만, 예전버전의 오피스 문서에 대한 접근을 용이하게 해주는 라이브러리로써 Apache Jakarta 프로젝트중 하나인 POI 프로젝트가 점차 인지도를 높여가고 있다.

image

Posted by 장현춘

댓글을 달아 주세요

마이크로소프트 오피스 문서 기반으로 ECMA 표준이자, 얼마전 ISO 국제 표준으로 결정된 OOXML (Office Open XML)에 대한 이의 신청이 기각됐다. ISO 표준으로 결정된 것에 대한 부적절함을 주장하며 이의 신청을 제기한 국가는 브라질, 인도, 남아프리카, 베네수엘라 4개국이며, 이에 대해 ISO 측은 이들의 주장이 ISO의 Technical Management Board와 IEC (International Electrotechnical Commission)의 Standardization Management Board의 3분의 2의 지지를 얻는데 실패했기에 기각되었다고 발표했다. 이로써 더 이상의 이의 제기가 없다면 수주일 내로 OOXML은 ISO의 공식 문서 표준으로 공표되게 된다.
OOXML의 ISO 표준과 관련하여 IBM, Google 등이 주축이 된 ODF (Open Document Format) 진영에서는 복수 표준 허용이 부당하다며 반대를 표명하였고, 반면 마이크로소프트, 애플 등은 ODF 표준의 허술함과 역사적으로  네트웍 프로토콜이나 이미지 포맷 등 수많은 예에서 보듯이 복수 표준이 IT 발전에 기여한 바를 설명하며 OOXML의 ISO 표준을 적극 지지한 바 있다. 결론은 전 세계 회원국의 투표에 의해 OOXML은 ECMA 표준에 이어, ISO 국제 표준으로도 승인 받은 바 있다. 그 과정에 대해 위 4개국은 이의 제기를 한 것인데, 이에 대해 기각 결정이 내려진 것이다.

관련문서
ISO and IEC members give go ahead on ISO/IEC DIS 29500
ISO, IEC reject appeals, approve OOXML spec
ISO rejects appeals against Microsoft`s OOXML format

Posted by 장현춘

댓글을 달아 주세요

Open XML은 마이크로소프트 오피스 2007의 기본 문서 포맷이며, ECMA 표준으로 등록되어 있는 문서 표준이자 현재 ISO 표준 인가를 위한 최종 투표 절차를 밟고 있다. Open XML은 기본적으로 XML과 zip이라는 널리 알려진 기술 기반으로 Open Packing Convention이라는 별도의 스펙으로 문서 포맷에 관한 표준적인 방식을 제공하고 있다. 참고로, Open Packing Convension을 따르는 또 다른 문서 규격으로 XPS (XML Paper Specification)이 있다.

현재 Open XML을 지원하는 구현물로는 마이크로소프트 오피스 이외에도 코렐 오피스, Altova XML Spy, PythonOffice, 썬의 스타오피스, 맥용 Neo Office, 리눅스용 Gnumeric(스프레드쉬트) 등 플랫폼을 막론하고 다수의 제품에서 지원하고 있다. 또한 한글과 컴퓨터의 ThinkFree 오피스도 내부적인 문서 포맷으로 Open XML을 사용할 것이라고 밝힌바 있다. 또한 구글도 Open XML을 지원하는데,  검색을 하면 오피스 문서 내용을 파악하여 표시되고 표시되고 이를 "HTML 버전"로 온라인 상에서 렌더링해 보여주고 있다. 구글 검색창에 "filetype:pptx"를 친 후 검색 결과 중에 pptx를 클릭하면 온라인 상에서 파워포인트 내용이 보여지는 것을 볼 수 있다. 또한 Open XML의 표준인가를 강하게 반대해 온 IBM 조차도 자사의 제품 일부에서 이미 Open XML 포맷을 지원하는 것으로 나타났다.

일주일 전, 마이크로소프트는 작년 6월경에 CTP 형태로 배포했던 Open XML SDK에 대한 로드맵을 발표하였다. CTP 이후 개발자로부터의 피드백을 바탕으로 두 단계에 걸친 로드맵을 발표한 것이다.

Open XML SDK roadmap: timeline

위 그림에서 보듯이 버전 1.0은 2008년 5월에 최종 릴리스될 것이며 이때는 Open XML을 다루기 위해 좀 더 쉬운 API 셋을 제공하게 될 것이다. 버전 2.0은 다음 버전의 오피스와 때를 맞추어 출시될 것으로 보이며, 이때는 시나리오 기반의 기능 구현 및 검색, Validation 등의 고급 기능을 제공할 예정이다.  지금까지 Open XML 문서를 다루기 위해서는 .NET Framework 3.x에 포함되어 있는 낮은 수준의 클래스 API를 사용할 수 밖에 없어서 개발자들이 많은 수고를 해야했다. 좀 더 자세한 설명은 OpenXMLDeveloper.org를 참고하시실..

Open XML SDK에 대한 좀 더 많은 정보는 아래 싸이트에서 찾아볼 수 있다.
Doug Mahugh 블로그
OpenXMLDeveloper.org
Eric White의 동영상블로그
MSDN의 How Do I 시리즈

Posted by 장현춘
TAG open XML

댓글을 달아 주세요

  1. 조은화 2008.05.28 18:20  댓글주소  수정/삭제  댓글쓰기

    네이버에서 Open XML 검색해서 왔는데 잘 아는분 사진이 있어서 방가워 흔적을 남기고 갑니다..ㅎㅎ
    아이와 함께 있는 사진 넘 멋져요.^^