Transcript XSLT

X S L T
주요 내용

XSLT의 개념 및 개괄

Template

XSLT 요소와 사용
– XSLT 요소의 종류
– XSLT 요소 상세와 사용 예
XSLT의 개념 및 개괄

XML 특성
– Presentation으로부터 데이터 분리 : CSS, XSL

XSL (Extensible Stylesheet Language)
– XSLT(XSL for Transformation)

1999년 11월 권고안 (www.w3.org/1999/XSL/Transform)

Spec. : www.w3.org/TR/xslt
– XSL FO(XSL Formatting Objects)


2000년 11월 CR상태

FOP : PDF파일 생성 (www.apache.org/fop)
XSLT파서
– 사용 : XT, MSXML3.0 => 또 다른 이용할만한 파서??
XSLT의 개념 및 개괄
XSLT는 Well-Formed XML 문서다.
XSL:은 Namespace다.
XSLT는 스크립트 언어?
Transformation
HTML파일
XML파일
소스
트리
XSLT Processor
(XSLT Parser)
결과
트리
XSLT파일
XSLT 파일
Text파일
Template

Template (틀?)
– Template가 적용될 소스 트리부분

Match 속성에서 지정(문맥노드가 된다)
– 결과트리로 삽입되어지는 부분

시작태그와 끝태그사이에 있는 템플리트 안의 모든 내용
<?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="/string/s">
<P><xsl:value-of select="."/></P>
<xsl:for-each>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
XSLT 요소의 종류
•xsl:import
• xsl:apply-templates •xsl:include
•xsl:key
• xsl:attribute
•xsl:message
• xsl:attribute-set
•xsl:namespace-alias
• xsl:call-template
•xsl:number
• xsl:choose
•xsl:otherwise
• xsl:comment
•xsl:output
• xsl:copy
•xsl:param
• xsl:copy-of
•xsl:preserve-space
• xsl:decimal-format •xsl:processinginstruction
• xsl:element
•xsl:sort
• xsl:fallback
•xsl:strip-space
• xsl:for-each
• xsl:if
• xsl:apply-imports
•xsl:stylesheet
•xsl:template
•xsl:text
•xsl:transform
•xsl:value-of
•xsl:variable
•xsl:when
•xsl:with-param
XSLT 요소와 사용
<xsl:stylesheet>

<xsl:stylesheet version=“version number”
xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
xsl Namespace정의 => “xsl:요소이름”
– W3C 현재 XSLT 스펙 version = 1.0
– <xsl:transform> 과 문법이 같기 때문에 대신 사용해도 됨
–
XSLT 요소와 사용
<xsl:template>

<xsl:template match=”Xpath expression”
name=”template name”
priority=”number”
mode=”mode name”>
-
Match : 소스트리에 대응되는 Xpath 패턴
Name : 지정된 템플리트를 만드는데 사용 (“xsl:call-template”이용)
Priority : xslt의 우선 순위를 정함
Mode : 소스 트리의 같은 부분이 한번 이상 처리되어야 할 때 사용
XSLT 요소와 사용
<xsl:apply-templates>

<xsl:apply-templates select=“xpath expression”
mode=“mode name”>
템플리트 안에서 사용되어 다른 템플리트를 호출할때 사용.
– select 속성이 지정되면 그 지정된 Xpath 표현의 값은 호출된
템플리트의 문맥노드로서 사용된다.
– 지정되어 있지 않으면 현재의 문맥노드를 대신 사용하게 되며,
그 자식 노드를 모두 거치면서 해당하는 템플리트를 찾아 실행된다.
–
XSLT 요소와 사용
XSLT 요소와 사용
<xsl:value-of>

<xsl:value-of select=“xpath expression” disable-outputescaping=“yes or no”/>
select 속성에 지정된 Xpath 표현에 정해진 값을 찾기 위해
문맥노드를 탐색하여 결과 트리에 삽입할때 사용.
– disable-output-escaping 속성 : “&amp;”, “&lt;” 같은
Escape문자 대신, “&”, “<“ 문자를 출력하라고 지시.
– 보통 XSLT 프로세서는 출력할 때 자동으로 이런 문자로 바꿈
– 기본값은 NO
–
XSLT 요소와 사용
<xsl:output>

<xsl:output method=“xml or html or text”
version=“version” encoding=“encoding”
omit-xml-declaration=“yes or no”
standlone=“yes or no”
cdata-section-elements=“CDATA sections”
indent=“yes or no”/>
– 출력하고자 하는 파일의 형식을 지정할 때 사용
– version, encoding,standalone 속성은 메소드값이 xml일때
사용
– 주로 “method”와 “encoding”속성 사용
XSLT 요소와 사용
<xsl:element>

<xsl:element name=“element name” use-attributesets=“attribute set name”>
– 동적으로 요소의 이름을 생성하고자 하는 경우에 사용
 <xsl:element name=“addr”>seoul</xsl:element>
<addr>seoul</addr>
XSLT 요소와 사용
<xsl:attribute>
 <xsl:attribute name=“attribute name”>
– 결과트리에 동적으로 속성을 추가하고자 하는 경우에 사용


<name><xsl:attribute name=“sex”>m</xsl:attribute>kwak</name>
<name sex=“m”>kwak</name>
첨부되는 요소의 어떤 PCDATA 보다도 앞쪽에 있어야 한다
<xsl:attribute-set>

<xsl:attribute-set name=“name of att set” use-attributesets=“att set names”>
- 항상 같이 사용되어야 하는 연관된 속성 그룹을 손쉽게 만드는 방법을 제공
XSLT 요소와 사용
XSLT 요소와 사용
<xsl:text>

<xsl:text disable-output-escapint=“yes or
no”>
- 공백을 유지하기 위해 사용
- 출력결과의 Escape를 못하게 하기 위해 사용
<xsl:text disable-output-escaping=“yes”>6 is &lt; 7
&amp; >6</xsl:text>
6 is <7 & 7 > 6
<xsl:value-of> 사이에 공백을 표현하려면 : <xsl:text> </xsl:text>삽입
XSLT 요소와 사용
<xsl:if> / <xsl:choose>

<xsl:if test=“Boolean expression”>
일반 언어의 If문과 동일한 개념
– Else요소가 없으므로 그 경우에는 choose요소를 사용
–

<xsl:choose>
<xsl:when test=“Boolean expression”>
<xsl:when test=“Boolean expression”>
<xsl:otherwise>
</xsl:choose>
–
–
일반 언어의 Select문과 동일한 개념
여러선택 중 하나를 할 수 있게 하고 필요하면 기본선택도 가능
XSLT 요소와 사용
<xsl:for-each>

<xsl:for-each select=“XPath expression”>
– 일반언어의 For문과 동일한 개념(미니템플리트)
– select 속성의 Xpath 표현에 일치하는 모든 노드에 대해서 실행
– 다수의 반복적인 요소들에 대해 적용 (apply-templates와 동일)
XSLT 요소와 사용
<xsl:copy-of>

<xsl:copy-of select = “xpath expression”>
–
–
–
소스트리의 일부를 취해서 결과트리에 복사
Select 속성으로 노드나 필요한 노드 집합을 가리키는 xpath 표현만 지정
노드 또는 노드집합은 결과트리에 속성과 자식요소를 함께 넣어준다
<xsl:copy>

<xsl:copy use-attribust-sets=“att set names”>
–
–
단순히 문맥노드만 복사
문맥노드의 자식요소나 속성은 자동으로 결과트리에 복사되지 않는다
XSLT 요소와 사용
<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”/>
-
두개이상의 항목의 순서를 정렬하는 경우에 사용
Select : 정렬하고 싶어하는 요소/속성 선택
두개이상의 항목이 있게 된다면 소스트리에 나타난 순서를 결과트리에 반영
Data-type : default(text)
Order : default(오름차순)
Case-order : 대문자가 먼저인지 소문자가 먼저인지 결정
XSLT 요소와 사용
mode
- xml 안의 동일한 부분을 각기 다른 작업으로 하고자 할 때 사용
- Mode에 따라 여러 개의 Template를 사용하면 원하는것만 호출할
수 있다
<xsl:apply-templates select=“name” mode=“toc” />
<xsl:apply-templates select=“name” mode=“body”/>
…
</xsl:template>
<xsl:templates match=“name” mode=“toc”/>
… </xsl:templates>
<xsl:templates match=“name” mode=“body”/>
… </xsl:templates>
XSLT 요소와 사용
<xsl:varible>

<xsl:variable name = “text” select=“XPath
Expression”>
- 변수라기보다는 상수의 의미
- $와 변수이름을 붙여 사용
–<math pi=“{$csng}”/> or <xsl:value-of select=“$csng” />
- Select 속성을 가질수 있다.
–<xsl:variable name=“name” select=“/people/name”/>
- 전역상수 : 템플리트 바깥쪽에 정의
- 지역상수 : 템플리트 안쪽에 정의
XSLT 요소와 사용
지정된 템플리트(name)
- 소스트리의 서로 다른 노드에서 동일한 일을 수행하고자 할 때 사
용
- 다른 언어에서의 함수와 비슷한 개념
- 지정된 템플리트 : select 속성대신 name 속성을 지정
<xsl:call-template> 요소를 사용하여 호출
…
<xsl:call-template name=“Text” />
…
<xsl:call-template name=“Text” />
…
</xsl:template>
<xsl:template name=“Text” />
…
</xsl:template>
XSLT 요소와 사용
<xsl:param> / <xsl:with-param>

<xsl:param name = “text”> / <xsl:with-param name = “text”>
- 일반언어에서의 함수에 전달하는 매개변수와 동일한 개념
(parameter)
- 주로 Template name과 연동되어 같은 기능을 하지만 서로 다른
노드의 위치에서 문맥노드값을 전달하고자 할 때 주로 사용
- 전달하는 쪽에서 <xsl:with-param>요소를 사용하여 전달하고자
하는 값을 넘겨주고, 받는 Template에서 <xsl:param>을 사용해서
디폴트값을 설정하거나, 변수선언의 역할을 한다.
XSLT & XPath Functions
•boolean()
•ceiling()
•concat()
•contraints()
•count()
•current()
•document()
•element-available()
•false()
•floor()
•format-number()
•function-available()
•generate-id()
•id()
•key()
•lang()
•last()
•local-name()
•name()
•namespace-uri()
•normalize-space()
•not()
•number()
•position()
•round()
•starts-with()
•string()
•string-length()
•string-length()
•substring-after()
•substring-before()
•substring()
•sum()
•system-property()
•translate()
•true()
•unparsed-entity-uri()
XSLT 활용 예 – 스크립트사용
XSLT 활용 예 – EDI
???
XSLT 활용 예 – eBook?
XSLT 활용 예 – eCatalog
Catalog1
Catalog4
Catalog2
Catalog5
Catalog3
Catalog6
XSLT 활용 예 – eCatalog
XML 파일 - 데이터 저장소
XSLT 참고 사이트 및 자료
• www.w3.org/style/xsl
• www.vbxml.com
• msdn.microsoft.com/xml
• www.apache.org/fop
• www.xmlab.com
• MS의 Xmlsdk3.0
• MS의 xslviewer
• Beginning XML 책(Wrox)
IE5의 Default XSL