103
xml programming 1 XSLT 와 XSL

XSLT 와 XSL

Embed Size (px)

DESCRIPTION

XSLT 와 XSL. Contents. XSL 이란? XSLT 란? XSL 과 XSLT 비교 응용사례. XSL 이란?. XML 문서 구조를 표현할 수 있는 특징. 표현부분을 생략함으로써 장점 확보 확장성 호환성 … XSL 문서 Presentation 능력을 지닌 언어. ( eXtensible Stylesheet Language). Cont. Cont. 신나는 프로야구!. 두산 베어스 선수. 투수 : 진필중 포수 : 홍성흔 1루수: 우 즈 2루수 : 안경현 3루수 : 김동주 - PowerPoint PPT Presentation

Citation preview

Page 1: XSLT 와  XSL

xml programming 1

XSLT 와 XSL

Page 2: XSLT 와  XSL

xml programming 2

Contents

XSL 이란 ?

XSLT 란 ?

XSL 과 XSLT 비교

응용사례

Page 3: XSLT 와  XSL

xml programming 3

XSL 이란 ? XML 문서

구조를 표현할 수 있는 특징 . 표현부분을 생략함으로써 장점 확보

• 확장성• 호환성• …

XSL 문서 Presentation 능력을 지닌 언어 . (eXtensible Stylesheet Language)

Page 4: XSLT 와  XSL

xml programming 4

Cont.

Page 5: XSLT 와  XSL

xml programming 5

Cont.

신나는 프로야구 !

두산 베어스 선수

투수 : 진필중

포수 : 홍성흔

1 루수 : 우 즈

2 루수 : 안경현

3 루수 : 김동주

유격수 : 김민호

우익수 : 심재학

중견수 : 정수근

좌익수 : 장원진

Page 6: XSLT 와  XSL

xml programming 6

Cont.

baseball.xml 과 baseball.fo 비교

baseball.xml• <title> 신나는 프로야구 !</title>

baseball.fo• <fo:block text-align="center" font-weight="bold"

font-size="30pt" font-family="Helvetica, Arial, sans-serif" space-after="30pt" >

신나는 프로야구 !

</fo:block>

Page 7: XSLT 와  XSL

xml programming 7

어떻게 변환시킬 것인가 ? Transformation?

변환…

XSL 문서XML 문서

XSLT 문서

직접 XML 문서를 변환

HTML ,PDF…

XSLT Processor

Page 8: XSLT 와  XSL

xml programming 8

XSLT 란 ? XML to XSL

XML to XML

XML to Other Format… XML to HTML XML to WML XML to RTF

XML to etc…

Page 9: XSLT 와  XSL

xml programming 9

Example

XSL 문서XML 문서

XSLT 문서

XSLT Processor

다른 형태의XML 문서

HTML

WML

PDF

RTF, DOC, HWP…

각각의

Viewer

Page 10: XSLT 와  XSL

xml programming 10

XSLT 와 XSL 비교 Transformation?

변환…

Formatting? Presentation 능력을 지닌 언어

• HTML, PDF, HWP, DOC, RTF…

Page 11: XSLT 와  XSL

xml programming 11

… Formatting Language!!!

Presentation 능력을 지닌 언어 XSL, HTML, PDF, HWP, DOC, RTF…

Transformation Language!!! XML 문서를 다른 Formatting Language 로 바꾸는 역할을

하는 언어 . XSLT

Page 12: XSLT 와  XSL

xml programming 12

Cont.

XSL

XSL

XSLT

XPath

Page 13: XSLT 와  XSL

xml programming 13

XSLT 의 응용사례 Data 의 변환

XML

a.XSL

b.XSL

c.XSL

XSLTProcessor

Page 14: XSLT 와  XSL

xml programming 14

XSL model Template-driven model

XML 문서가 반복적인 구조로 이루어져 있을 경우 . 메일 머지나 주소록 출력의 경우에 XSL 을 적용하여

사용할 수 있다 .

Data-driven model XML 문서가 불규칙적인 data 로 이루어져 있을 경우 . Template fragments 들은 따로따로 각 section 을

처리하기 위해 정의되고 사용됨 .

Page 15: XSLT 와  XSL

xml programming 15

Getting started with XSL 간단한 예제

<?xml version=“1.0”?><?xml-stylesheet type=“text/xsl” href=“hello.xsl”?><greetingk>Hello world</greeting>

<?xml version=“1.0”?><xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” version=“1.0”><xsl:template match=“/”><html><head><title>Greeting</title></head><body><p>Words of greeting : <br><b><i><u><xsl:value-of select=“greeting”/></u></i></b></p></body></html></xsl:template><xsl:stylesheet>

Page 16: XSLT 와  XSL

xml programming 16

Template( 틀 ?) template 의 개념 .

Page 17: XSLT 와  XSL

xml programming 17

Template 스타일시트를 이루는 가장 기본적인 단위

<?xml version=“1.0” ?> <xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:template match=“/”> <HTML> <BODY> <xsl:for-each select=“/strings/s”> <p><xsl:value-of select=“.”/></p> </xsl:for-each> </BODY> </HTML> </xsl:template> </xsl:stylesheet>

템플리트의 구성 템플리트가 적용될 소스 트리 부분 결과 트리로 삽입되어지는 부분

Page 18: XSLT 와  XSL

xml programming 18

Cont. 기본 템플리트

도큐먼트 루트에 대응하는 템플리트를 정해놓지 않았다면 , XSLT 는 미리 주어진 정해진 기본 템플리트를 적용한다 .

기본 템플리트• <xsl:template match=“*|/”> <xsl:apply-templates/> </xsl:template>

내장 템플리트• <xsl:template match=“text()|@*”> <xsl:value-of select=“.”/> </xsl:template>

결국 기본 템플리트를 적용하면 도큐먼트 안의 모든 요소에 적용되어 모든 값이 출력된다 .

Page 19: XSLT 와  XSL

xml programming 19

Document(=/)

<xsl:template match=“/”>

<html>

<head></head>

<body>

<xsl:apply-templates/>

</body>

</html>

</xsl:template>

강좌 이름 =“XML”

강사

이름

학생

toHTML.xsl

class.xml

<html>

<head></head>

<body>

</body>

</html>

XSLT 프로세서 결과물

Page 20: XSLT 와  XSL

xml programming 20

Document(=/)

<xsl:template match=“/”> … <xsl:apply-templates/> …</xsl:template>

<xsl:template match=“ 강좌” > <h1><p align=“CENTER”> <xsl:value-of select=“@ 이름” /> </p></h1> <table align=“center” border=“1”> <xsl:apply-templates/> </table></xsl:template>

강좌 이름 =“XML”

강사

이름

학생

toHTML.xsl

Lab.xml

<html>

<head></head>

<body>

</body>

</html>

Apply-templates

<h1><p align=“CENTER”>XML</p></h1><table align=“center” border=“1”>

</table>

XSLT 프로세서 결과물

Apply-templates

Page 21: XSLT 와  XSL

xml programming 21

XPath

XML 도큐먼트의 다른 부분을 가리키는 유연한 방법

지역 경로

XPath 의 함수들

Page 22: XSLT 와  XSL

xml programming 22

지역 경로

1. 도큐먼트 ( 루트 )1. <xsl:template match=“/”>

2. 엘레먼트 지정1. <xsl:template match=“/ 학생” >2. <xsl:template match=“ 학생” >

3. 경로표현1. <xsl:template match=“/ 학생 / 이름” >2. <xsl:template match=“ 학생 / 이름” >

Page 23: XSLT 와  XSL

xml programming 23

Cont.

4. . : self node

5. .. : parent node

6. 재귀적 내림 연산자1. // : 어느 곳에 있든지 상관없이 이름만으로 경로 지정2. <xsl:template match=“// 이름” >

Page 24: XSLT 와  XSL

xml programming 24

Cont.

1. [ ] 를 이용한 필터링1. <xsl:template match = “ 학생 [ 주소 ]”>2. <xsl:template match = “ 강사 [@ 담당과목 ]”>3. <xsl:template match = “ 학생 [@ 성별 =‘ 남자’ ]”>4. <xsl:template match = “ 학생 [ 주소 =‘ 경기도’ ]”>5. <xsl:template match = “ 이름 [.=‘ 이몽룡’ ]”>

6. / 학생 [@ 성별 =‘ 남자’ ]/ 이름 [. = ‘ 이몽룡’ ]

Page 25: XSLT 와  XSL

xml programming 25

Cont.

2. 와일드 카드 (*)1. <xsl:template match=“*”>2. <xsl:template match=“@*”>3. <xsl:for-each select=“*”>

Page 26: XSLT 와  XSL

xml programming 26

XPath 의 함수들※ 보통의 부모 / 자식 관계나 엘레먼트 / 어트리뷰트 관계로는

일치하지 않는 노드와 노드 집합을 찾는데 사용할 수 있다 .

노드 함수들

위치지정 함수들

산술 함수들

Boolean 함수들

문자열 함수들

Page 27: XSLT 와  XSL

xml programming 27

노드 함수들 name()

node()

processing-instruction()

comment()

text()

Page 28: XSLT 와  XSL

xml programming 28

Cont.

name() : 엘레먼트의 이름을 반환한다 . <xsl:template match=“name”> <xsl:for-each select=“*”> <p><xsl:value-of select=“name()”/></p> </xsl:for-each> </xsl:template>

node() 노드 자신을 반환한다 . 쓰지 않는다 .

Page 29: XSLT 와  XSL

xml programming 29

Cont. processing-instruction()

<xsl:template match=“processing-instruction()”> <xsl:value-of select=“.”/> </xsl:template>

<xsl:template match=“processing-instruction(‘stylesheet’)”> <xsl:value-of select=“.”/> </xsl:template>

comment() <xsl:template match=“comment()”> <xsl:value-of select=“.”/> </xsl:template>

Page 30: XSLT 와  XSL

xml programming 30

Cont.

text() <parent> This is some text. <child>And this is some more text</child> </parent>

<xsl:template match=“parent”> <xsl:value-of select=“.”/> </xsl:template>

<xsl:template match=“parent”> <xsl:value-of select=“text()”/> </xsl:template>

Page 31: XSLT 와  XSL

xml programming 31

Cont. <xsl:template match=“parent”> <xsl:value-of select=“.”/> </xsl:template>

• 결과 : This is some text.

And this is some more text

<xsl:template match=“parent”> <xsl:value-of select=“text()”/> </xsl:template>

• 결과 : This is some text.

Page 32: XSLT 와  XSL

xml programming 32

위치지정 함수들 position()

last()

count()

Page 33: XSLT 와  XSL

xml programming 33

Cont. position()

노드 집합 안에서 노드의 위치를 도큐먼트 순으로 얻기 위해 사용된다 .

예제• <nodes>

<node>a</node> <node>b</node>

<node>c</node></nodes>

• <xsl:template match=“/nodes/node”>• <xsl:template match=“/nodes/node[position()=2]”>• <xsl:template match=“/nodes/node[2]”>

Page 34: XSLT 와  XSL

xml programming 34

Cont. last()

제일 마지막 노드의 위치를 반환한다 . 제일 마지막 위치의 노드를 반환하는 것이 아니다 .

예제• <xsl:template match=“/nodes/node[position() = last()]”

count() 선택된 노드의 자식 노드 숫자를 반환한다 .

예제• <xsl:value-of select=“count(node)”/>

Page 35: XSLT 와  XSL

xml programming 35

산술 함수들 number()

sum()

Page 36: XSLT 와  XSL

xml programming 36

Cont.

number() Character 값을 숫자값으로 변환한다 . 예제

• <element>256</element>• <xsl:if test=“number(@Security)”>

sum() 선택된 노드들의 산술값을 더해서 반환한다 . 예제

• <xsl:value-of select=“sum(/nodes/node)”/>

Page 37: XSLT 와  XSL

xml programming 37

Boolean 함수들 boolean()

not()

true()

false()

Page 38: XSLT 와  XSL

xml programming 38

Cont.

Boolean() XPath 의 표현에 따라 true 또는 false 값을 반환한다 .

• 숫자인 경우• 0 -> false• 0 이외에 수 -> true

• 숫자가 아닌 경우• NaN

• 문자열인 경우• 길이가 0 이면 -> false• 길이가 0 보다 길면 -> true

• 노드인경우• 그 노드가 없으면 -> false• 그 노드가 있으면 -> true

Page 39: XSLT 와  XSL

xml programming 39

Cont. 예제

• <person> <name>YS</name>

<addr>KOREA</addr></person>

• <xsl:template match=“person”> <xsl:if test=“boolean(name)”> <!-- 여기서 작업을 처리한다 --> </xsl:if></xsl:template>

Page 40: XSLT 와  XSL

xml programming 40

Cont.

not() 결과 값을 반대로 변환해서 반환한다 . 예제

• not(boolean(name))

true(), false() 항상 true 값과 false 값을 반환한다 .

Page 41: XSLT 와  XSL

xml programming 41

문자열 함수들

string()

string-length()

concat()

contains()

starts-with()

substring()

substring-after()

substring-before()

translate()

Page 42: XSLT 와  XSL

xml programming 42

Cont.

string() 문자열로 바꿔서 반환한다 .

string-length() 공백을 포함한 문자열의 개수를 반환한다 .

concat() 두개이상의 문자열을 받아서 하나의 문자열로 결합한다 . concat(‘my name’, ‘ ‘, ‘is’, ‘ ‘, ‘YS’)

Page 43: XSLT 와  XSL

xml programming 43

Cont.

contains() 문자열내에 특정 문자열이 포함되었는지를 확인하여 boolean

값을 반환한다 . contain(“my name is YS”, “is YS”)

starts-with() 문자열이 특정 문자열로 시작되는 지를 확인하여 boolean

값을 반환한다 . Start(“my name is YS”, “my”)

Page 44: XSLT 와  XSL

xml programming 44

Cont.

substring() 문자열에서 일부 문자열을 반환한다 . Substring( 문자열 , 가져올문자의시작위치 , 가져올문자의갯수 ) 예제

• Substring(“my name is YS”, 5) “ame is YS”

• Substring(“my name is YS”, 5, 3) “ame”

substring-after() 문자열에서 처음 일치하는 특정한 문자뒤에 있는 문자열을 반환한다 . 예제 : Substring-after(“my name is YS”, “a”) “me is YS”

substring-before() 문자열에서 처음 일치하는 특정한 문자앞에 있는 문자열을 반환한다 . 예제 : Substring-before(“my name is YS”, “a”) “my n”

Page 45: XSLT 와  XSL

xml programming 45

Cont.

translate() 문자열을 변환한다 . 예제

• translate(‘QLSN’, ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’,

‘zyxwvutsrqpomnlkjihgfedcba’)

john 반환

예제 ( 대소문자 변환 )• translate(‘YSJUNG', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',

'abcdefghijklmnopqrstuvwxyz')

‘ysjung’ 반환

Page 46: XSLT 와  XSL

xml programming 46

Cont. 활용예제

예제 : 공백을 더하기 기호로 바꿀때• translate(‘This is string’, ‘ ‘, ‘+’)

예제 : XSLT 에서 활용사례• <xsl:value-of select= “Translate(., ‘abcdefghijklmnopqrstuvwxyz’, ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’)” />

Page 47: XSLT 와  XSL

xml programming 47

Cont. Note!!!

가령 매치되는 문자가 없을 경우에는 원래문자가 반환• translate(‘KING’, ‘ING’, ‘inG’)

‘KinG’

가령 변환대조 문장열의 길이가 다를 경우 , 빼버린다 .• translate(‘+bat+’, ‘abc+’, ‘ABC’)

‘BAT’ (‘+’ 는 매칭되는 변환결과가 없다 !!!)

가령 두번째가 세번째보다 길때 , 결과에 영향을 주지 않는다 .• Translate(‘zero’, ‘eroz’, ‘EROZA’)

‘ZERO’

Page 48: XSLT 와  XSL

xml programming 48

축을 중심으로한 관계

13 개의 정의된 축 self 축 child 축 descendant 축 descendant-or-self 축 parent 축 ancestor 축 ancestor-or-self 축 following-sibling 축 preceding-sibling 축 following 축 preceding 축 attribute 축 namespace 축

Page 49: XSLT 와  XSL

xml programming 49

Cont. self 축

현재노드를 가리킨다 . 예제

• self::node() .

child 축 현재노드의 자식들이 있는 축을 가리킨다 . 일반적으로 생략해서 사용 예제

• child::order ‘order’

descendant 축 현재노드의 자식들과 자식들의 자식들까지 포함한다 .

descendant-or-self 축 자신을 포함하고 자식들과 자식들의 자식들까지 포함한다 . ‘//’ 와 같은 의미

Page 50: XSLT 와  XSL

xml programming 50

Cont. parent 축

현재 노드의 부모를 포함한다 .

ancestor 축 현재 노드의 부모와 부모의 부모를 포함한다 .

ancestor-or-self 축 자신을 포함하고 , 현재 노드의 부모와 부모의 부모를 포함한다 .

following-sibling 축 현재 노드 뒤에 오는 형제 노드를 포함한다 .

preceding-sibling 축 현재 노드 앞에 오는 형제 노드를 포함한다 .

following 축 현재 노드뒤에 오는 형제 노드와 그 노드의 자식까지 포함한다 .

preceding 축 현재 노드 앞에 오는 형제 노드와 그 노드의 자식까지 포함한다 .

Page 51: XSLT 와  XSL

xml programming 51

Cont. attribute 축

속성들을 포함하는 축이다 . ‘@’ 와 같은 의미

namespace 축

Page 52: XSLT 와  XSL

xml programming 52

Cont.

사용 방법 축이름 :: 노드이름

예제 child::order (order) descendant-or-self::description (.//description) order/attribute::number (order/@number) //date/parent::order (//date/../order) /order/descendant::description //quantity/ancestor::order //description/following-sibling::quantity //quantity/preceding-sibling::description /order/date/following::* /order/item/preceding::*

실습하기 !!!

Page 53: XSLT 와  XSL

xml programming 53

쉬어가기 !

Page 54: XSLT 와  XSL

xml programming 54

XSLT 프로세서

XML 문서

XSLT 문서

결과문서명령 실행

템플릿

XML 소스트리 결과트리

XSLT 프로세서

Page 55: XSLT 와  XSL

xml programming 55

작업순서

1. XML 문서를 읽어 들여서 DOM Tree 를 구성한다 . 또한 XSLT문서를 읽어 들여서 템플릿 단위의 트리를 구성한다 .

2. 트리의 루트 노드부터 시작해서 XSLT 문서에서 가장 유사하게 매칭되는 템플릿이 있는지를 찾는다 .

3. 매칭되는 템플릿이 있으면 현재 노드에 적용한다 .

4. <apply-templates> 등을 만나면 하위 노드가 순서에 따라 현재 노드가 되어 2)번 작업부터 반복해 적용해 나간다 .

Page 56: XSLT 와  XSL

xml programming 56

XML 문서와 XSLT 의 결합

1. 내부에 포함된 경우

2. 참조로 연결된 경우

3. 연결없이 결합되는 경우

Page 57: XSLT 와  XSL

xml programming 57

결과 문서XSLT프로세서

XML 문서

XSLT 문서

Page 58: XSLT 와  XSL

xml programming 58

결과 문서XSLT프로세서

XML 문서

XSLT 문서

Page 59: XSLT 와  XSL

xml programming 59

XML 문서 결과 문서XSLT프로세서

XSLT 문서

Page 60: XSLT 와  XSL

xml programming 60

Template 스타일시트를 이루는 가장 기본적인 단위

<?xml version=“1.0” ?> <xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:template match=“/”> <HTML> <BODY> <xsl:for-each select=“/strings/s”> <p><xsl:value-of select=“.”/></p> <xsl:for-each> </BODY> </HTML> </xsl:template> </xsl:stylesheet>

템플리트의 구성 템플리트가 적용될 소스 트리 부분 결과 트리로 삽입되어지는 부분

Page 61: XSLT 와  XSL

xml programming 61

Cont. 적용 우선 순위 ?

<doc>hi~~ <greeting> 안뇽 !!!</greeting> </do0c>

<!-- 무엇이 매칭될까 ?--> <xsl:template match="greeting"> <g1><xsl:value-of select="."/></g1> </xsl:template>

<xsl:template match="/doc/greeting"> <g2><xsl:value-of select="."/></g2> </xsl:template>

Page 62: XSLT 와  XSL

xml programming 62

XLST 의 구성 요소들 <xsl:stylesheet> <xsl:template> <xsl:apply-templates> <xsl:value-of> <xsl:output> <xsl:element> <xsl:attribute> <xsl:attribute-set> <xsl:text> <xsl:if> <xsl:choose> <xsl:for-each> <xsl:copy-of> <xsl:copy> <xsl:sort>

Page 63: XSLT 와  XSL

xml programming 63

<xsl:stylesheet> <xsl:stylesheet version=“1.0”

xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

루트 엘리먼트의 역할을 한다 .

네임스페이스를 정확히 기재해야 함• XSLT 프로세서가 XSLT 태그를 구별하는 방법

verions 과 xmlns:xsl 은 반드시 필요한 요소

Page 64: XSLT 와  XSL

xml programming 64

<xsl:template> XSLT 스타일시트를 구성하는 기본 엘레먼트

<xsl:template match=“Xpath pattern” name=“template name” priority=“number” mode=“mode name”>

XSLT 스타일시트를 구성하는 기본 엘레먼트

Page 65: XSLT 와  XSL

xml programming 65

Cont. match 가 가리키는 부분은 expression 이 아닌 pattern!!!

priority 는 우선순위 지정

name 은 Named Template 를 만드는데 사용 . Match 와 같이 일치되는 부분에서 실행되어지는 것이 아니라 이름으로 호출되어 진다 . Named Template 에서 다시 설명 .

mode 는 소스 트리의 같은 부분이 한 번 이상 처리되어야 할 때 사용한다 . 뒤쪽 Mode 부분에서 다시 설명 .

Page 66: XSLT 와  XSL

xml programming 66

<xsl:apply-templates> 템플리트 안에서 다른 템플리트를 호출할 때 사용한다 .

<xsl:apply-templates select=“Xpath expression” mode=“mode name”>

Select

• 특정하게 처리하고자 하는 node 를 지정할 때 사용된다 .

• 생략되었을 경우에 처리되는 node 는 현재 node 의 자식들 .

• 어트리뷰트나 네임스페이스의 경우 처리되지 않음 .• 처리하고자 할 경우• <xsl:apply-templates select=“@*”/>

Mode 는 뒤에서 설명 ^^

Page 67: XSLT 와  XSL

xml programming 67

<xsl:value-of> Select 속성에 지정된 Xpath expression 에 정해진 값을

찾기 위해 문맥 노드를 탐색하여 결과 트리에 삽입한다 .

<xsl:value-of select=“Xpath expression” disable-output-escaping=“yes or no”

Select 의 예제 :• <xsl:value-of select=“.”>• <xsl:value-of select=“customer/@id”>

Page 68: XSLT 와  XSL

xml programming 68

Cont. Disable-output-escaping 은 “ &amp;” 나 “ &lt” 와 같은

이스케이프 문자대신 , “&” 나 “ <“ 문자를 출력하도록 지시 .• 기본적으로 “ no” 로 설정 -> 그대로 출력• “yes” -> 변환하여 출력

<xsl:value-of select="." disable-output-escaping="no" />

• &amp;

<xsl:value-of select="." disable-output-escaping=“yes" />• &

실습해보기 !!!

Page 69: XSLT 와  XSL

xml programming 69

<xsl:output> XSLT 는 XML 이나 HTML, 그리고 Text 로 출력할 수 있다 . <xsl:output> 은 사용할 방법을 지정할 수 있게 한다 . 만약 이 엘레먼트가 스타일시트에 포함된다면 반드시

<xsl:template> 자식이 되어야 한다 .

<xsl:output method=“xml or html or text” version=“version” encoding=“encoding” omit-xml-declaration=“yes or no” standalone=“yes or no” cdata-section-elements=“CDATA section” indent=“yes or no”/>

Page 70: XSLT 와  XSL

xml programming 70

Cont. <xsl:output> 이 포함되지 않았을 경우 , 기본 출력 방법은 ?

만약 결과 트리의 루트가 <html>( 대소문자모두 ) 라면 ?• HTML

그렇지 않다면 ?• XML

Page 71: XSLT 와  XSL

xml programming 71

Cont. method

• XML, HTML, TEXT 등 출력형태 지정

version : XML 일 때만 사용 encoding : XML 일 때만 사용 standalone : XML 일 때만 사용

omit-xml-declaration• XML 선언부를 생략할 수 있다 . ( 기본값 “ no”)

cdata-section-elements• 해당되는 값을 cdata section 에 넣는다 . (??? XSLT 가 잘 지원 못함 )

indent• 보기 좋은 공백을 만들어 준다 .

Page 72: XSLT 와  XSL

xml programming 72

<xsl:element> Element 를 만들 수 있는 기능을 제공

<xsl:element name=“element name” use-attribute-sets=“attribute set names”>

Name• 엘레먼트의 태그 이름을 정해 준다

사용 예제• <xsl:element name=“ 이름” > 홍길동 </xsl:element>• < 이름 > 홍길동 </ 이름 >

Page 73: XSLT 와  XSL

xml programming 73

Cont. 동적 생성

• <xsl:element name=“{.}”>My text</xsl:element> Xpath expression

예제• <xsl:template match=“name”> <xsl:element name=“{.}”> 인간성좋음 </xsl:element> </xsl:template>

• <name> 홍길동 </name>

결과• < 홍길동 > 인간성좋음 </ 홍길동 >

Page 74: XSLT 와  XSL

xml programming 74

Cont. 실습

Attribute 를 가지고 있는 XML 문서를 Element 를 가진 XML문서로 바꾸어 보자 .

<?xml version="1.0"?><people> <name first="John" middle="Fitzgerald Johansen" last="Doe"/> <name first="Franklin" middle="D." last="Roosevelt"/> <name first="Alfred" middle="E." last="Neuman"/> <name first="John" middle="Q." last="Public"/> <name first="Jane" middle="" last="Doe"/></people>

Page 75: XSLT 와  XSL

xml programming 75

Cont.

<?xml version="1.0" encoding="UTF-16"?><people> <name> <first>John</first> <middle>Fitzgerald Johansen</middle> <last>Doe</last> </name> <name> <first>Franklin</first> <middle>D.</middle> <last>Roosevelt</last> </name>

<name> <first>Alfred</first> <middle>E.</middle> <last>Neuman</last> </name>

<name> <first>John</first> <middle>Q.</middle> <last>Public</last> </name>

<name> <first>Jane</first> <middle></middle> <last>Doe</last> </name></people>

Page 76: XSLT 와  XSL

xml programming 76

<xsl:attribute> Attribute 를 만들 수 있는 기능을 제공

<xsl:attribute name=“attribute name”>

name• Attribute 의 이름을 정해 준다

사용 예제• <name> <xsl:attribute name=“번호” >123</xsl:attribute> 홍길동 </name>

• <name 번호 =“123”> 홍길동 </name>

Page 77: XSLT 와  XSL

xml programming 77

Cont. 동적 생성의 예

• <name> <xsl:attribute name=“{.}”>123</xsl:attribute> 홍길동 </name>※ 엘레먼트뒤에서 사용되었다 .

잘못된 예• <name> 홍길동 <xsl:attribute name=“{.}”>123</xsl:attribute> </name>※ PCDATA 의 어트리뷰트가 되려고 한다 !!??

Page 78: XSLT 와  XSL

xml programming 78

<xsl:attribute-set> Attribute 그룹을 만드는 기능 제공

<xsl:attribute-set name=“IdSize”> <xsl:attribute name=“id”>123</xsl:attribute> <xsl:attribute name=“Size”>100</xsl:attribute> </xsl:attribute-set>

Page 79: XSLT 와  XSL

xml programming 79

Cont.

실습 엘레먼트만 가지고 있는 문서를 어트리뷰트를 가지도록

만들어라 .

Page 80: XSLT 와  XSL

xml programming 80

Cont.

<?xml version="1.0" encoding="UTF-16"?><people> <name> <first>John</first> <middle>Fitzgerald Johansen</middle> <last>Doe</last> </name>

<name> <first>Franklin</first> <middle>D.</middle> <last>Roosevelt</last> </name>

<name> <first>Alfred</first> <middle>E.</middle> <last>Neuman</last> </name>

<name> <first>John</first> <middle>Q.</middle> <last>Public</last> </name>

<name> <first>Jane</first> <middle></middle> <last>Doe</last> </name></people>

Page 81: XSLT 와  XSL

xml programming 81

Cont.

다음과 같이 바꾸어라 .

<?xml version="1.0"?><people> <name first="John" middle="Fitzgerald Johansen" last="Doe"/> <name first="Franklin" middle="D." last="Roosevelt"/> <name first="Alfred" middle="E." last="Neuman"/> <name first="John" middle="Q." last="Public"/> <name first="Jane" middle="" last="Doe"/></people>

Page 82: XSLT 와  XSL

xml programming 82

<xsl:text> 단순한 Text(PCDATA) 를 결과 트리에 삽입하는 기능 제공

<xsl:text disable-output-escaping=“yes or no” />

예제• <xsl:value-of select=“’john’”/> <xsl:value-of select=“’Fitzgerald Johansen’”/>• <xsl:value-of select=“’Deo’”>

• 결과 : johnFitzgeraldJohansenDoe

• 원하는 결과• john Fitzgerald Johansen Doe

Page 83: XSLT 와  XSL

xml programming 83

<xsl:if> Boolean 값에 의해 참이면 실행되고 , 거짓이면 실행되지

않는다 .

<xsl:if test = “Boolean expression”>

Test 에는 boolean 값이 온다 .

예제• <xsl:if test=“name” >Name 을 만났다 !!!</xsl:if>• <xsl:if test="@ 성별 = '남자 ' ">• <xsl:if test=“first[.= ‘ 길동’ ]”>• <xsl:if test=“ 이름 [@ 성별 = 남자 ]” >

실습하기 !!!

Page 84: XSLT 와  XSL

xml programming 84

<xsl:choose>

Boolean 값에 의해 여러개중에 하나가 선택되어져 실행된다 . 무조건 한번 실행되어지면 choose 는 제어권을 잃는다 .

<xsl:choose> <xsl:when test = “boolean expression”> <xsl:when test = “boolean expression”> <xsl:otherwise> </xsl:choose>

예제• <xsl:choose> <xsl:when test = “number[. &gt; 2000]A big number </xsl:when> <xsl:when test = “number[. &gt; 1000]A medium

number</xsl:when> <xsl:otherwise>A small number</xsl:otherwise> <xsl:choose>

Page 85: XSLT 와  XSL

xml programming 85

<xsl:for-each> Select 의 Xpath expression 에 일치하는 모든 노드에

대해서 실행 . 템플리트 내에 위치 .

<xsl:for-each select=“name”> This is name element. </xsl:for-each>

위 예제의 경우 모든 name 에서 다 실행된다 .

템플리트 내에 또다른 템플리트를 가지고 있는 것과 같이 동작한다 .

Page 86: XSLT 와  XSL

xml programming 86

Cont. 실습

다음의 XSLT 문서를 for-each 를 사용해서 고치시오 .

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" indent="yes"/>

<xsl:template match="/"> <people> <xsl:apply-templates select="/people/name"/> </people></xsl:template>

<xsl:template match="name"> <name> <xsl:apply-templates select="@*"/> </name></xsl:template>

<xsl:template match="@*"> <xsl:element name="{name()}"><xsl:value-of select="."/></xsl:element></xsl:template></xsl:stylesheet>

Page 87: XSLT 와  XSL

xml programming 87

<xsl:copy-of> 소스 트리의 일부를 취해서 결과 트리에 복사해준다 .

<xsl:copy-of select = “Xpath expression”/>

select속성에 노드를 지정하면 , 선택된 노드와 atrribute, 자식 노드등을 결과트리에 담는다 .

실습하기 !!!

Page 88: XSLT 와  XSL

xml programming 88

<xsl:copy> <xsl:copy-of> 와 유사하나 선택된 노드만 복사한다 . 선택된

노드안에 들어갈 어트리뷰트나 자식노드를 지정할 수 있다 .

<xsl:copy use-attribute-sets=“att set names”>

현재 노드의 자식이나 attribute 가 복사되지 않는다 . 대신 들어갈 자식노드나 attribute 를 지정할 수 있다 .

Page 89: XSLT 와  XSL

xml programming 89

Cont. 예제

• <name> <first>YS</first> <last>Jung</last></name>

• <xsl:template match=“name”> <xsl:copy /></xsl:template>

결과• <name/>

Page 90: XSLT 와  XSL

xml programming 90

Cont. 예제

• <name> <first>YS</first> <last>Jung</last></name>

• <xsl:template match=“name”> <xsl:copy> <xsl:value-of select = “.”/> </xsl:copy></xsl:template>

결과• <name>

YS Jung</name>

Page 91: XSLT 와  XSL

xml programming 91

<xsl:sort> 자식 엘레먼트를 정렬할 수 있는 기능 제공

<xsl:sort select=“Xpath expression” lang=“lang” data-type=“text or number” order=“ascending or descending” case-order=“upper-first or lower-first”/>

Page 92: XSLT 와  XSL

xml programming 92

Cont. Select 는 정렬하는데 기준으로 사용하는 부분을 정의

data-type 은 숫자인지 문자인지를 지정 ( 기본값 Text)• Text 의 경우

• 1, 10, 11, 5• Number 인 경우

• 1, 5, 10, 11

order 는 결과의 정렬이 오름차순인지 내림차순인지를 지정 ( 기본값 오름차순 )

Case-order 는 대문자가 먼저인지 , 소문자가 먼저인지를 결정• Upper-first

• A, B, a, b• Lower-first

• a A b B

Page 93: XSLT 와  XSL

xml programming 93

모드 (mode) <xsl:template> <xsl:apply-templates>

템플리트를 만들때 , mode 속성을 지정하고 이름을 준다 .• <xsl:template match=“name” mode=“TOC”/>• <xsl:template match=“name” mode=“body”/>

이 템플리트를 호출할 때는 mode 를 지정할 수 있다 .• <xsl:apply-templates select=“name” mode=“TOC”/>

Page 94: XSLT 와  XSL

xml programming 94

Cont.

<?xml version="1.0"?><XSL> <title>XSLT - The Gory Details</title> <section>Templates <paragraph> We have been introduced briefly to the concept of <important>templates</important>. These are really the heart and soul of XSLT. Style sheets are simply a collection of these templates, which are applied to the input document to create the output document. </paragraph> <paragraph> Let's take another look at a previous...</paragraph> </section> <section> XSLT's Order of Operations <paragraph> If a style sheet can have...</paragraph> <paragraph>Actually...</paragraph> </section></XSL>

Page 95: XSLT 와  XSL

xml programming 95

Cont.

Page 96: XSLT 와  XSL

xml programming 96

Cont. 실습

XML 문서를 화면과 같이 보이게 하는 XSLT 문서 만들어 보기 !

Page 97: XSLT 와  XSL

xml programming 97

<xsl:variable> 상수정의

• <xsl:variable name=“PI”>3.14</xsl:variable>

• <xsl:variable name=“name” select=“/people/name”/>• 이경우에는 Content 를 가질 수 없다 .

사용예• <math pi=“{$PI}”/>

• <xsl:value-of select=“$PI”/>

• $를 붙여서 사용한다 . 그러면 Xpath 를 사용하는 어느곳에서든지 상수를 사용할 수 있다 .

Page 98: XSLT 와  XSL

xml programming 98

Cont. 확장된 사용예

• <xsl:variable name=“space”> <xsl:text> </xsl:text></xsl:variable>

<xsl:variable name=“name”> <name> <xsl:value-of select=“/name/first”/> <xsl:value-of select=“$space”/> <xsl:value-of select=“/name/last”/> </name></xsl:variable>

<xsl:copy-of select=“$name”/>

실습하기 !!!

Page 99: XSLT 와  XSL

xml programming 99

Cont.

전역 상수

지역 상수

상수의 유효 영역 (scope)

예제• <xsl:stylesheet version=“1.0” xmlns:xsl=“…”>

<xsl:output method=“text”/>

<xsl:variable name=“age”>29</xsl:variable>

<xsl:template match=“/”> <xsl:variable name=“name”>YS</xsl:variable> <xsl:value-of select=“concat($name, ‘ is ‘, $age)”/> <xsl:template>

</xsl:stylesheet>

실행결과• YS is 29

Page 100: XSLT 와  XSL

xml programming 100

Cont. 예제

• <xsl:stylesheet version=“1.0” xmlns:xsl=“…”> <xsl:output method=“text”/>

<xsl:variable name=“name”>YS</xsl:variable>

<xsl:template match=“/”> <xsl:variable name=“name”>DJ</xsl:variable> <xsl:value-of select=“$name”/> </xsl:template>

</xsl:stylesheet>

결과• DJ

Page 101: XSLT 와  XSL

xml programming 101

Named Templates

Named Template를 호출한다 .

Xpath 에 일치되는 템플리트가 호출되는 것이 아니라 이름을 가지고 지정한 템플리트가 호출되게 하는 방법이다 .

예제• <xsl:template match=“/”>

<xsl:for-each select=“name”> <xsl:call-template name=“bold”/> </xsl:for-each>

<xsl:for-each select=“not-name”> <xsl:call-template name=“bold”/> </xsl:for-each></xsl:template>

<xsl:template name=“bold”> <B><xsl:value-of select=“.”/></B></xsl:template>

템플리트에서 name 과 match 를 동시에 사용할 수 있다 .

Page 102: XSLT 와  XSL

xml programming 102

Parameter

비교 <xsl:template name=“name”>

First Name : <xsl:value-of select=“first”/> Last Name : <xsl:value-of select=“last”/></xsl:template>

<xsl:template name=“name”> <xsl:param name=“first”><xsl:value-of select=“first”/></xsl:param> <xsl:param name=“last”><xsl:value-of select=“last”/></xsl:param> First Name : <xsl:value-of select=“$first”/> Last Name : <xsl:value-of select=“$last”/></xsl:template>

Page 103: XSLT 와  XSL

xml programming 103

Cont.

<xsl:template match="/"> <xsl:for-each select="name"> <!-- 여기가 새로운 부분 시작 -->

<xsl:call-template name="name"> <xsl:with-param name="first"><xsl:value-of select="given"/></xsl:with-

param> <xsl:with-param name="last"><xsl:value-of select="family"/></xsl:with-

param> </xsl:call-template> <!-- 여기가 새로운 부분 마지막 --> </xsl:for-each> </xsl:template>

<xsl:template name=“name”> <xsl:param name=“first”><xsl:value-of select=“first”/></xsl:param> <xsl:param name=“last”><xsl:value-of select=“last”/></xsl:param> First Name : <xsl:value-of select=“$first”/> Last Name : <xsl:value-of select=“$last”/></xsl:template>

Param 보다 with-param 이 우선순위가 높다 .