XSLT와 XSL xml programming.

Slides:



Advertisements
Similar presentations
1 멀티미디어 데이터 : 텍스트 (Text) Lecture #2. 2 멀티미디어 구성 요소  멀티미디어 구성 요소 : 1) 텍스트 2) 그래픽 & 이미지 3) 사운드 4) 비디오 & 애니메이션  미디어 접근법 : 1) 특징 : 정보표현 능력 vs 비용 등 2) 컴퓨터.
Advertisements

한국산업기술대학교 온라인 기술교육 교재 개발 차세대 모바일 디지털 컨텐츠 15. WML 개발 - I 이번 시간에는... 지난 시간에는 WAP 의 WTA 프로토콜의 기능과 구성, 서비스 예에 대해서 학습하고, WAP 보안을 위한 WTLS 와 WAP 애플리케이션 레이어 보안,
Information Retrieval (Chapter 6: 텍스트와 멀티미디어 언어)
XML.
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
설계 프로젝트 경진대회 성결대학교 컴퓨터공학과 내가 꾸미는 우리 집 팀장 김용훈 김경희 김미선 김헌진.
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Chapter 7 ARP and RARP.
eXtensible Markup Language
박용수 XML 박용수
웹 페이지.
2011년 봄학기 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험
PHP programming 2000년 11월 13일 데이터베이스 연구실 김호숙.
2002/3/20 HTML 2002/3/20
XML 응용 프로그래밍 3장 XML 문서 제작 기본
HTML & CSS 겉핥기 2012 SUMMER SPARCS.
HTML5 웹 프로그래밍 입문 (개정판) 4장. CSS3 스타일시트 기초.
HTML과 CGI 프로그래밍 PHP 웹 프로그래밍 (PHP Web Programming) 문양세
SAP QUERY SAP R/3 4.6C.
자기소개서 작성법.
RefWorks 이용 매뉴얼.
신입생 예비대학 안내 2007학년도 2. 장 소 : 에버랜드(행사기간 자유이용권 지급) 4. 세부행사 일정
XSL-FO 소개 임 순 범 숙명여대 멀티미디어학과.
Overview : XML과 Database
10장. 에러 처리 제10장.
이 름: 정홍도 (과장) 팀 명: 개발사업팀 일 자:
HTML5 입문 인공지능 연구실.
JavaScript.
This is our standard presentation Cover slide; the images used here are meant to provide a quick, pleasing representation of ProQuest content areas. The.
ㅎㅎ MS-SQL서버 2000과 XML MS-SQL 서버 2000과 XML 활용 HTTP를 이용한 XML 데이터 접근
Ch2-2. VHDL Basic VHDL lexical element VHDL description
XML DOM (Document Object Model)
jQuery Chapter 12 이 서식 파일은 그룹 환경에서 교육 자료를 프레젠테이션할 때 시작 파일로 사용할 수 있습니다.
재귀 혹은 귀납 Recursive or Inductive Definition 집합을 정의하는 방법
XML XSLT.
6부 WML/WML2.0 언어배우기 6-1 WML에 대해서 6-2 WML 기본 태그 6-3 글과 그림 삽입에 관련된 태그
숭실대학교 마이닝연구실 김완섭 2009년 2월 8일 아이디어  - 상관분석에 대한 연구
HTML5+CSS3 실무 테크닉 김은기 저.
X M L 컴퓨터공학과 윤 홍 국.
4. JSP의 스크립트 요소 Script 요소의 이해 선언문(Declaration) Scirptlet 표현식 주석
XML.NET XML 검색, 수정 프로그램 작성 2010 컴퓨터공학실험(Ⅰ)
ProQuest Dissertations Unlimited
Html(front end) & jsp(back end)
HTML5 웹 프로그래밍 입문 (개정판) 2장. HTML5 문서의 기본.
Chapter 3: Introduction to SQL
Sub-Title Powerpoint Template Exchange Your Company Name 미래기획위원회ㆍ관계부처.
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
HTML CSS 자바스크립트 무작정 따라하기
CGI (Common Gateway Interface)
JSP Programming with a Workbook
인터넷응용프로그래밍 JavaScript(array).
표현언어와 커스텀태그 표현 언어의 개념을 이해한다. JSP1.2 커스텀 태그 개발 방법을 익힌다.
Introduction to Programming Language
RefWorks 이용 매뉴얼.
CGI (Common Gateway Interface)
정보통신특강-XML (2001. Fall) XSL-FO 소개 임 순 범 숙명여대 멀티미디어학과.
2018년 10월 01일 박성진 Web & Internet [04] CSS3 2018년 10월 01일 박성진
EndNote 정기교육 - STEP 2- 일자: 2012년9월4일(화) 시간: 13:00-13:30(30분) 장소: 의학도서관.
XML-II (eXtensible Markup Language) DTD/DOM
제목을 입력해 주세요 ┗ SUB TITLE을 입력해 주세요 홍길동.
Web & Internet [02] HTML5 기본구조와 작성법
Chapter03 HTML 포토앨범 만들기
중학교 수학 ①/②/③ 교과서, 지도서 / ㈜교학사 (대표저자 : 고호경외 12명) Ⅰ. 교과서의 구성 Ⅱ. 교과서의 특장점
HTML HTML 기본 구조와 태그 다양한 태그 다루기
SQL Server Reporting Services Feature
[CPA340] Algorithms and Practice Youn-Hee Han
기존 태양광 모니터링 시스템 내 소비전력 데이터 전송 프로그램 구현
RefWorks 이용 매뉴얼.
RefWorks 이용 매뉴얼.
Python 기본.
Presentation transcript:

XSLT와 XSL xml programming

Contents XSL이란? XSLT란? XSL과 XSLT 비교 응용사례 xml programming

XSL이란? XML 문서 XSL 문서 구조를 표현할 수 있는 특징. 표현부분을 생략함으로써 장점 확보 확장성 호환성 … XSL 문서 Presentation 능력을 지닌 언어. (eXtensible Stylesheet Language) xml programming

Cont. xml programming

Cont. 신나는 프로야구! 두산 베어스 선수 xml programming 투수 : 진필중 포수 : 홍성흔 1루수: 우 즈 투수 : 진필중 포수 : 홍성흔 1루수: 우 즈 2루수 : 안경현 3루수 : 김동주 유격수 : 김민호 우익수 : 심재학 중견수 : 정수근 좌익수 : 장원진 xml programming

Cont. baseball.xml과 baseball.fo 비교 baseball.xml baseball.fo <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> xml programming

어떻게 변환시킬 것인가? Transformation? 변환… 직접 XML 문서를 변환 XML 문서 XSL 문서 XSLT Processor HTML , PDF… XSLT 문서 xml programming

XSLT란? XML to XSL XML to XML XML to Other Format… XML to etc… XML to HTML XML to WML XML to RTF XML to etc… xml programming

Example XSL 문서 XML 문서 각각의 다른 형태의 XML문서 V XSLT i Processor ewe r HTML RTF, DOC, HWP … PDF WML HTML XSLT 문서 xml programming

XSLT와 XSL 비교 Transformation? Formatting? 변환… Presentation 능력을 지닌 언어 HTML, PDF, HWP, DOC, RTF… xml programming

… Formatting Language!!! Transformation Language!!! Presentation 능력을 지닌 언어 XSL, HTML, PDF, HWP, DOC, RTF… Transformation Language!!! XML문서를 다른 Formatting Language로 바꾸는 역할을 하는 언어. XSLT xml programming

Cont. xml programming

XSLT의 응용사례 Data의 변환 XML a.XSL XSLT Processor b.XSL c.XSL xml programming

XSL model Template-driven model Data-driven model XML문서가 반복적인 구조로 이루어져 있을 경우. 메일 머지나 주소록 출력의 경우에 XSL을 적용하여 사용할 수 있다. Data-driven model XML문서가 불규칙적인 data로 이루어져 있을 경우. Template fragments들은 따로따로 각 section을 처리하기 위해 정의되고 사용됨. xml programming

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> xml programming

Template(틀?) template의 개념. xml programming

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> 템플리트의 구성 템플리트가 적용될 소스 트리 부분 결과 트리로 삽입되어지는 부분 xml programming

Cont. 기본 템플리트 도큐먼트 루트에 대응하는 템플리트를 정해놓지 않았다면, XSLT는 미리 주어진 정해진 기본 템플리트를 적용한다. <xsl:template match=“*|/”> <xsl:apply-templates/> </xsl:template> 내장 템플리트 <xsl:template match=“text()|@*”> <xsl:value-of select=“.”/> 결국 기본 템플리트를 적용하면 도큐먼트 안의 모든 요소에 적용되어 모든 값이 출력된다. xml programming

xml programming toHTML.xsl <xsl:template match=“/”> <html> <head></head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> … <html> <head></head> <body> </body> </html> XSLT프로세서 결과물 class.xml Document(=/) 강좌 이름=“XML” 강사 이름 학생 xml programming

xml programming toHTML.xsl <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”> </table> <html> <head></head> <body> </body> </html> Apply-templates <h1><p align=“CENTER”> XML </p></h1> <table align=“center” border=“1”> </table> XSLT프로세서 결과물 Lab.xml Document(=/) 강좌 이름=“XML” 강사 이름 학생 xml programming

XPath XML 도큐먼트의 다른 부분을 가리키는 유연한 방법 지역 경로 XPath의 함수들 xml programming

지역 경로 도큐먼트(루트) 엘레먼트 지정 경로표현 <xsl:template match=“/”> xml programming

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

Cont. [ ]를 이용한 필터링 <xsl:template match = “학생[주소]”> /학생[@성별=‘남자’]/이름[. = ‘이몽룡’] xml programming

Cont. 와일드 카드(*) <xsl:template match=“*”> <xsl:for-each select=“*”> xml programming

XPath의 함수들 ※ 보통의 부모/자식 관계나 엘레먼트/어트리뷰트 관계로는 일치하지 않는 노드와 노드 집합을 찾는데 사용할 수 있다. 노드 함수들 위치지정 함수들 산술 함수들 Boolean함수들 문자열 함수들 xml programming

노드 함수들 name() node() processing-instruction() comment() text() xml programming

Cont. name() : 엘레먼트의 이름을 반환한다. node() <xsl:template match=“name”> <xsl:for-each select=“*”> <p><xsl:value-of select=“name()”/></p> </xsl:for-each> </xsl:template> node() 노드 자신을 반환한다. 쓰지 않는다. xml programming

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

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:value-of select=“text()”/> xml programming

Cont. <xsl:template match=“parent”> <xsl:value-of select=“.”/> </xsl:template> 결과: This is some text. And this is some more text <xsl:value-of select=“text()”/> xml programming

위치지정 함수들 position() last() count() xml programming

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]”> xml programming

Cont. last() count() 제일 마지막 노드의 위치를 반환한다. 제일 마지막 위치의 노드를 반환하는 것이 아니다. 예제 <xsl:template match=“/nodes/node[position() = last()]” count() 선택된 노드의 자식 노드 숫자를 반환한다. <xsl:value-of select=“count(node)”/> xml programming

산술 함수들 number() sum() xml programming

Cont. number() sum() Character값을 숫자값으로 변환한다. 예제 <element>256</element> <xsl:if test=“number(@Security)”> sum() 선택된 노드들의 산술값을 더해서 반환한다. <xsl:value-of select=“sum(/nodes/node)”/> xml programming

Boolean 함수들 boolean() not() true() false() xml programming

Cont. Boolean() XPath의 표현에 따라 true 또는 false값을 반환한다. 숫자인 경우 숫자가 아닌 경우 NaN 문자열인 경우 길이가 0이면 -> false 길이가 0보다 길면 -> true 노드인경우 그 노드가 없으면 -> false 그 노드가 있으면 -> true xml programming

Cont. 예제 <person> <name>YS</name> <addr>KOREA</addr> </person> <xsl:template match=“person”> <xsl:if test=“boolean(name)”> <!--여기서 작업을 처리한다--> </xsl:if> </xsl:template> xml programming

Cont. not() true(), false() 결과 값을 반대로 변환해서 반환한다. 예제 not(boolean(name)) true(), false() 항상 true값과 false값을 반환한다. xml programming

문자열 함수들 string() string-length() concat() contains() starts-with() substring() substring-after() substring-before() translate() xml programming

Cont. string() string-length() concat() 문자열로 바꿔서 반환한다. 공백을 포함한 문자열의 개수를 반환한다. concat() 두개이상의 문자열을 받아서 하나의 문자열로 결합한다. concat(‘my name’, ‘ ‘, ‘is’, ‘ ‘, ‘YS’) xml programming

Cont. contains() starts-with() 문자열내에 특정 문자열이 포함되었는지를 확인하여 boolean값을 반환한다. contain(“my name is YS”, “is YS”) starts-with() 문자열이 특정 문자열로 시작되는 지를 확인하여 boolean값을 반환한다. Start(“my name is YS”, “my”) xml programming

Cont. substring() substring-after() substring-before() 문자열에서 일부 문자열을 반환한다. 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” xml programming

Cont. translate() 문자열을 변환한다. 예제 예제(대소문자 변환) translate(‘QLSN’, ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’, ‘zyxwvutsrqpomnlkjihgfedcba’)  john 반환 예제(대소문자 변환) translate(‘YSJUNG', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')  ‘ysjung’ 반환 xml programming

Cont. 활용예제 예제 : 공백을 더하기 기호로 바꿀때 예제 : XSLT에서 활용사례 translate(‘This is string’, ‘ ‘, ‘+’) 예제 : XSLT에서 활용사례 <xsl:value-of select= “Translate(., ‘abcdefghijklmnopqrstuvwxyz’, ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’)” /> xml programming

Cont. Note!!! 가령 매치되는 문자가 없을 경우에는 원래문자가 반환 translate(‘KING’, ‘ING’, ‘inG’)  ‘KinG’ 가령 변환대조 문장열의 길이가 다를 경우, 빼버린다. translate(‘+bat+’, ‘abc+’, ‘ABC’)  ‘BAT’ (‘+’는 매칭되는 변환결과가 없다!!!) 가령 두번째가 세번째보다 길때, 결과에 영향을 주지 않는다. Translate(‘zero’, ‘eroz’, ‘EROZA’)  ‘ZERO’ xml programming

축을 중심으로한 관계 13개의 정의된 축 self 축 child 축 descendant 축 descendant-or-self 축 parent 축 ancestor 축 ancestor-or-self 축 following-sibling 축 preceding-sibling 축 following 축 preceding 축 attribute 축 namespace 축 xml programming

Cont. self 축 child 축 descendant 축 descendant-or-self 축 현재노드를 가리킨다. 예제 self::node()  . child 축 현재노드의 자식들이 있는 축을 가리킨다. 일반적으로 생략해서 사용 child::order  ‘order’ descendant 축 현재노드의 자식들과 자식들의 자식들까지 포함한다. descendant-or-self 축 자신을 포함하고 자식들과 자식들의 자식들까지 포함한다. ‘//’와 같은 의미 xml programming

Cont. parent 축 ancestor 축 ancestor-or-self 축 following-sibling 축 현재 노드의 부모를 포함한다. ancestor 축 현재 노드의 부모와 부모의 부모를 포함한다. ancestor-or-self 축 자신을 포함하고, 현재 노드의 부모와 부모의 부모를 포함한다. following-sibling 축 현재 노드 뒤에 오는 형제 노드를 포함한다. preceding-sibling 축 현재 노드 앞에 오는 형제 노드를 포함한다. following 축 현재 노드뒤에 오는 형제 노드와 그 노드의 자식까지 포함한다. preceding 축 현재 노드 앞에 오는 형제 노드와 그 노드의 자식까지 포함한다. xml programming

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

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::* 실습하기!!! xml programming

쉬어가기! xml programming

XSLT 프로세서 XSLT문서 XSLT프로세서 템플릿 결과문서 XML 문서 명령 실행 결과트리 XML소스트리 xml programming

작업순서 XML문서를 읽어 들여서 DOM Tree를 구성한다. 또한 XSLT문서를 읽어 들여서 템플릿 단위의 트리를 구성한다. 매칭되는 템플릿이 있으면 현재 노드에 적용한다. <apply-templates> 등을 만나면 하위 노드가 순서에 따라 현재 노드가 되어 2)번 작업부터 반복해 적용해 나간다. xml programming

XML문서와 XSLT의 결합 내부에 포함된 경우 참조로 연결된 경우 연결없이 결합되는 경우 xml programming

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

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

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

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> 템플리트의 구성 템플리트가 적용될 소스 트리 부분 결과 트리로 삽입되어지는 부분 xml programming

Cont. 적용 우선 순위? <doc>hi~~ <greeting>안뇽!!!</greeting> <!-- 무엇이 매칭될까?--> <xsl:template match="greeting"> <g1><xsl:value-of select="."/></g1> </xsl:template> <xsl:template match="/doc/greeting"> <g2><xsl:value-of select="."/></g2> xml programming

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> xml programming

<xsl:stylesheet> <xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”> 루트 엘리먼트의 역할을 한다. 네임스페이스를 정확히 기재해야 함 XSLT프로세서가 XSLT태그를 구별하는 방법 verions과 xmlns:xsl 은 반드시 필요한 요소 xml programming

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

Cont. match가 가리키는 부분은 expression이 아닌 pattern!!! priority는 우선순위 지정 name은 Named Template를 만드는데 사용. Match와 같이 일치되는 부분에서 실행되어지는 것이 아니라 이름으로 호출되어 진다. Named Template에서 다시 설명. mode는 소스 트리의 같은 부분이 한 번 이상 처리되어야 할 때 사용한다. 뒤쪽 Mode부분에서 다시 설명. xml programming

<xsl:apply-templates> 템플리트 안에서 다른 템플리트를 호출할 때 사용한다. <xsl:apply-templates select=“Xpath expression” mode=“mode name”> Select 특정하게 처리하고자 하는 node를 지정할 때 사용된다. 생략되었을 경우에 처리되는 node는 현재 node의 자식들. 어트리뷰트나 네임스페이스의 경우 처리되지 않음. 처리하고자 할 경우 <xsl:apply-templates select=“@*”/> Mode는 뒤에서 설명 ^^ xml programming

<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”> xml programming

Cont. Disable-output-escaping은 “&” 나 “&lt”와 같은 이스케이프 문자대신, “&” 나 “<“ 문자를 출력하도록 지시. 기본적으로 “no”로 설정 -> 그대로 출력 “yes” -> 변환하여 출력 <xsl:value-of select="." disable-output-escaping="no" /> & <xsl:value-of select="." disable-output-escaping=“yes" /> & 실습해보기!!! xml programming

<xsl:output> XSLT는 XML이나 HTML, 그리고 Text로 출력할 수 있다. 만약 이 엘레먼트가 스타일시트에 포함된다면 반드시 <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”/> xml programming

Cont. <xsl:output>이 포함되지 않았을 경우, 기본 출력 방법은? 만약 결과 트리의 루트가 <html>(대소문자모두)라면? HTML 그렇지 않다면? XML xml programming

Cont. method version : XML일 때만 사용 encoding : XML일 때만 사용 XML, HTML, TEXT 등 출력형태 지정 version : XML일 때만 사용 encoding : XML일 때만 사용 standalone : XML일 때만 사용 omit-xml-declaration XML 선언부를 생략할 수 있다. (기본값 “no”) cdata-section-elements 해당되는 값을 cdata section에 넣는다. (??? XSLT가 잘 지원 못함) indent 보기 좋은 공백을 만들어 준다. xml programming

<xsl:element> Element를 만들 수 있는 기능을 제공 <xsl:element name=“element name” use-attribute-sets=“attribute set names”> Name 엘레먼트의 태그 이름을 정해 준다 사용 예제 <xsl:element name=“이름”>홍길동</xsl:element> <이름>홍길동</이름> xml programming

Cont. 동적 생성 <xsl:element name=“{.}”>My text</xsl:element> Xpath expression 예제 <xsl:template match=“name”> <xsl:element name=“{.}”>인간성좋음</xsl:element> </xsl:template> <name>홍길동</name> 결과 <홍길동>인간성좋음</홍길동> xml programming

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> xml programming

<. xml version="1. 0" encoding="UTF-16" <?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> Cont. xml programming

<xsl:attribute> <xsl:attribute name=“attribute name”> name Attribute의 이름을 정해 준다 사용 예제 <name> <xsl:attribute name=“번호”>123</xsl:attribute> 홍길동 </name> <name 번호=“123”>홍길동</name> xml programming

Cont. 동적 생성의 예 잘못된 예 <name> <xsl:attribute name=“{.}”>123</xsl:attribute> 홍길동 </name> ※ 엘레먼트뒤에서 사용되었다. 잘못된 예 ※ PCDATA의 어트리뷰트가 되려고 한다!!?? xml programming

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

Cont. 실습 엘레먼트만 가지고 있는 문서를 어트리뷰트를 가지도록 만들어라. xml programming

<. xml version="1. 0" encoding="UTF-16" <?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> Cont. xml programming

Cont. 다음과 같이 바꾸어라. xml programming <?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> xml programming

<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 xml programming

<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=“이름[@성별 = 남자]” > 실습하기!!! xml programming

<xsl:choose> Boolean값에 의해 여러개중에 하나가 선택되어져 실행된다. 무조건 한번 실행되어지면 choose는 제어권을 잃는다. <xsl:choose> <xsl:when test = “boolean expression”> <xsl:otherwise> </xsl:choose> 예제 <xsl:when test = “number[. > 2000]A big number </xsl:when> <xsl:when test = “number[. > 1000]A medium number</xsl:when> <xsl:otherwise>A small number</xsl:otherwise> xml programming

<xsl:for-each> Select 의 Xpath expression에 일치하는 모든 노드에 대해서 실행. 템플리트 내에 위치. <xsl:for-each select=“name”> This is name element. </xsl:for-each> 위 예제의 경우 모든 name에서 다 실행된다. 템플리트 내에 또다른 템플리트를 가지고 있는 것과 같이 동작한다. xml programming

Cont. 실습 다음의 XSLT문서를 for-each를 사용해서 고치시오. xml programming <?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 match="@*"> <xsl:element name="{name()}"><xsl:value-of select="."/></xsl:element> </xsl:stylesheet> xml programming

<xsl:copy-of> 소스 트리의 일부를 취해서 결과 트리에 복사해준다. <xsl:copy-of select = “Xpath expression”/> select속성에 노드를 지정하면, 선택된 노드와 atrribute, 자식 노드등을 결과트리에 담는다. 실습하기!!! xml programming

<xsl:copy> <xsl:copy-of>와 유사하나 선택된 노드만 복사한다. 선택된 노드안에 들어갈 어트리뷰트나 자식노드를 지정할 수 있다. <xsl:copy use-attribute-sets=“att set names”> 현재 노드의 자식이나 attribute가 복사되지 않는다. 대신 들어갈 자식노드나 attribute를 지정할 수 있다. xml programming

Cont. 예제 결과 <name> <first>YS</first> <last>Jung</last> </name> <xsl:template match=“name”> <xsl:copy /> </xsl:template> 결과 <name/> xml programming

Cont. 예제 결과 <name> <first>YS</first> <last>Jung</last> </name> <xsl:template match=“name”> <xsl:copy> <xsl:value-of select = “.”/> </xsl:copy> </xsl:template> 결과 YS Jung xml programming

<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”/> xml programming

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 xml programming

모드(mode) <xsl:template> <xsl:apply-templates> <xsl:template match=“name” mode=“TOC”/> <xsl:template match=“name” mode=“body”/> 이 템플리트를 호출할 때는 mode를 지정할 수 있다. <xsl:apply-templates select=“name” mode=“TOC”/> xml programming

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> </XSL> xml programming

Cont. xml programming

Cont. 실습 XML문서를 화면과 같이 보이게 하는 XSLT문서 만들어 보기! xml programming

<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를 사용하는 어느곳에서든지 상수를 사용할 수 있다. xml programming

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:copy-of select=“$name”/> 실습하기!!! xml programming

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 전역 상수 지역 상수 xml programming

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 xml programming

Named Templates Xpath에 일치되는 템플리트가 호출되는 것이 아니라 이름을 가지고 지정한 템플리트가 호출되게 하는 방법이다. 예제 <xsl:template match=“/”> <xsl:for-each select=“name”> <xsl:call-template name=“bold”/> </xsl:for-each> <xsl:for-each select=“not-name”> </xsl:template> <xsl:template name=“bold”> <B><xsl:value-of select=“.”/></B> 템플리트에서 name과 match를 동시에 사용할 수 있다. Named Template를 호출한다. xml programming

Parameter 비교 <xsl:template name=“name”> First Name : <xsl:value-of select=“first”/> Last Name : <xsl:value-of select=“last”/> </xsl:template> <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”/> xml programming

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”/> Param보다 with-param이 우선순위가 높다. xml programming