34
8 8 ㅎㅎ • XSL 개개 • XSL 개 XSLT 개개 • [ 개개 ] XSLT 개개 1 • [ 개개 ] XSLT 개개 2 XSL, XSLT

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

Embed Size (px)

DESCRIPTION

ㅎㅎ. XSL, XSLT. XSL 개념 XSL과 XSLT 문법 [실습] XSLT 활용 1 [실습] XSLT 활용 2. 8 장 . XSL, XSLT. 학습목표 XSL 기본 개념 학습 XSLT 구조 이해와 활용 XML 문서 조작을 위한 XSL 문법 학습 XML 문서 조작을 위한 활용 방법 학습. XSL 개념 Extensible Stylesheet Language 약어 XML 문서의 스타일을 정의하기 위한 언어 XSL 구성 - PowerPoint PPT Presentation

Citation preview

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