XSLT
스타일
- 문서 구조 및 내용과 포맷(스타일 또는 레이아웃)의 분리
- DTD + DI (문서) + Stylesheet
- 문서 구조와 내용의 변경 없이 다양한 모습의 표현이 가능 => 스타일시트만 변경
- 매체의 종류/특성에 따라 문서 표현 형태를 변환하여 출력 => 스타일시트만 변경
- 스타일 표준안
- DSSSL(Document Style Semantics and Specification Language)
- 1996 ISO 표준,DTD + DI + Stylesheet 분리 개념,for SGML 문서
- CSS(Cascading Style Sheet)
- 1996 CSS1, 1998 CSS2, Stylesheet for HTML, XML 에도 적용 가능
- XSL(eXtensibleStylesheet Language)
- 1999 XSLT, 2001 XSL, Stylesheet for XML, DSSSL과 유사한 개념
- DSSSL(Document Style Semantics and Specification Language)
- XSL(eXtensible Stylesheet Language)의 구성
- XSLT(XSL Transformations) : 1999.11 버전1.0 (현재 2.0 WD)
- XPath(XML Path Language) : 1999.11 버전1.0 (현재 2.0 WD)
- XSL-FO(XSL Formatting Objects) : 2001.10 버전1.0
XSL 기본 개념
- XSL 의 적용 : 변환 및 스타일의 적용
- XSLT 엔진 / XSLT 처리기(XSLT processor)
- Saxon (http://saxon.sourceforge.net ) : Java 로 작성
- Xalan (http://xml.apache.org/xalan-c/index.html) : C++ 버전, Java 버전
- XT (http://www.jclark.com/xml/xt.html)
- MSXML3 (http://msdn.microsoft.com/xml) : 명령줄 및 브라우저 사용
- command line processor 사용 예
C:>msxml source.xml stylesheet.xsl [-o output]
- command line processor 사용 예
- 브라우저(Explorer) 내장
- Explorer 6.0 에 내장된 버전 (MSXML 3.0) : XSLT 1.0
- Explorer 5.x 에 내장된 버전 : WD-xsl 버전 ** 사용시 주의 **
XSLT 기초 예제
- 예제 1 (문서 출력)
XML 문서 (ex01.xml) XSLT 문서 (ex01.xsl) <?xml version="1.0" encoding="EUC-KR" ?>
<?xml-stylesheet type="text/xsl"
href="ex01.xsl"?>
<memo>
<header>
<date> 2002. 4. 15. </date>
<name lang="kr"> 홍길동 </name>
</header>
<body>
<p> XML 규격제정을 위한 회의가 있으니 참석하여 주시기 바랍니다. </p>
<p> 회의 참석 여부를 알려 주시기 바랍니다. </p>
</body>
</memo><?xml version="1.0" encoding="EUC-KR" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999
/XSL/Transform">
<xsl:template match="/">
<HTML>
<BODY> <H2>1st Example (H2 지정)</H2>
단순히 변환 (지정 없음)
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
- XML 문서에 스타일시트 적용
- <?xml-stylesheet type="text/xsl" href="ex01.xsl"?>
- XSL 문서의 구조 : 스타일시트 선언
- XSL 파일도 역시 하나의 XML 문서
- xml 선언문
- 스타일시트 요소 : 루트 요소
<xsl:stylesheet version = "1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">- 교재의 상세한 속성 설명은 생략
- IE5.0 브라우저에서 실행시에는
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
- <xsl:stylesheet>요소의 가능한 자식요소
- xsl:import,xsl:include, xsl:strip-space, xsl:preserve-space
- xsl:output, xsl:key, xsl:decimal-format, xsl:namespace-alias
- xsl:attribute-set, xsl:variable, xsl:param,xsl:template
- XSL 파일도 역시 하나의 XML 문서
- XSLT 기초 예제 2 (문서 변환)
ex02.xml ex02.xsl <?xml version="1.0" encoding="EUC-KR"?>
<방명록>
<성명>
<성>홍</성>
<이름> 길동 </이름>
</성명>
<전자우편>gildong@email.com</전자우편>
<내용 종류="HTML">안녕하세요? 만나서 반갑습니다. </내용>
</방명록><?xml version="1.0" encoding="EUC-KR" ?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<memo>
<header>
<xsl:apply-templates select="방명록/성명" />
</header>
<body>
<par><xsl:value-of select="방명록/내용"/></par>
</body>
</memo>
</xsl:template>
<xsl:template match="성명">
<name>
<xsl:value-of select="이름" />
</name>
</xsl:template>
</xsl:stylesheet>
변환 결과 소스<?xml version="1.0" encoding="UTF-16"?>
<memo>
<header>
<name> 길동 </name>
</header>
<body>
<par>안녕하세요? 만나서 반갑습니다.</par>
</body>
</memo>
기본적인 변환 요소
- 변환 템플릿을 정의하는 요소
<xsl:template match="XSL 패턴">... 변환 템플릿 ...</xsl:template>
- 소스문서(트리)에서 일치하는 패턴찾기(XSL 패턴 또는 XPath 패턴)
- 변환 대상의 패턴 지정 및 변환 규칙 정의
- 속성 : name, priority, mode
- 소스문서(트리)에서 일치하는 패턴찾기(XSL 패턴 또는 XPath 패턴)
- 요소 내용의 문자열로 변환
<xsl:value-of select = "XSL패턴" /> - 해당 요소의 텍스트 값으로 변환하기
- <xsl:value-of select="." /> : 현재 노드의 값으로 변환
- 변환 템플릿을 적용하는 요소
<xsl:apply-templates select = "XSL패턴" /> - select 에서 변환 대상을 지정 : 대상 패턴을 찾아서 해당하는 변환 규칙을 적용
- <xsl:apply-templates /> : 모든 자식 요소에 대하여 변환
- 예) 차이 ?
<xsl:template match="/">
<name>
<xsl:apply-templates />
</name>
</xsl:template><xsl:template match="/">
<name>
<xsl:apply-templates select="방명록/성명" />
</name>
</xsl:template>
- XSLT 작동 원리 :소스트리(Source Tree) 와 결과트리(Result Tree)
Source Tree |
| ||||||||||||
Result Tree
| |||||||||||||
|
결과 트리의 정렬 및 번호
- 정렬하기
<xsl:sort select = "XSL 패턴" order = "ascending | descending"
data-type = "text | number" case-order = "upper-first | lower-first"/>- XSL 패턴에 대해 오름차순 | 내림차순으로 정렬
- <xsl:apply-templates> 또는 <xsl:for-each>내에서 사용
- 정렬 예: 데이터가 1, 20, 5, 110 인 경우
- data-type="text" 이면 1, 110, 20, 5 의 순
- data-type="number" 이면 1, 5, 20, 110 의 순
- case-order :대문자 또는 소문자가 먼저?
- case-order ="upper-first" 이면 A, a, B, b, C, c 의 순
- case-order ="lower-first" 이면 a, A, b, B, c, C 의 순
- XSL 패턴에 대해 오름차순 | 내림차순으로 정렬
- 번호 매기기
<xsl:number format="기호 토큰" ... />
- 포맷토큰 : 중간 번호부터 시작 가능
- 1, 2, 3, 4, ... 01, 02, 03, 04, ... A, B, C, D, ... a, b, c, d, ... I, II, III, IV, ... i, ii, iii, iv, ...
- 포맷토큰 : 중간 번호부터 시작 가능
실습 예제
- 메모 예제
메모 스타일 2 메모 스타일 3 <?xml version="1.0" encoding="EUC-KR" ?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<BODY>
<b>[성명]</b> <xsl:value-of
select="memo/header/name"/>
<br /> <b>[메모]</b> <xsl:value-of
select="memo/body"/>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>...
<xsl:template match="/">
<HTML> <BODY>
<xsl:apply-templates
select="memo/header/name"/>
<xsl:apply-templates
select="memo/body" />
</BODY> </HTML>
</xsl:template>
<xsl:template match="header/name">
<b>[성명]</b> <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="body">
<br /><b>[메모]</b><xsl:value-of select="."/>
</xsl:template>
...메모 스타일 4 (문제점?) 메모 스타일 5 (문제점?) <xsl:template match="/">
<HTML>
<BODY><xsl:apply-templates />
</BODY>
</HTML>
</xsl:template>
<xsl:template match="memo/header/name">
<b>[성명]</b> <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="memo/body">
<br /><b>[메모]</b>
<xsl:value-of select="."/>
</xsl:template><xsl:template match="/">
<HTML>
<BODY><xsl:apply-templates />
</BODY>
</HTML>
</xsl:template>
<xsl:template match="memo//name">
<b>[성명]</b> <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="//body">
<br /> <b>[메모]</b>
<xsl:value-of select="."/>
</xsl:template>메모 스타일 6 메모 스타일 7 <xsl:template match="/">
<HTML>
<BODY><xsl:apply-templates />
</BODY>
</HTML>
</xsl:template>
<xsl:template match="memo/header">
<b>[성명]</b>
<xsl:value-of select="name"/>
</xsl:template>
<xsl:template match="memo/body">
<br /> <b>[본문]</b>
<xsl:value-of select="."/> <br/>
</xsl:template><xsl:template match="/">
<HTML>
<BODY><xsl:apply-templates
select="memo//name"/>
<xsl:apply-templates select="//body"/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="name">
<b>[성명]</b> <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="body">
<br /> <b>[메모]</b> <xsl:value-of select="."/>
</xsl:template>
- 주소록 예제
표 만들기 1 (문제점?) 표 만들기 3 <?xml version="1.0" encoding="EUC-KR" ?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML><BODY>
<table border="1">
<tr>
<th>이름</th><th>전화</th><th>사진</th>
</tr>
<xsl:apply-templates/>
</table>
</BODY></HTML>
</xsl:template>
<xsl:template match="name">
<td><xsl:value-of select="."/></td>
</xsl:template>
<xsl:template match="tel">
<td><xsl:value-of select="."/></td>
</xsl:template>
<xsl:template match="pic">
<td><xsl:value-of select="@img"/></td>
</xsl:template>
<xsl:template match="entry">
<tr><xsl:apply-templates/></tr>
</xsl:template>
</xsl:stylesheet>...
<xsl:template match="/">
<HTML><BODY>
<table border="1">
<tr> <th>no</th><th>이름</th><th>전화
</th><th>사진</th> </tr>
<xsl:apply-templates select="//entry">
<xsl:sort select="name"/>
</xsl:apply-templates>
</table>
</BODY></HTML>
</xsl:template>
<xsl:template match="entry">
<tr valign="top">
<td><xsl:number format="01"/></td>
<td><xsl:apply-templates select="name"/></td>
<td><xsl:apply-templates select="tel"/></td>
<td><xsl:apply-templates select="pic"/></td>
</tr>
</xsl:template>
<xsl:template match="name">
<xsl:value-of select="."/><br/>
</xsl:template>
<xsl:template match="tel">
<xsl:value-of select="."/><br/>
</xsl:template>
<xsl:template match="pic">
<xsl:value-of select="@img"/><br/>
</xsl:template>
'Programming > JAVA' 카테고리의 다른 글
[28] [SWING] Graphics and SWING, Applet (0) | 2006.10.12 |
---|---|
[02주] JAVA Programming - 자바 용어정리 및 정의와 .. (0) | 2006.09.19 |
[자바(JAVA)응용강좌] 네트워크 게임 만들기 (0) | 2006.04.10 |
데이타보낼때 해더와 같이 보내기 (0) | 2006.04.10 |
Searching (3) (0) | 2006.03.23 |