저는 VOS와 OpenVOS에서 XML(확장 가능한 마크업 언어) 데이터를 처리하는 방법에 대해 조사를 해왔는데, 제가 알게 된 내용을 더 많은 분들과 공유하면 도움이 될 것 같아 이 글을 씁니다.
XML이란 무엇인가?
다음의 XML에 대한 설명은 데이브 머서(Dave Mercer)의 『XML: 초보자를 위한 가이드』(Osborne/McGraw Hill, 2001)에서 발췌한 것입니다.
“SGML(Standard Generalized Markup Language)은 사람이 읽을 수 있고 기계가 읽을 수 있는 정보를 표현하는, 장치 및 시스템에 독립적인 방법을 정의하기 위한 국제 표준(ISO 8879)입니다. SGML의 규칙을 따르는 언어를 ‘애플리케이션’이라고 부르며, HTML은 SGML 애플리케이션입니다. […] HTML에는 새로운 태그, 속성, 데이터 구조 또는 콘텐츠 유형으로 표준화된 방식으로 확장할 수 있는 기능이 없습니다… XML은 HTML과 같은 미리 정의된 언어가 아니라, SGML의 지나치게 복잡한 특성을 피하면서 새로운 언어를 정의하는 미리 정의된 방식입니다. 기술적으로 XML은 SGML에서 발견되는 기능의 일부를 포함하고 있습니다.”
XML 스키마는 특정 XML 문서(또는 문서 집합)를 정의하는 방법입니다. 이는 데이터베이스를 정의하는 것과 유사하게, 문서의 구조를 설명하며 여기에는 사용 가능한 요소, 속성, 데이터 유형 및 제약 조건이 포함됩니다.
XML 문서 유형 정의(DTD)는 스키마와 유사한 역할을 합니다.
XML은 10년 넘게 사용되어 왔으며, 수많은 경쟁 제품과 기법이 존재하고 관련 표준도 다수 마련되어 있습니다. 또한 XML에 관한 전문 서적도 많이 출간되어 있습니다. O’Reilly에서 출간한 “Learning XML”이라는 책이 도움이 될 수 있습니다. www.oreilly.com을 참조하십시오. O’Reilly에서 운영하는 http://xml.com/ 웹사이트에는 유용한 기사와 링크가 다수 수록되어 있습니다.
XML 표준은 월드 와이드 웹 컨소시엄(World Wide Web Consortium)에서 발표하며, 해당 웹사이트 주소는 http://www.w3.org입니다. 표준 문서는 꽤 난해하므로 직접 읽어보시지는 않는 것이 좋습니다.
XML은 HTML과 유사하며 HTML과 비슷한 기원을 가지고 있지만, 훨씬 더 범용적인 인코딩 방식입니다. HTML은 웹 페이지에 표시될 때 데이터가 어떻게 보여야 하는지를 기술합니다. HTML 자체만으로는 숫자가 수량, 가격, 재고 번호를 나타내는지 여부를 기록하지 않습니다. 반면 XML은 일반적으로 데이터가 어떻게 보이는지에 대해서는 신경 쓰지 않으며, 데이터가 무엇을 의미하는지를 기술합니다. XML의 일반적인 용도 중 하나는 특정 데이터베이스를 텍스트 형식으로 인코딩하는 것입니다. XML은 이 필드는 숫자형 가격이고, 저 필드는 영숫자형 재고 번호라는 식의 정보를 명시할 수 있습니다. XML 문서의 모든 데이터는 텍스트로 인코딩되므로, 엔디안(endianness)이나 부동 소수점 숫자의 이진 표현과 같은 까다로운 문제들이 사라집니다. 따라서 XML은 컴퓨터 간 데이터 통신에 적합한 언어로 점차 인정받고 있습니다.
XML 처리 도구
XML을 처리하는 데 널리 사용되는 오픈소스 패키지 두 가지를 알고 있습니다. 첫 번째는 Expat이고, 두 번째는 Xerces입니다. 이 두 패키지는 모두 1999년에 개발되었습니다. Expat은 한 개인이 개발한 것이고, Xerces는 IBM에서 개발했습니다.
XML을 처리하는 데에는 두 가지 경쟁 모델이 있습니다. 하나는 DOM(Document Object Model)이고, 다른 하나는 SAX(Simple API for XML)입니다. SAX 방식(Expat에서 사용됨)은 XML 문서를 순차적으로 읽어가며, 마크업 요소가 나타날 때마다 핸들러 함수를 호출합니다. DOM 방식은 전체 XML 문서를 읽어들이고 트리 구조의 계층을 생성합니다. SAX는 순차 접근 방식, DOM은 임의 접근 방식으로 생각할 수 있습니다. Xerces는 SAX와 DOM API를 모두 지원합니다. Expat에 DOM API를 제공하는 타사 패키지도 있습니다(“simkin” 참조).
비록 ‘XML 문서’라는 용어를 사용하지만, 실제로 XML로 인코딩된 텍스트는 파일일 수도 있고 데이터 스트림일 수도 있습니다. 일반적으로 텍스트를 수집하여 파서에게 전달하는 함수를 직접 제공하므로, 텍스트는 어떤 소스에서든 가져올 수 있습니다.
외국인 거주자
Expat은 XML을 읽고 XML 요소가 나타날 때마다 특정 작업을 수행하도록 설계되었습니다. Expat이 XML 기반 데이터 스트림을 생성할 수 있다는 내용을 다룬 문서는 본 적이 없습니다. Expat은 C 언어로 작성되었습니다. 또한 Perl 및 Java용 Xerces 버전도 있습니다.
expat의 VOS용 포팅 버전은 다음에서 확인할 수 있습니다:
외국인 거주자를 위한 주요 웹사이트는 다음과 같습니다:
그리고
sourceforge 홈페이지에서 expat에 대한 훌륭한 소개를 확인할 수 있습니다. 링크는 다음과 같습니다:
expat을 사용하는 다른 오픈소스 패키지에 대한 링크는 http://www.libexpat.org/에서 확인할 수 있습니다.
XERCES
Xerces는 XML 데이터 스트림을 읽고 쓸 수 있습니다. Xerces는 C++로 작성되었으며, C++ 프로그램에서 호출되도록 설계되었습니다.
2008년 중반, 톰 말로리(Tom Mallory)와 저는 Stratus 고객을 위해 Xerces 버전 2.8.0을 포팅했습니다. 대상 플랫폼은 V 시리즈였습니다. 현재 Xerces의 최신 버전은 3.0.1입니다. 이 포팅 버전을 받아보시려면 담당 영업팀에 문의해 주시기 바랍니다.
xerces의 메인 사이트는 다음과 같습니다:
어떤 것을 사용해야 할까요?
단순히 XML로 인코딩된 문서를 파싱하려는 경우이고, 데이터 스트림을 순차적으로 읽는 방식의 처리가 가능하다면 expat을 사용하는 것을 추천합니다. expat은 C 언어로 작성되었지만, 모든 VOS 프로그래밍 언어는 다른 프로그래밍 언어로 작성된 함수나 서브루틴을 호출할 수 있기 때문에, 어떤 VOS 언어에서든 expat을 호출할 수 있습니다.
XML 문서에 대해 임의 접근 연산을 수행해야 하거나 XML을 생성해야 하며, C++ 프로그래밍에 익숙하다면 Xerces를 사용하는 것을 추천합니다.
애플리케이션에 XML 문서 처리 기능을 추가하는 데 도움이 필요하시면, 담당 Stratus 영업팀에 문의해 주십시오.
