Transcript

88 장장 ㅎㅎ

• XSL 개념• XSL 과 XSLT 문법• [ 실습 ] XSLT 활용 1• [ 실습 ] XSLT 활용 2

XSL, XSLTXSL, XSLT

2

학습목표

XSL 기본 개념 학습 XSLT 구조 이해와 활용 XML 문서 조작을 위한 XSL 문법 학습 XML 문서 조작을 위한 활용 방법 학습

8 장 . XSL, XSLT

3

XSL 개념Extensible Stylesheet Language 약어XML 문서의 스타일을 정의하기 위한 언어

XSL 구성변환 언어 (transformation language) 인 XSLT(XSL Transformations) 와 출력 언어인 XSL FO(XSL Formatting Objects) 로 구성

Section 01 XSL 개념

XSL

XSL-FOXSLT

XPath

[ 그림 8-1] XSL 구성

4

XSL 역할XML 문서 변환과 포맷 지정

Section 01 XSL 개념

[ 그림 8-2] XSLT 와 XSL FO 역할

다른 XML 문서

HTML 문서

WML 문서

XML 문서 XML 전용 브라우저

익스플로러

휴대폰 이미지

??

XSLT 처리기XSLT 처리기

XSL FO 적용XSLT 적용

문서 변환 포맷 지정

5

XSL 문서 적용XML 문서 도입부에 다음과 같이 선언

결과 문서 생성과 출력 과정

Section 01 XSL 개념

<?xml version="1.0" encoding="euc-kr"?><xml-stylesheet type="text/xsl“ href="doc.xsl”?><student> <name> 고소영 </name></student>

6

템플릿 (template)XML 문서를 변환하기 위해 변환 규칙<template> 요소를 이용해서 표현

<template> 요소문서를 변환하기 위한 명령어와 내용이 표현규칙이 적용될 XML 요소를 찾기 위해서 XPath 속성에 해당하는 match 속성 사용

<stylesheet> 요소XSLT 문서의 최상위 원소형식

Section 02 XSL 과 XSLT 문법

http://www.w3.org/1999/XSL/Transform

7

XML 문서 구조

Section 02 XSL 과 XSLT 문법

8

Section 02 XSL 과 XSLT 문법

<stylesheet> 요소XSLT 의 최상위 요소요소 내부에는 다른 XSLT 요소를 정의하고 포함<stylesheet> 요소에 직접 포함되는 원소를 최상위 요소라 함<stylesheet> 요소 대신에 <transform> 요소 사용 가능사용 예

<xsl:stylesheet id = id extension-element-prefixes = tokens exclude-result-prefixes = tokens version = number><!-- Content: (xsl:import*, top-level-elements) --></xsl:stylesheet>

9

<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

Section 02 XSL 과 XSLT 문법

10

템플릿 요소문서 전체 변환 또는 일부분 선택 변환 가능템플릿 정의 예

Section 02 XSL 과 XSLT 문법

<xsl:template match = pattern name = qname priority = number mode = qname><!-- Content: (xsl:param*, template) --></xsl:template>

11

Section 02 XSL 과 XSLT 문법

템플릿 속성match 속성• XML 문서 위치를 지정하기 위해서 XPath 표현식을 사용• 템플릿 규칙을 입력하기 위해서는 반드시 문서 루트를 지정해야 함

name 속성• 이름이 부여된 템플릿을 만들 때 템플릿 이름을 입력하는 속성• name 속성을 사용한 템플릿은 <call-template> 요소에 의해 호출

priority 속성• 적용 가능한 템플릿이 여러 개 정의되었을 때 우선순위를 지정하는

속성• priority 속성값이 크면 클수록 우선순위 높아짐

mode 속성• XML 문서에서 동일한 부분에 적용되는 템플릿이 여러 개 있을 때 ,

원하는 템플릿만 호출할 수 있도록 함• 소스 트리의 동일한 부분을 여러 번 처리해야 할 경우 사용

12

<xsl:template match="/"> <html> <body> <h1> XSLT 에 의해 HTML 문서로 변환된 결과를 출력한다 .</h1> </body> </html></xsl:template>

템플릿 사용 예템플릿 사용 : 임의의 XML 문서를 HTML 문서로 변환

Section 02 XSL 과 XSLT 문법

student.xsl

13

Section 02 XSL 과 XSLT 문법

apply-templates 요소 자식 요소를 처리할 때 사용일반적으로 <apply-templates> 요소를 정의하면 자식 노드가 선택되고 , 이 요소가 문맥 요소가 된다 .

자식 요소 중 , 특정 자식 요소만 선택해야 하거나 자식 요소가 아닌 다른 요소를 선택하고 싶다면 select 속성 사용select 속성을 표현하는 경우에는 select 에서 선택된 요소가 문맥 요소가 되고 , 템플릿이 적용된다 .

<apply-templates> 요소 정의 방법

<xsl:apply-templates select = node-set-expression mode = qname><!-- Content: (xsl:sort | xsl:with-param)* --></xsl:apply-templates>

14

Section 02 XSL 과 XSLT 문법

value-of 요소XML 문서에 포함되어 있는 요소 내용을 문자열 형태로 접근할 때 사용value-of 요소를 정의하는 방법

• select 속성 : 값을 추출할 노드 선택• disable-output-escaping 속성 : 이스케이프 문자를 변환해서 출력할

것인지 여부 결정

<xsl:value-ofselect = string-expression disable-output-escaping = "yes" | "no" />

15

output 요소출력 문서의 형식을 지정할 때 사용<output> 요소를 사용하지 않으면 결과 문서가 XML 문서 형태로 유지<output> 요소를 정의하는 방법

Section 02 XSL 과 XSLT 문법

<xsl:output method = "xml" | "html" | "text" | qname-but-not-ncname version = nmtoken encoding = string omit-xml-declaration = "yes" | "no" standalone = "yes" | "no" doctype-system = string cdata-section-elements = qnames indent = "yes" | "no" />

16

output 요소 속성

Section 02 XSL 과 XSLT 문법

속성명 설명 기본값

method 결과 문서의 기본적인 형식을 지정 xml

version method 속성 값의 버전을 나타냄 1.0

encoding 결과 문서의 인코딩을 표현 ( 한글 : EUC-KR) UTF-8

omit-xml-declaration XML 선언 부분이 결과 문서에 포함될 것인지 여부 YES

standalone 결과 문서가 standalone XML 문서인지 여부 지정 YES

doctype-system 결과 문서의 DTD 를 기술하기 위해서 사용 NULL

cdata-section-elements 결과 문서에 CDATA  섹션을 포함하기 위해 사용 . NULL

indent 결과 문서에 오목함 (indentation) 을 추가 . YES

17

if 요소조건에 해당하는 템플릿을 적용하고자 할 때 사용속성값이 test 면 템플릿이 적용됨if 요소를 정의하는 방법

• test 부분에 XPath 함수와 식 사용 가능• else 나 else if 비지원

Section 02 XSL 과 XSLT 문법

<xsl:iftest = boolean-expression><!-- Content: template --></xsl:if>

18

choose/when/otherwise 요소여러 항목 중 한 항목을 선택할 때 사용하는 요소switch 나 caseans 형태와 유사

<choose> 요소 형태<choose> 요소는 내부에 여러 개의 <when> 요소와 하나의 <otherwise> 요소를 가질 수 있음

Section 02 XSL 과 XSLT 문법

<xsl:choose><!-- Content: (xsl:when+, xsl:otherwise?) --></xsl:choose><xsl:when test = boolean-expression><!-- Content: template --></xsl:when><xsl:otherwise><!-- Content: template --></xsl:otherwise>

19

for-each 요소요소에 템플릿을 반복적으로 적용할 때 사용select 속성을 통해 선택된 노드를 반복적으로 적용내용으로 sort 나 template 를 가질 수 있음for 문 유사for-each 요소를 정의하는 방법

Section 02 XSL 과 XSLT 문법

<xsl:for-eachselect = node-set-expression><!-- Content: (xsl:sort*, template) --></xsl:for-each>

20

Section 02 XSL 과 XSLT 문법

sort 요소XML 문서 내용을 정렬할 때 사용<apply-templates>,<for-each> 요소의 자식요소로 사용가능sort 요소를 정의하는 방법

• data-type 속성 : 정렬할 데이터가 숫자인지 , 문자열인지 표현• order 속성 : 오름차순 정렬인지 , 내림차순 정렬인지 지정• case-order 속성 : 문자열을 정렬할 때 대문자가 먼저인지 ,

소문자가 먼저인지 지정

<xsl:sort select = string-expression lang = { nmtoken } data-type = { "text" | "number" | qname-but-not-ncname } order = { "ascending" | "descending" } case-order = { "upper-first" | "lower-first" } />

21

call-template 요소일반 프로그래밍 언어의 함수 호출과 유사name 속성을 이용해서 원하는 템플릿 호출 가능템플릿을 호출할 때 파라미터가 필요할 때는 <with-param> 요소를 이용해서 파라미터를 전달 가능<call-template> 요소 정의 방법

• name 속성 : 호출할 템플릿의 이름

Section 02 XSL 과 XSLT 문법

<xsl:call-templatename = qname><!-- Content: xsl:with-param* --></xsl:call-template>

22

Section 02 XSL 과 XSLT 문법

variable 요소스타일시트에 변수를 정의할 수 있음XSLT 에서는 변수값을 한 번 지정해서 사용하면 수정할 수 없음( 상수 역할 )

<variable> 요소 정의 방법

<xsl:variablename = qname select = expression><!-- Content: template --></xsl:variable>

23

param 요소스타일시트나 템플릿에서 사용name 속성을 가지고 있으며 , 변수 이름 역할을 함

with-param 요소<call-template> 요소에서 다른 템플릿을 호출할 때 사용<with-param> 을 이용해서 호출되는 템플릿에 매개 변수 값으로 전달

Section 02 XSL 과 XSLT 문법

24

param/with-param 요소 정의 방법

Section 02 XSL 과 XSLT 문법

<xsl:paramname = qname select = expression><!-- Content: template --></xsl:param>

<xsl:with-paramname = qname select = expression><!-- Content: template --></xsl:with-param>

25

Section 02 XSL 과 XSLT 문법

element 요소결과 트리에 새로운 XML 요소를 생성할 때 사용XML 결과 트리에 요소를 직접 입력해서 요소를 만들수도 있지만 , 자동으로 새로운 요소를 만들려고 할 때도 사용<element> 요소를 정의하는 방법

• name 속성 : 생성되는 요소 이름• namespace 속성 : 요소가 속한 네임스페이스• use-attribute-sets 속성 : 생성되는 요소가 가지는 속성 집합

<xsl:element name = { qname } namespace = { uri-reference } use-attribute-sets = qnames><!-- Content: template --></xsl:element>

26

Section 02 XSL 과 XSLT 문법

attribute 요소XSLT 결과 트리에 속성을 동적으로 정의하는 방법<attribute> 요소의 내용은 생성되는 속성값으로 사용<attribute> 요소를 정의해서 사용하는 방법

• name 속성 : 생성되는 속성 이름• namespace 속성 : 속성이 속한 네임스페이스

<xsl:attribute name = { qname } namespace = { uri-reference }><!-- Content: template --></xsl:attribute>

27

text 요소XSLT 에서는 결과 트리에 텍스트를 추가하기 위해 사용공백 문자나 특수 문자를 결과 트리에 추가하기 위해 사용<text> 요소를 정의하는 방법

• <text> 요소는 PCDATA 만 가질 수 있음• disable-output-escaping 속성 : 출력 결과에 텍스트 내용을

이스케이프할 것인지 여부 지정

Section 02 XSL 과 XSLT 문법

<xsl:text disable-output-escaping = "yes" | "no"><!-- Content: #PCDATA --></xsl:text>

28

processing-instruction 요소결과 트리에 처리 명령어를 생성하기 위해서 사용processing-instruction 요소를 정의하는 방법

• name 속성 : 처리 명령어의 대상 애플리케이션 이름• processing-instruction: 처리 명령어의 데이터로 사용

comment 요소주석을 생성하는 요소<comment> 요소의 정의 방법

Section 02 XSL 과 XSLT 문법

<xsl:processing-instructionname = { ncname }><!-- Content: template --></xsl:processing-instruction>

<xsl:comment><!-- Content: template --></xsl:comment>

29

copy 요소소스 트리의 내용을 그대로 결과 트리에 복사할 때 사용단 , 현재 노드를 복사할 때 사용노드 속성이나 자식 노드가 자동으로 복사되지는 않음<copy> 요소를 정의하는 방법

copy-of 요소현재 노드와 그 이하 모든 자식 요소와 속성을 결과 트리에 복사할 때 사용<copy-of> 요소를 정의하는 방법

Section 02 XSL 과 XSLT 문법

<xsl:copy use-attribute-sets = qnames><!-- Content: template --></xsl:copy>

<xsl:copy-ofselect = expression />

30

include 요소XSLT 파일에서 다른 XSLT 파일을 포함할 때 사용<stylesheet> 요소의 자식 요소로만 사용<include> 요소가 사용된 위치에서 XSL 파일에서 지정한 XSLT 파일의 내용이 포함 됨<include> 요소의 href 속성은 포함할 XSLT 파일을 표현<include> 요소 정의 방법

Section 02 XSL 과 XSLT 문법

<xsl:includehref = uri-reference />

31

import 요소include 요소와 같은 개념import 가 include 와 다른 것은 include 는 동일한 내용들이 중복되어 정의될 수 없는데 반해서 , impote 요소는 중복 정의가 가능하다 . 중복 정의가 존재하는 경우에는 우선 순위에 의해서 우선 순위가 높은 정의가 먼저 사용<import> 요소가 사용되게 되는 경우에는 stylesheet 요소에서 가장 먼저 선언되어야 함<import> 요소 정의 방법

Section 02 XSL 과 XSLT 문법

<xsl:importhref = uri-reference />

32

XML 문서를 XSLT 를 활용하여 원하는 문서형태로 변환결과 화면

조건• 부록 CD>8 장 >student_table.xml 문서를 결과 화면과 같은 형태로

변환

• 나이를 나타내는 열의 바탕색을 20 세 이하이면 빨간색 , 25 세 이하이면 파란색 , 30 세 이하이면 초록색 , 그 외는 하얀색으로 지정

Section 03 [ 실습 ] XSLT 활용 1

33

Section 04 [ 실습 ] XSLT 활용 2

다양한 XSLT 기능을 포함해서 XML 문서를 조작하는 XSL 문서 작성

결과 화면 조건• 부록 CD>8 장 > 가계부 .xml

문서를 결과 화면 형태로 변환시킨다 .

• 총 수입에서 해당 날짜에 구입한 물건의 목록을 나타내고 지출내역을 나타낸다 . 몇 가지 물건을 구입했는지 개수를 나타내고 , 총 수입에서 총 지출을 뺀 나머지를 잔액으로 출력한다 . 총 수입보다 총 지출이 많은 경우 , 차액을 빨간색으로 표시하고 , [ 적자 ]표시를 한다 .

Thank you


Recommended