an article about XSLT

atie의 이미지

http://www.osnews.com/comment.php?news_id=6962
http://webservices.devchannel.org/webserviceschannel/04/04/26/2028245.shtml
영어라고 투덜대지 마시고 한번쯤 읽어 보세요. XSLT는 실무에서 많이 쓰이죠.

제 경우에는 DB 자료를 읽어 XML 문서를 생성하거나 반대로 XML 문서를 읽어 DB에 자료를 추가, 수정하는 기능을 하는 middleware(이른바 B2B adapter)를 주로 개발하는데 XSLT를 사용합니다. 물론, adapter는 다양한 종류의 소스와 타겟에 connection 해서 메세지를 읽거나 쓰는 기능도 가지죠. 예를 들어 Message Queue, HTTP, File Sytem, DB 기타 등등...
다른 여러 방법으로 OR 매핑을 할 수 있겠지만, 저의 경우는 Xalan의 sql extention을 확장해서 XSL에 DB대 XML 매핑을 정의하여 xpath와 transformer를 사용하는 자바 클래스에 의해 XML 프로세싱을 하지요. 이렇게 하면 매핑이 추가, 변경되는 경우에 XSL만 새로 만들거나 고쳐주면 되고 middleware의 코드는 새로 만들거나 수정할 필요가 없답니다.
음.... 쓰다 보니까 프로그래밍 세션이 되었는데... 일전에 여기 토론방에 언뜻 이렇게 하는 이야기를 본 기억이 나서 약간은 자세하게 XSLT를 활용할 수 있는 방법을 적어 보았습니다.

ssggkim의 이미지

좋은 정보 감사합니다. :)

fender의 이미지

atie wrote:
http://www.osnews.com/comment.php?news_id=6962
http://webservices.devchannel.org/webserviceschannel/04/04/26/2028245.shtml
영어라고 투덜대지 마시고 한번쯤 읽어 보세요. XSLT는 실무에서 많이 쓰이죠.

제 경우에는 DB 자료를 읽어 XML 문서를 생성하거나 반대로 XML 문서를 읽어 DB에 자료를 추가, 수정하는 기능을 하는 middleware(이른바 B2B adapter)를 주로 개발하는데 XSLT를 사용합니다. 물론, adapter는 다양한 종류의 소스와 타겟에 connection 해서 메세지를 읽거나 쓰는 기능도 가지죠. 예를 들어 Message Queue, HTTP, File Sytem, DB 기타 등등...
다른 여러 방법으로 OR 매핑을 할 수 있겠지만, 저의 경우는 Xalan의 sql extention을 확장해서 XSL에 DB대 XML 매핑을 정의하여 xpath와 transformer를 사용하는 자바 클래스에 의해 XML 프로세싱을 하지요. 이렇게 하면 매핑이 추가, 변경되는 경우에 XSL만 새로 만들거나 고쳐주면 되고 middleware의 코드는 새로 만들거나 수정할 필요가 없답니다.
음.... 쓰다 보니까 프로그래밍 세션이 되었는데... 일전에 여기 토론방에 언뜻 이렇게 하는 이야기를 본 기억이 나서 약간은 자세하게 XSLT를 활용할 수 있는 방법을 적어 보았습니다.

개인적으로 XSLT로 OR 매핑을 하기 보다는 CastorXML/JAXB 같은 자바 <-> XML 매퍼와 Hibernate 같은 퍼시스턴스 프레임워크를 연동하는게 훨씬 깔끔하고 합리적인 방법이라고 생각합니다. 물론 나름의 쓰임새는 있겠지만 Xalan의 SQL 확장 같은 경우는 일반적 응용프로그램에 쓰기엔 dirty hack이라는 생각밖에 들지 않습니다.

기본적으로 XSLT는 하나의 XML을 다른 형태의 XML이나 유사한 문서로 변환하기 위한 도구 일 뿐입니다. 이를 이상한 방향으로 확장해서 프로그래밍 언어화 한다는 건 그다지 바람직하지 못하다고 봅니다. 단적으로 프로그래머가 자바로된 도메인 클래스를 IDE로 디버깅 하는 경우와 텍스트 편집기로 XSL 파일에 DB 컬럼을 얼기 설기 엮어 넣는 경우 어느 쪽이 더 높은 생산성과 확장성을 얻을 수 있을 지 쉽게 짐작할 수 있습니다.

반면 XSLT는 본 목적으로 사용한다면 여러 유용한 가능성이 많습니다. 예를들어 백엔드에 처음 이야기한 CastorXML + Hibernate의 조합이 깔려 있다면 SQL이나 SAX/DOM관련 코딩 하나 없이 XSLT를 통해 HTML, XML, PDF 등의 출력을 뽑아낼 수 있을 것입니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

iolo의 이미지

fender wrote:

개인적으로 XSLT로 OR 매핑을 하기 보다는 CastorXML/JAXB 같은 자바 <-> XML 매퍼와 Hibernate 같은 퍼시스턴스 프레임워크를 연동하는게 훨씬 깔끔하고 합리적인 방법이라고 생각합니다. 물론 나름의 쓰임새는 있겠지만 Xalan의 SQL 확장 같은 경우는 일반적 응용프로그램에 쓰기엔 dirty hack이라는 생각밖에 들지 않습니다.
....
반면 XSLT는 본 목적으로 사용한다면 여러 유용한 가능성이 많습니다. 예를들어 백엔드에 처음 이야기한 CastorXML + Hibernate의 조합이 깔려 있다면 SQL이나 SAX/DOM관련 코딩 하나 없이 XSLT를 통해 HTML, XML, PDF 등의 출력을 뽑아낼 수 있을 것입니다.

말씀하신 것들은 기본적으로 자바라는 전제를 깔고 있습니다.
XML은 그런 전제를 제거하는 것을 주요 목적으로 하고 있죠.

casterxml이나 hibernate에 익숙한데, 프로젝트를 .net 플랫폼에서 수행해야 한다면 어떻게 될까요?
물론 펜더님이시라면 xslt를 알고 있는 상태에서 caster나 hibernate를 쓰시는 것이겠지만, 역시 xslt는 필요하다(알아둘 필요가 있다)고 생각합니다.

----
the smile has left your eyes...

atie의 이미지

fender님이 언뜻 이런 이야기를 토론방에 쓰셨던 것으로 기억하는데 역시 답글이 달리니 기분이 좋군요.

우선은 제 경우를 썼던 것은 XSLT의 활용을 하는 한가지 방법을 이야기하고자 한 것이지 기본의 활용을 벗어나는 extention을 일반화해서 이렇게 사용해라 하는 것을 이야기 한 것은 아니라는 것을 전제합니다.

조금 깊게 들어가보죠.
저도 프레임워크화 된 OR 매퍼와 퍼시스턴스 툴을 사용하는 것이 바람직하다 것에 동의합니다. 기본적으로 제가 extention을 dirty hack하는 것보다는 신뢰성 있는 코드를 사용할 수 있고, 이미 있는 것을 다시 만들 필요는 없겠죠. 저도 여러 툴들을 검토하고 있는 중이고, fender님에게도 후일 조언을 얻을 수도 있으리라 기대합니다.

다만, 제가 2년 전 쯤에 고민했던 문제는 기존의 매핑이 데이타베이스화 되어 있어서 db access를 최소화 할 수 있는 방법에 대한 것이었고, 좀 더 간편한 방법을 찾다보니 xsl에 매핑을 정의하고 xpath와 xslt를 사용하여 프로세싱 할 수 있도록 만들었던 것이었습니다. 그리고, 여담으로, 그 코드를 lotus xslt에서 시작을 했는데 xalan 버전이 올라가면서 sql extention의 확장 사용이 오직 query하는 정도로만 제한이 되어버려서 시간이 나는대로 새로운 adapter를 만드는 것을 구상 중입니다. 그런데, adapter 자체가 경량이면 경량일수록 저의 경우에는 좋은데 프레임 워크를 채택을 하다보면 혹 퍼포먼스에 문제가 있지는 않을까 하는 점이 가장 큰 고민이고, 어떡하면 심플한 코드를 가져갈 수 있을까하는 것도 고려 중입니다.

심플한 코드는 fender님의 언급하신 xsl에 DB 컬럼을 얼기설기 엮어 넣는다 하는 표현과도 밀접한 관계가 있는데... 전 나름대로 xsl을 펑션화, 절차화된 식으로 작성을 해 놓아서 팀의 다른 프로그래머들이 처음 보고도 쉽게 이해를 하고 새로운 프로젝트를 위한 매핑을 위해 사용하더군요.
그리고 매핑이 xsl에 클래스 코드와 별개로 외부에 존재하는 구조여서 (다시 말하면 클래스 코드는 특정의 XML content에 의해 작성이 되거나 종속되지 않는), adapter의 클래스들을 범용으로 사용할 수가 있습니다. 아마 fender님 언급하신 조합에서 할 수 있듯이 sql이나 sax/dom 코딩이 필요없다는 것은 같습니다. middleware가 특정 문서의 content에 종속이 된다면 이미 존재의 의미를 상실하는 것이죠.

아무튼 XSLT를 활용하여 원래의 데이타 소스를 다만 다양한 필터를 깔아 끼우는 식으로 다른 종류의 문서 또는 메세지를 만들 수 있다는 본연의 유용함은 말씀하신대로입니다. OR 매핑에 대한 구체적인 이야기는 따로이 기회가 있었으면 싶군요.

----
I paint objects as I think them, not as I see them.
atie's minipage

alfalf의 이미지

내용도 좋지만 여기 글 올린 분들의 글 속에서 자신의 주장과 타인에 대한 배려가 함께 조화를 이루는게 너무 아름답습니다.
아직 시작이긴 하지만 참 오랜만에 좋은 토론을 보는것 같아서 제 기분도 좋아 지네요. :D

bluemoon의 이미지

관심분야의 주제라 반갑긴 한데요. 주제는 저에게 쉬운데 말씀들 하시는데 사용하는 용어들은 어렵군요. 추측은 갑니다만..
OR매퍼.. XML매퍼.. 퍼시스턴스 프레임워크.. dirty hack. 등등..
이바닥에서 얼마나 버텨야 저런용어들이 낮설지 않을지.. :(

fender의 이미지

iolo wrote:
말씀하신 것들은 기본적으로 자바라는 전제를 깔고 있습니다.
XML은 그런 전제를 제거하는 것을 주요 목적으로 하고 있죠.

casterxml이나 hibernate에 익숙한데, 프로젝트를 .net 플랫폼에서 수행해야 한다면 어떻게 될까요?
물론 펜더님이시라면 xslt를 알고 있는 상태에서 caster나 hibernate를 쓰시는 것이겠지만, 역시 xslt는 필요하다(알아둘 필요가 있다)고 생각합니다.

제 의도를 조금 잘못 파악하신 것 같습니다. 저의 주장은 XSLT를 배울 필요가 없다는 뜻이 아니라 XSLT를 거의 프로그램 언어의 수준으로 확장하는 시도는 생산성이나 유지보수 등등의 측면에서 하등 이익이 없다는 뜻이었습니다. 말씀하신 대로 XML은 플랫폼이란 틀을 벗어나 이종 시스템 간의 통신을 돕기도 합니다만 이 경우도 역시 백엔드는 무얼로 구성하든 하등 문제가 될 것이 없습니다. 그렇다면 어차피 최종 결과물이 XML인 이상 백엔드를 굳이 XSLT에 데이터베이스 접속 정보까지 익스텐션으로 하드코딩을 하는 구성 보다는 OR 매퍼등을 적절히 쓰는게 훨씬 나은 설계가 아닌가 하는 지적이었습니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

iolo의 이미지

fender wrote:
iolo wrote:
말씀하신 것들은 기본적으로 자바라는 전제를 깔고 있습니다.
XML은 그런 전제를 제거하는 것을 주요 목적으로 하고 있죠.

casterxml이나 hibernate에 익숙한데, 프로젝트를 .net 플랫폼에서 수행해야 한다면 어떻게 될까요?
물론 펜더님이시라면 xslt를 알고 있는 상태에서 caster나 hibernate를 쓰시는 것이겠지만, 역시 xslt는 필요하다(알아둘 필요가 있다)고 생각합니다.

제 의도를 조금 잘못 파악하신 것 같습니다. 저의 주장은 XSLT를 배울 필요가 없다는 뜻이 아니라 XSLT를 거의 프로그램 언어의 수준으로 확장하는 시도는 생산성이나 유지보수 등등의 측면에서 하등 이익이 없다는 뜻이었습니다. 말씀하신 대로 XML은 플랫폼이란 틀을 벗어나 이종 시스템 간의 통신을 돕기도 합니다만 이 경우도 역시 백엔드는 무얼로 구성하든 하등 문제가 될 것이 없습니다. 그렇다면 어차피 최종 결과물이 XML인 이상 백엔드를 굳이 XSLT에 데이터베이스 접속 정보까지 익스텐션으로 하드코딩을 하는 구성 보다는 OR 매퍼등을 적절히 쓰는게 훨씬 나은 설계가 아닌가 하는 지적이었습니다.

역시나, 제 의도를 조금 곡해하신듯 합니다.
펜더님의 설명이 틀렸다거나 나쁘다는 것이 아닙니다.
제 글은 딱히 팬더님에게 쓴 글도 아니었구요.
쓰레드를 시작한 분도 xslt "만"으로 무얼 어떻게 하자는 글도 아니었다고 생각됩니다.
그저 "좋은 xslt의 튜토리얼이 있으니 한 번 보세요"정도 였는데, 펜더님께서 댓글에 "그런 dirty hack보다는 or mapper같은걸 써라"는 다소 성급해보이는(제가 보기에) 결론을 내리셨고, 그게 일반론으로 오해될 수 있겠다 싶어서 기반 기술도 중요하다는 정도의 의미로 댓글을 쓴 것입니다.

물론 크고 잘드는 좋은 칼이 있는데 작고 무딘 칼을 쓸 필요는 없지요.
하지만 어떤 칼이 내게 필요한(충분한) 칼인지를 아는 것이 중요하다고 생각합니다. 제 글의 의도는 그 이상도 그 이하도 아닙니다.

----
the smile has left your eyes...

fender의 이미지

atie wrote:
그런데, adapter 자체가 경량이면 경량일수록 저의 경우에는 좋은데 프레임 워크를 채택을 하다보면 혹 퍼포먼스에 문제가 있지는 않을까 하는 점이 가장 큰 고민이고, 어떡하면 심플한 코드를 가져갈 수 있을까하는 것도 고려 중입니다.

최근의 O/R 매핑 툴들이 작성하는 쿼리는 상당히 최적화가 잘되어있는 편입니다. 물론 필요할 때 필요한 부분만 쿼리를 하게 설정할 수 있기도 하고, 무엇보다
계층을 추가해서 생기는 약간의 오버헤드는 거의 항상 적절한 캐쉬 - HTML 결과물, 쿼리, 객체 등등 - 를 통해 극복할 수 있다고 생각합니다.

atie wrote:
심플한 코드는 fender님의 언급하신 xsl에 DB 컬럼을 얼기설기 엮어 넣는다 하는 표현과도 밀접한 관계가 있는데... 전 나름대로 xsl을 펑션화, 절차화된 식으로 작성을 해 놓아서 팀의 다른 프로그래머들이 처음 보고도 쉽게 이해를 하고 새로운 프로젝트를 위한 매핑을 위해 사용하더군요.
그리고 매핑이 xsl에 클래스 코드와 별개로 외부에 존재하는 구조여서 (다시 말하면 클래스 코드는 특정의 XML content에 의해 작성이 되거나 종속되지 않는), adapter의 클래스들을 범용으로 사용할 수가 있습니다. 아마 fender님 언급하신 조합에서 할 수 있듯이 sql이나 sax/dom 코딩이 필요없다는 것은 같습니다. middleware가 특정 문서의 content에 종속이 된다면 이미 존재의 의미를 상실하는 것이죠.

사실 저도 초기에 비슷한 시스템을 구축한 적이 있습니다. 한참 XML이 지금의 웹서비스와 같이 거품과 함께 유명세를 타던 때였는데, 때맞춰서 MS-SQL에 XML 확장 모듈이 나왔습니다. 즉 데이터베이스 서버 자체적으로 HTTP 리퀘스트를 받아 적절한 데이터를 미리 정한 xml 형태로 응답하는 것입니다.

여기에 XSLT만 덧씌우면 바로 HTML이 되기 때문에 이를 이용해서 간단한 웹사이트를 사실상 코딩 없이 만든 적이 있습니다. 아마 이런 정도가 XSLT가 프로그램의 역할을 대신해서 쓰일 수 있는 이상적인 경우가 아닌가 싶습니다.

반면에 이런 식의 구성 - 즉, XML/XSLT 자체에 스크립팅이나 확장 등으로 프로그램이 할 역할을 분담시키는 시스템의 규모가 커질 경우 분명 문제가 발생합니다.

우선 비슷한 역할을 하는 이질적인 산출물이 많이 발생합니다. 같은 개념을 나타내기 위해 데이터베이스와 클래스, 그리고 XML 관련 코드가 별도로 존재하며 이를 서로 동기화 하는 작업에도 일정한 노력이 듭니다. 반면 퍼시스턴스 엔진과 XML 바인딩을 사용하는 경우 비즈니스 적으로 중요한 개념은 모두 '클래스'라는 객체지향언어를 다루는 프로그래머에게 가장 익숙한 형태로 단일한 뷰를 통해 제공됩니다. 이 경우 아예 '어댑터'란 개념 자체가 필요 없이 도메인 객체 하나로 처리가 가능합니다. 예를들어 pseudo 코드를 보면 :

Order order = (Order) session.load("1234");
Marshaller.marshal(order, writer);

이렇게 데이터베이스에서 '1234'라는 PK를 가진 주문 '객체'를 가져와서 writer에 이를 XML 형식으로 쓸 수 있습니다. XSL 안에서 동일한 내용을 처리 한다면 구현에 따라 차이는 있지만 데이터베이스의 스키마, 접속정보가 들어가야 하며 이런 정보의 변경시 여러 부분을 수정해야 합니다. 또한 IDE를 통해 코드 자동완성, 리팩터나 디버깅을 사용할 수 없고 무엇보다 언어 내에서 간단하게 처리할 수 있는 부분도 별도의 확장이나 스크립팅을 통해 제한적으로 쓸 수밖에 없습니다.

하다못해 XSLT안에서 예외처리나 로깅, 그리고 SQL 관련한 캐쉬나 커넥션 풀등을 자유롭게 이용하는게 불가능하진 않지만 매우 번거로운 작업임은 분명합니다.

따라서 제 생각엔 특히 어느 정도 규모가 있는 서버 응용프로그램을 만든다면 XSLT의 역할은 최대한 본래의 목적인 XML 문서의 변환으로 제한하는 것이 바람직한 것 같습니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

iolo의 이미지

fender wrote:

따라서 제 생각엔 특히 어느 정도 규모가 있는 서버 응용프로그램을 만든다면 XSLT의 역할은 최대한 본래의 목적인 XML 문서의 변환으로 제한하는 것이 바람직한 것 같습니다.

동의 한표 +1

----
the smile has left your eyes...

fender의 이미지

iolo wrote:
역시나, 제 의도를 조금 곡해하신듯 합니다.
펜더님의 설명이 틀렸다거나 나쁘다는 것이 아닙니다.
제 글은 딱히 팬더님에게 쓴 글도 아니었구요.
쓰레드를 시작한 분도 xslt "만"으로 무얼 어떻게 하자는 글도 아니었다고 생각됩니다.
그저 "좋은 xslt의 튜토리얼이 있으니 한 번 보세요"정도 였는데, 펜더님께서 댓글에 "그런 dirty hack보다는 or mapper같은걸 써라"는 다소 성급해보이는(제가 보기에) 결론을 내리셨고, 그게 일반론으로 오해될 수 있겠다 싶어서 기반 기술도 중요하다는 정도의 의미로 댓글을 쓴 것입니다.

iolo님의 의도는 이해했습니다. 다만 첫 글에 링크된 내용들을 읽어 보시면 XSLT를 'functional programming'으로 사용하는 방법입니다. 그리고 글을 올리신 분께서도 데이터베이스 접근 등 XSLT의 이런 측면을 활용하는 구체적인 예들을 제시하셨고 저는 이런 접근 방법이 최선이 아닐 수 있다는 지적을 한 것 뿐입니다.

처음 올리신 분께서도 단순히 'XSLT라는 기술이 있다더라'는 말씀을 하신 건 아닌 것 같은데요, 제가 잘못 이해했나요? :)

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

iolo의 이미지

off-topic입니다.

fender wrote:

iolo님의 의도는 이해했습니다. 다만 첫 글에 링크된 내용들을 읽어 보시면 XSLT를 'functional programming'으로 사용하는 방법입니다. 그리고 글을 올리신 분께서도 데이터베이스 접근 등 XSLT의 이런 측면을 활용하는 구체적인 예들을 제시하셨고 저는 이런 접근 방법이 최선이 아닐 수 있다는 지적을 한 것 뿐입니다.

처음 올리신 분께서도 단순히 'XSLT라는 기술이 있다더라'는 말씀을 하신 건 아닌 것 같은데요, 제가 잘못 이해했나요? :)

말꼬리 잡는 것 같지만, 제가 본 토픽의 요지는:
"xslt라는 기술이 있다더라"가 아니고 "좋은 xslt 튜토리얼이 있더라"입니다.

xslt로 이런것까지 가능하다는 얘기이니, xslt혹은 xml을 존재를 감추는 ormapper와는 다른 접근이죠. 실무에선 jdo를 쓰고 ado를 쓰지만 SQL은 필요한 것입니다. caster와 hibernate를 써서 sql이나 sax/dom을 쓰지 않고 xml로 부터 html, pdf를 뽑아낼 수 있으니 sql이나 sax/dom을 알 필요가 없다고 생각하지는 않습니다.

알고 있던 거지만, 펜더님과 저의 기술에 대한 시각(혹은 접근 방법)의 차이를 세삼 느낍니다 ;)

여기에 대해서 더 얘기하시겠다면 새로 쓰레드를 여는 것이 좋을 것 같습니다.

----
the smile has left your eyes...

atie의 이미지

제가 정리를 해보죠.
위의 링크를 걸었던 것은 “xslt를 공부합시다" 하는 취지였고, 제가 이야기한 하나의 활용 실례는 xslt를 functional language 차원에서 이해하고 길들이자는 링크에 대한 부수적인 설명을 하고자 했던 것이었는데... 따로이 토론을 해 볼 수 있겠다 할 정도의 좋은 내용이 답글로 달려 우선은 감사하고 읽어보신 분들에게도 공부해야겠구나 하는 동기 부여가 될 수 있을 듯 하군요.

XSLT 활용,
OR 매핑과 프레임 워크의 적용,
그리고, 자바와 닷넷에서의 XSLT 확장 등의 주제들이 토론될 수 있겠네요. 참고로, 세번째의 주제는 음.... 다음의 이유에서 입니다.

xslt에서 사용자 정의의 function들을 확장시킬때, 제가 보기에는 자바가 닷넷에 비해 비교할 수 없을 만큼의 강점을 가집니다. 자바에서는 Namespace를 선언하여 자신의 작성한 클래스들을 external function으로 깔끔하게 사용할 수 있는 반면, 닷넷에서는 비슷하게 구현은 할 수가 있어도 CDATA에 external function 을 정의해야 한다는 구조적으로 충분치 못한 점들이 있습니다.

그 밖에도, 제가 사용한 adapter라는 용어는 Data를 보관하고 있거나 저장할 수 있는 소스 (또는 타겟)에 접속을 하여 전송에 사용되어질 메세지를 생성, 저장할 수 있는 미들웨어 성격의 어플리케이션을 의미합니다. 하나의 예로, A라는 사용자 어플리케이션이 있고, DB에 저장된 자료를 XML으로 변환을 해서 Message Queue등을 사용하여 B라는 또 다른 어플리케이션을 위해 전송을 할 수 있겠죠.
XML과 XSLT 는 이러한 어플리케이션에도 사용이 되고 다양하게 확장될 수 있다는 것을 이야기 드리고 싶습니다.

사족으로, B2B 인테그레션 어플리케이션을 작성을 할 때, 이것이 최선이다 하는 정도는 없다고 생각을 합니다. 다양한 시도들이 구현이 되고 있고, 다만 메세지의 타입을 XML을 기반으로 하는 것이 대세인데, XSLT 도 하나의 수단으로 사용이 될 수 있겠죠.

----
I paint objects as I think them, not as I see them.
atie's minipage