PowerPoint 프레젠테이션

Download Report

Transcript PowerPoint 프레젠테이션

ㅎㅎ
8장 XSL, XSLT
•
•
•
•
XSL 개념
XSL과 XSLT 문법
[실습] XSLT 활용 1
[실습] XSLT 활용 2
8장. XSL, XSLT
학습목표
 XSL 기본 개념 학습
 XSLT 구조 이해와 활용
 XML 문서 조작을 위한 XSL 문법 학습
 XML 문서 조작을 위한 활용 방법 학습
2
Section 01 XSL 개념
XSL 개념
Extensible Stylesheet Language 약어
XML 문서의 스타일을 정의하기 위한 언어
XSL 구성
변환 언어(transformation language)인 XSLT(XSL
Transformations)와 출력 언어인 XSL FO(XSL Formatting Objects)
로 구성
XSL
XSLT
XPath
XSL-FO
[그림 8-1] XSL 구성
3
Section 01 XSL 개념
XSL 역할
XML 문서 변환과 포맷 지정
XSLT 적용
문서 변환
XML 문서
XSLT 처리기
XSL FO 적용
다른
XML 문서
포맷 지정
XML 전용 브라우저
HTML 문서
익스플로러
WML 문서
휴대폰 이미지
…
??
XSLT 처리기
[그림 8-2] XSLT와 XSL FO 역할
4
Section 01 XSL 개념
XSL 문서 적용
XML 문서 도입부에 다음과 같이 선언
<?xml version="1.0" encoding="euc-kr"?>
<xml-stylesheet type="text/xsl“ href="doc.xsl”?>
<student>
<name> 고소영 </name>
</student>
결과 문서 생성과 출력 과정
5
Section 02 XSL과 XSLT 문법
템플릿 (template)
XML 문서를 변환하기 위해 변환 규칙
<template> 요소를 이용해서 표현
<template> 요소
문서를 변환하기 위한 명령어와 내용이 표현
규칙이 적용될 XML 요소를 찾기 위해서 XPath 속성에 해당하는
match 속성 사용
<stylesheet> 요소
XSLT 문서의 최상위 원소
형식
http://www.w3.org/1999/XSL/Transform
6
Section 02 XSL과 XSLT 문법
XML 문서 구조
7
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>
8
Section 02 XSL과 XSLT 문법
<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
9
Section 02 XSL과 XSLT 문법
템플릿 요소
문서 전체 변환 또는 일부분 선택 변환 가능
템플릿 정의 예
<xsl:template
match = pattern
name = qname
priority = number
mode = qname>
<!-- Content: (xsl:param*, template) -->
</xsl:template>
10
Section 02 XSL과 XSLT 문법
템플릿 속성
match 속성
• XML 문서 위치를 지정하기 위해서 XPath 표현식을 사용
• 템플릿 규칙을 입력하기 위해서는 반드시 문서 루트를 지정해야 함
name 속성
• 이름이 부여된 템플릿을 만들 때 템플릿 이름을 입력하는 속성
• name 속성을 사용한 템플릿은 <call-template> 요소에 의해 호출
priority 속성
• 적용 가능한 템플릿이 여러 개 정의되었을 때 우선순위를 지정하는 속
성
• priority 속성값이 크면 클수록 우선순위 높아짐
mode 속성
• XML 문서에서 동일한 부분에 적용되는 템플릿이 여러 개 있을 때, 원
하는 템플릿만 호출할 수 있도록 함
• 소스 트리의 동일한 부분을 여러 번 처리해야 할 경우 사용
11
Section 02 XSL과 XSLT 문법
템플릿 사용 예
템플릿 사용: 임의의 XML 문서를 HTML 문서로 변환
<xsl:template match="/">
student.xsl
<html>
<body>
<h1> XSLT에 의해 HTML 문서로 변환된 결과를 출력한다.</h1>
</body>
</html>
</xsl:template>
12
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>
13
Section 02 XSL과 XSLT 문법
value-of 요소
XML 문서에 포함되어 있는 요소 내용을 문자열 형태로 접근할 때
사용
value-of 요소를 정의하는 방법
<xsl:value-of
select = string-expression
disable-output-escaping = "yes" | "no" />
• select 속성: 값을 추출할 노드 선택
• disable-output-escaping 속성: 이스케이프 문자를 변환해서 출력할 것
인지 여부 결정
14
Section 02 XSL과 XSLT 문법
output 요소
출력 문서의 형식을 지정할 때 사용
<output> 요소를 사용하지 않으면 결과 문서가 XML 문서 형태로
유지
<output> 요소를 정의하는 방법
<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"
/>
15
Section 02 XSL과 XSLT 문법
output 요소 속성
속성명
설명
기본값
결과 문서의 기본적인 형식을 지정
xml
version
method 속성 값의 버전을 나타냄
1.0
encoding
결과 문서의 인코딩을 표현(한글 : EUC-KR)
omit-xml-declaration
XML 선언 부분이 결과 문서에 포함될 것인지 여부
YES
standalone
결과 문서가 standalone XML 문서인지 여부 지정
YES
doctype-system
결과 문서의 DTD를 기술하기 위해서 사용
NULL
cdata-section-elements
결과 문서에 CDATA 섹션을 포함하기 위해 사용.
NULL
indent
결과 문서에 오목함(indentation)을 추가.
method
UTF-8
YES
16
Section 02 XSL과 XSLT 문법
if 요소
조건에 해당하는 템플릿을 적용하고자 할 때 사용
속성값이 test면 템플릿이 적용됨
if 요소를 정의하는 방법
<xsl:if
test = boolean-expression>
<!-- Content: template -->
</xsl:if>
• test 부분에 XPath 함수와 식 사용 가능
• else나 else if 비지원
17
Section 02 XSL과 XSLT 문법
choose/when/otherwise 요소
여러 항목 중 한 항목을 선택할 때 사용하는 요소
switch나 caseans 형태와 유사
<choose> 요소 형태
<choose> 요소는 내부에 여러 개의 <when> 요소와 하나의
<otherwise> 요소를 가질 수 있음
<xsl:choose>
<!-- Content: (xsl:when+, xsl:otherwise?) -->
</xsl:choose>
<xsl:when test = boolean-expression>
<!-- Content: template -->
</xsl:when>
<xsl:otherwise>
<!-- Content: template -->
</xsl:otherwise>
18
Section 02 XSL과 XSLT 문법
for-each 요소
요소에 템플릿을 반복적으로 적용할 때 사용
select 속성을 통해 선택된 노드를 반복적으로 적용
내용으로 sort나 template를 가질 수 있음
for 문 유사
for-each 요소를 정의하는 방법
<xsl:for-each
select = node-set-expression>
<!-- Content: (xsl:sort*, template) -->
</xsl:for-each>
19
Section 02 XSL과 XSLT 문법
sort 요소
XML 문서 내용을 정렬할 때 사용
<apply-templates>,<for-each> 요소의 자식요소로 사용가능
sort 요소를 정의하는 방법
<xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" | qname-but-not-ncname }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" } />
• data-type 속성: 정렬할 데이터가 숫자인지, 문자열인지 표현
• order 속성: 오름차순 정렬인지, 내림차순 정렬인지 지정
• case-order 속성: 문자열을 정렬할 때 대문자가 먼저인지, 소문자가 먼
저인지 지정
20
Section 02 XSL과 XSLT 문법
call-template 요소
일반 프로그래밍 언어의 함수 호출과 유사
name 속성을 이용해서 원하는 템플릿 호출 가능
템플릿을 호출할 때 파라미터가 필요할 때는 <with-param> 요소를
이용해서 파라미터를 전달 가능
<call-template> 요소 정의 방법
<xsl:call-template
name = qname>
<!-- Content: xsl:with-param* -->
</xsl:call-template>
• name 속성: 호출할 템플릿의 이름
21
Section 02 XSL과 XSLT 문법
variable 요소
스타일시트에 변수를 정의할 수 있음
XSLT에서는 변수값을 한 번 지정해서 사용하면 수정할 수 없음(상
수 역할)
<variable> 요소 정의 방법
<xsl:variable
name = qname
select = expression>
<!-- Content: template -->
</xsl:variable>
22
Section 02 XSL과 XSLT 문법
param 요소
스타일시트나 템플릿에서 사용
name 속성을 가지고 있으며, 변수 이름 역할을 함
with-param 요소
<call-template> 요소에서 다른 템플릿을 호출할 때 사용
<with-param>을 이용해서 호출되는 템플릿에 매개 변수 값으로
전달
23
Section 02 XSL과 XSLT 문법
param/with-param 요소 정의 방법
<xsl:param
name = qname
select = expression>
<!-- Content: template -->
</xsl:param>
<xsl:with-param
name = qname
select = expression>
<!-- Content: template -->
</xsl:with-param>
24
Section 02 XSL과 XSLT 문법
element 요소
결과 트리에 새로운 XML 요소를 생성할 때 사용
XML 결과 트리에 요소를 직접 입력해서 요소를 만들수도 있지만,
자동으로 새로운 요소를 만들려고 할 때도 사용
<element>요소를 정의하는 방법
<xsl:element
name = { qname }
namespace = { uri-reference }
use-attribute-sets = qnames>
<!-- Content: template -->
</xsl:element>
• name 속성: 생성되는 요소 이름
• namespace 속성: 요소가 속한 네임스페이스
• use-attribute-sets 속성: 생성되는 요소가 가지는 속성 집합
25
Section 02 XSL과 XSLT 문법
attribute 요소
XSLT 결과 트리에 속성을 동적으로 정의하는 방법
<attribute> 요소의 내용은 생성되는 속성값으로 사용
<attribute> 요소를 정의해서 사용하는 방법
<xsl:attribute
name = { qname }
namespace = { uri-reference }>
<!-- Content: template -->
</xsl:attribute>
• name 속성: 생성되는 속성 이름
• namespace 속성: 속성이 속한 네임스페이스
26
Section 02 XSL과 XSLT 문법
text 요소
XSLT에서는 결과 트리에 텍스트를 추가하기 위해 사용
공백 문자나 특수 문자를 결과 트리에 추가하기 위해 사용
<text>요소를 정의하는 방법
<xsl:text
disable-output-escaping = "yes" | "no">
<!-- Content: #PCDATA -->
</xsl:text>
• <text> 요소는 PCDATA만 가질 수 있음
• disable-output-escaping 속성: 출력 결과에 텍스트 내용을 이스케이프
할 것인지 여부 지정
27
Section 02 XSL과 XSLT 문법
processing-instruction 요소
결과 트리에 처리 명령어를 생성하기 위해서 사용
processing-instruction 요소를 정의하는 방법
<xsl:processing-instruction
name = { ncname }>
<!-- Content: template -->
</xsl:processing-instruction>
• name 속성: 처리 명령어의 대상 애플리케이션 이름
• processing-instruction:처리 명령어의 데이터로 사용
comment 요소
주석을 생성하는 요소
<comment> 요소의 정의 방법
<xsl:comment>
<!-- Content: template -->
</xsl:comment>
28
Section 02 XSL과 XSLT 문법
copy 요소
소스 트리의 내용을 그대로 결과 트리에 복사할 때 사용
단, 현재 노드를 복사할 때 사용
노드 속성이나 자식 노드가 자동으로 복사되지는 않음
<copy> 요소를 정의하는 방법
<xsl:copy
use-attribute-sets = qnames>
<!-- Content: template -->
</xsl:copy>
copy-of 요소
현재 노드와 그 이하 모든 자식 요소와 속성을 결과 트리에 복사할
때 사용
<copy-of>요소를 정의하는 방법
<xsl:copy-of
select = expression />
29
Section 02 XSL과 XSLT 문법
include 요소
XSLT 파일에서 다른 XSLT 파일을 포함할 때 사용
<stylesheet> 요소의 자식 요소로만 사용
<include> 요소가 사용된 위치에서 XSL 파일에서 지정한 XSLT 파
일의 내용이 포함 됨
<include> 요소의 href 속성은 포함할 XSLT 파일을 표현
<include> 요소 정의 방법
<xsl:include
href = uri-reference />
30
Section 02 XSL과 XSLT 문법
import 요소
include 요소와 같은 개념
import가 include와 다른 것은 include는 동일한 내용들이 중복되어
정의될 수 없는데 반해서, impote 요소는 중복 정의가 가능
하다. 중복 정의가 존재하는 경우에는 우선 순위에 의해서 우선 순
위가 높은 정의가 먼저 사용
<import> 요소가 사용되게 되는 경우에는 stylesheet 요소에서 가장
먼저 선언되어야 함
<import> 요소 정의 방법
<xsl:import
href = uri-reference />
31
Section 03 [실습] XSLT 활용 1
XML 문서를 XSLT를 활용하여 원하는 문서형태로 변환
결과 화면
조건
• 부록 CD>8장>student_table.xml 문서를 결과 화면과 같은 형태로 변환
• 나이를 나타내는 열의 바탕색을 20세 이하이면 빨간색, 25세 이하이면
파란색, 30세 이하이면 초록색, 그 외는 하얀색으로 지정
32
Section 04 [실습] XSLT 활용 2
다양한 XSLT 기능을 포함해서 XML 문서를 조작하는 XSL
문서 작성
결과 화면
조건
• 부록CD>8장>가계부.xml 문서를
결과 화면 형태로 변환시킨다.
• 총 수입에서 해당 날짜에 구입한
물건의 목록을 나타내고 지출내역
을 나타낸다. 몇 가지 물건을 구입
했는지 개수를 나타내고, 총 수입
에서 총 지출을 뺀 나머지를 잔액
으로 출력한다. 총 수입보다 총 지
출이 많은 경우, 차액을 빨간색으
로 표시하고, [적자]표시를 한다.
33
Thank you