XPath/XSLT 이해 Understanding XML Path Language and XSL Transformation 2001. 6. 28 최한석 목포대학교정보공학부 / 한국지식웨어 R&D 연구소 call copyright reserved 1
목 차 XSLT, XPath, XSL-FO 배경 XSLT 변환 / 프로세싱모델 XSLT Instruction 엘리먼트 XPath 이해 XPath 표현식 XPath 적용예 XSL-FO 이해 XSL-FO 포맷팅모델 XSL-FO Layout 체계 요약 2
XSLT, XPath, XSL-FO 배경 (1) XML (extensible Markup Language) 1998 년 W3C 에서채택한 Web 표준확장된마크업언어 문서정보의인스턴스를사용자가정의한형식적규칙 (Rules) 에의해계층적으로기술 문서의구조, 내용, 표현이분리 : XML Philosophy 응용간의데이터자유로운전송및변환 XSL (XML StyleSheet Language) 1998 년및 2000 년 XSL Working Draft 발표, 수정, 보완계속 문서변환명령및포맷팅 Semantics 와 Syntax 를정의한언어 XML 문서구조변환 : XSLT XML 문서를다른문서로 Rendering : XSL-FO 최신 XML Linking 과 Style 접목시도 3
XSLT, XPath, XSL-FO 배경 (2) XSLT (XSL Transformation Language) XML 로인코딩된문서를다른문서모델로구조변환하는 Semantics 정의 스타일시트표현을위한 Construction Rule 제공 1999 년 11 월 XSLT V1.0 규격발표, 2001 년 2 월 V2.0 WD 발표 XPath (XML Path Language) XSLT 와 XPointer 기반의 XML 문서요소들에대한구조적인 Addressing 기법제공 Tree 형식의 XML 엘리먼트들의위치정보및 Expression 규격정의 1999 년 11 월 XPath V1.0 규격발표, 2001 년 2 월 V2.0 WD 발표 XSL-FO(XSL Formatting Objects) XSLT 를적용하여변환된 XML 문서의 Visual Layout 모델정의 XML 응용문서의표현규격제공 (Flow objects 와 Layout Objects 들로구성 ) 2000 년 11 월 XSL V1.0 규격에서정의 XML Linking & Style XLink 엘리먼트와 styling 에관한상호작용개념모델제공 최근 W3C 기술문서를사용하여응용방안제시 2001 년 6 월초 W3C Note 발표 4
XSLT, XPath, XSL-FO 배경 (3) Related Terms 이름공간 (Namespace) 서로다른정보소스의출처및출원지 (URI) 의 semantic 정보표현 xmlns : xsl = http://www.w3.org/tr/wd-xsl DTD (Document Type Definition) 정보의문서구조정의 XML-Schema XML 문서내용에대한데이터형식정의 CSS ( Cascading Style Sheet Language) HTML 에적용되는스타일시트언어 DSSSL (Document Style Semantics and Specification Language) SGML 에적용되는스타일시트언어 5
XSLT 변환 / 프로세싱모델 (1) XSLT 역할 서로다른애플리케이션간의데이터또는구조변환 XML 로부터필요한데이터추출 서로다른애플리케이션에서데이터합병 정보의서로다른표현 (Display, Print, Formatting) XML2HTML, XML2PDF, XML2Audio, XML2XML, XML2Others God save Our gracious Queen XSLT XSLT XML 문서 <SONG> <KEY sig= G /> <TIME Sig= 3/4 /> <STAVE> <BAR Number= 1 /> <CLEF Name= G /> <CHORD> <NOTE Pitch= b >.. </SONG> XSLT 6
XSLT 변환 / 프로세싱모델 (2) XSLT 변환모델 Style Sheet Source Document Source Tree Stylesheet Tree XSLT Processor Result Tree Text/HTML XML Transformation Process NON-XML 7
XSLT 변환 / 프로세싱모델 (3) XSLT 프로세싱모델 Display Source XML Source Node Tree (pattern) StyleSheet XSLT/XSLXML StyleSheet Node Tree (Template) Instruction Execution XSLT Engine Result Node Tree Result XSL Formatting Objects Print XSL Formatting Objects Aural XSL Formatting Objects XML Non XML HTML/ TEXT Legend Non XML CVML Source Node StyleSheet Result Node Stylesheet Instruction Node 8
XSLT Instruction 엘리먼트 템플릿생성및노드적용명령엘리먼트 <xsl : template match = / > <xsl : apply-templates / > 노드선택및값처리명령엘리먼트 <xsl : value-of select = / > : 노드선택후값처리 <xsl : for-each select = > : 다중선택 Match 속성의패턴지정 Root node 와일치 : <xsl : template match = / > 엘리먼트와일치 : <xsl : template match = PLANET > 특정자식과일치 : <xsl : template match = PLANET/NAME > 엘리먼트모든자손과일치 ; <xsl : template match = PLANET//NAME > 속성과일치 : <xsl : template match = MASS > <xsl : value-of select = @UNITS / > ID 로일치 : <xsl : template match = id( choi ) > : 함수적용 코멘트와일치 : <xsl : template match = comment ( ) > 9
XSLT Instruction 엘리먼트 텍스트노드일치 : <xsl : template match = text ( ) > 프로세싱명령일치 : <xsl : template match = /processing-instruction (?xml-like) > Or 연산자이용 : <xsl : template match = name mass > [ ] 연산이용 : <xsl : template match = PLANET [@COLOR = BLUE ] > Select 속성으로패턴지정 Xpath 표현식사용, XSLT 성능향상 노드선택이외에부울함수, 연산함수, 문자열, 위치, 경로선택 <xsl : template match = PLANET[not(position( ) = last ( ) )] > <xsl : value-of select =. / > </xsl : template > 기타 XSLT Instruction 엘리먼트 10
XSLT Instruction 엘리먼트 Top-level Instruction Elements (1) <xsl:apply-imports> <xsl:apply-templates> <xsl:attribute> <xsl:attribute-set> <xsl:call-template> <xsl:choose> <xsl:comment> <xsl:copy> <xsl:copy-of> <xsl:decimal-format> <xsl:element> <xsl:fallback> <xsl:for-each> <xsl:if> 11
XSLT Instruction 엘리먼트 Top-level Instruction Elements (2) <xsl:import> <xsl:include> <xsl:key> <xsl:message> <xsl:namespace-alias> <xsl:number> <xsl:otherwise> <xsl:output> <xsl:param> <xsl:preserve-space> <xsl:with-param> <xsl:processing-instruction> <xsl:sort> <xsl:strip-space> <xsl:stylesheet> <xsl:template> <xsl:text> <xsl:transform> <xsl:value-of> <xsl:variable> <xsl:when> 12
XSLT 적용예 XSLT 변환예제 PLANETS XML 문서 <?xml version="1.0" encoding="euc-kr"?> <?xml-stylesheet type="text/xsl" href= PLANETS.xsl"?> <PLANETS> <PLANET COLOR="RED"> <NAME>Mercury</NAME> <MASS UNITS="(Earth=1)">.0553 </MASS> <DAY UNITS="days"> 58.65 </DAY> <DISTANCE UNITS="million miles"> 43.3 </DISTANCE> </PLANET> <PLANET COLOR="WHITE" > <NAME>Venus</NAME> <MASS UNITS="(Earth=1)">.815 </MASS> <DAY UNITS="days"> 116.75 </DAY> <DISTANCE UNITS="million miles"> 66.8 </DISTANCE> </PLANET> </PLANETS> PLANETS.xsl XML2HTML변환 IE Viewing화면 XPath 이해 13
XSLT 적용예 PLANETS XSL 문서 <?xml version="1.0" encoding="ksc5601"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="/" > <html> <head></head> <body> <xsl:apply-templates select="planets/planet[@color='white']" /> </body> </html> </xsl:template> <xsl:template match="planet" > <ul> <li><h2><xsl:value-of select="name" /></h2></li> <li><h3><xsl:apply-templates select="./*/@units" /></h3></li> </ul> </xsl:template> <xsl:template match="@units"> <xsl:value-of select="." /> <br /> </xsl:template> </xsl:stylesheet> XML2HTML 변환 IE Viewing화면 PLANETS.xml XPath 이해 14
XSLT 적용예 XML2HTML 변환 <html> <head></head> <body> <ul> <li><h2> Venus </h2></li> <li><h3> (Earth=1) </h3> <h3> days </h3> <h3> million miles </h3> </li> </ul> </body> <html> IE Viewing 화면 PLANETS.xml PLANETS.xsl XPath 이해 15
XSLT 적용예 XML2HTML 변환 PLANETS.xml PLANETS.xsl XML2HTML 변환 XPath 이해 16
XPath 이해 (1) XPath 배경 XSLT 의 Sub Language 로서역할정의 XSLT 수식문법및 XPointer 사이의중복성문제해결 XSLT 노드선택에필요한절대경로및상대경로지정 XPath 는수식연산, 부울처리, 스트링처리함수제공 1999 년 V1.0 2001 년 6 월, V2.0 WD 발표 XPath 이해 XPath 는 node 집합의위치경로표시 XPath 데이터모델 : 축 (Axis) + 노드테스트 + 술어 (Predicates Expression) <xsl : value-of select = child :: NAME [position ( ) = 5] > 다른예 <xsl : value-of select = sum(//book/@price) div count (//book) / > <xsl : value-of > :XSLT 명령어, select 된엘리먼트의 value 를문서에 writing. sum ( ) : book 요소들의 price 속성값의합. count ( ) : book 요소들의갯수 div : 나누기연산자 17
XPath 표현식 XPath 노드테스트 Node 의이름사용, *(wild card) 사용 함수사용 : comment ( ), node ( ), text ( ), processing-instruction ( ) XPath 노드집합 노드엘리먼트이름사용 노드동작함수 : last( ), position( ), count(node-set), id(string), local-name(node-set), namespace-uri(node-set), name(node-set) XPath 부울식 ;!=, <, <=, =, >, >= XPath 수식 : +, -, *, div, mod, celiling( ), floor( ), round( ), sum( ) XPath 문자열 ; starts-with(st1, st2), substring(st1, offset, length),concat(st1, st2) 18
XPath 표현식 기타함수 boolean() ceiling() concat() contraints() count() current() document() element-available() false() floor() format-number() function-available() generate-id() last() local-name() name() namespace-uri() normalize-space() not() number() position() round() starts-with() string() string-length() unparsed-entity-uri() system-property() substring-before() substring-after() substring() sum() translate() true() id() key() lang() 19
XPath 표현식 XPath 경로축 AxisName : self, ancestor, ancestor-or-self, attribute, child, descendant, descendant-or-self, following, following-sibling, namespace, preceding-sibling Axis specifier : :: Location path : /( 절대경로루트 ), //( 상대경로, 현재노드및자손 ),.( 노드자신 ),..( 현재노드의부모 ) Preceding Ancestor-or-self Ancestor Following Ancestor Preceding Parent Following Preceding-sibling Self Follwing-sibling Child Descendant Child Descendant Descendant-or-self 20
XPath 적용예 PLANETS XSL 문서 <?xml version="1.0" encoding="ksc5601"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="/" > <html> <head></head> <body> <xsl:apply-templates select="planets/planet[not(position()=last())]" /> </body> </html> </xsl:template> <xsl:template match="planet" > <ul> <li><h2><xsl:value-of select="child::name" /></h2></li> <li><h3>mass+day : <xsl:value-of select="mass+day" /></h3></li> </ul> </xsl:template> </xsl:template> </xsl:stylesheet> XML2HTML, IE Viewing XSL-FO 이해 21
XPath 적용예 XML2HTML IE Viewing <html> <head></head> <body> <ul> <li><h2> Mercury</h2></li> <li><h3>mass+day:58.7053 </h3> </li> </ul> </body> <html> PALENTS.xsl XSL-FO 이해 22
XSL-FO 이해 XSL-FO 기본개념 포맷팅객체관련 NameSpace http://www.w3.org/1999/xsl/format http://www.w3.org/tr/xsl http://www.w3.org/tr/xsl/sliceb.html XSL-FO 는 XSLT tree 변환후, 문서의 paging, layout, formatting 정보부여 XSLT 에서생성된 Result tree 로부터포맷팅을위한 Area Tree 모델생성 56 개의 formatting objects 및 177 개의포맷팅특성사용 FO 는 block level(vertical) 과 inline level(horizonal) 로구분 XSLT 프로세서적용후 FOP 프로세서를통해특성문서포맷을변환 현재활용가능 FOP 는 Arpache XML2PDF FOP XML2PDF 변환과정 XML Source Tree XSL XML Tree XSLT XSLT Processor Result Applying FO Tree FOP FO2PDF PDF Results Document 23
XSL-FO 포맷팅모델 Pagination 및 Layout 구성모델 XSL-FO 포맷팅모델 CSS 포맷팅모델 Region-start Regionbefore Margin-top Region-body Margin(transparent) border padding Margin-left Marginright Page-height content Page-width Margin-bottom Region-after Region-end Element width Box width 24
XSL FO 트리체계 Pagination 및 Layout FO 트리체계 fo:root fo:layout-master-set fo:declaration fo:page-sequence fo:color-profile fo:simplepage-master fo:pagesequence-master fo:title fo:flow fo:static-content 25
XSL FO 트리체계 Pagination 및 Layout FO 명령어 fo:layout-master-set 페이지의 Layout 과 Sequencing 을정의한다. fo:page-master 페이지구분및그영역을기술한다. fo:page-sequence-master Page-master 의절차를나타낸다. Child Object : region-body, region-before, region-after, region-start, resion-end 참고 : column-count fo:page-sequence Page-master, page-sequence-master 를참조하여페이지내용을나타낸다. fo:static-content Header/footer 와같이고정된내용을복수페이지에반복적용한다. fo:flow 하위의 Block-Level FO 를통해내용을나타낸다. 26
XSL FO 트리체계 Table FO Tree 체계 fo:table-column : Column 의 width, align 등의속성을지정한다. 27
XSL FO 트리체계 List FO 구성 28
XSL FO 트리체계 List FO Tree 체계 29
XSL FO 트리체계 Multi FO 체계 기타 FO 정보 http://xml.apache.org/fop http://www.w3.org/tr/xsl/slicec.html#prtab1, #prtab2 30
FO 작업예 주요 FO 작업엘리먼트 Fo : root : FO 작업시작, 최상노드생성 Fo : layout-master-set : 마스터셋설계 Fo : simple-page-master : 페이지마스터사용 Fo : region-* : 영역생성 Fo : page-sequence : 페이지역속생성 Fo : flow : Fo 흐름생성 Fo : static-content : 정적자료생성 Fo : block : 블록레벨자료생성 Fo : inline : 인라인포맷팅객체 Fo : table : 테이블생성객체 31
FO 작업예 FO 적용예 <kietm> <chapter> <chapter-title>employment</chapter-title> <section1 id="sect-310"> <sec1-title>organization</sec1-title> <section2 id="sect-320"> <sec2-title>atkhb.</sec2-title> <para> XML <text>the atkhb is task-organized according to the factors of mett-t. as the situation dictates, the aviation brigade commander can organize the atkhb with other assets to form tfs to better perform specific missions.</text> </para> <?xml version="1.0" encoding="euc-kr"?> <xsl:stylesheet xmlns:xsl=http://www.w3.org/tr/wd-xsl xmlns:fo="http://www.w3.org/1999/xsl/format" result-ns="fo"><xsl:template match="/"> <fo:layout-master-set> XSL <fo:simple-page-master page-mastername="pagemaster-all-pages" height="29.7cm" width="21cm" margin-top="1cm" marginbottom="2cm" margin-left="2.5cm" marginright="2.5cm"> <fo:region-body margin-top="1cm" marginbottom="1cm" column-gap="0.25in" border="thin dotted black" padding="6pt" columncount="1"/></fo:simple-page-master></fo:layoutmaster-set> 32
FO 작업예 XSL-FO <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/for mat"> <fo:layout-master-set> <fo:simple-page-master page-mastername="pagemaster-all-pages" height="29.7cm" width="21cm" margintop="1cm" margin-bottom="2cm" marginleft="2.5cm" margin-right="2.5cm"> <fo:region-body margin-top="1cm" marginbottom="1cm" column-gap="0.25in" border="thin dotted black" padding="6pt" column-count="1" /> </fo:simple-page-master></fo:layout-masterset> <fo:page-sequence> <fo:sequence-specification> PDF 화일 33
XSL FO 프로세서 XSL - FO 프로세서 FOP 현재제안된 XSL 프로세서, Apache XML 프로젝트에적용, XML문서를 PDF로포맷팅 현재지원하는 Formatting Property passivetex - 장점 개발이용이하고안정적이다. 폰트, 그래픽등을무상으로사용할수있다. 수식처리가뛰어나다. 고품질의 PDF 파일을생성할수있다. - 단점 XSL FO가 TeX Page Markup Mode에맞추어야한다. TeX macro 사용이모호하고어렵다. 크고강건해서다른프로그램에내장되기어렵다. PDF 변환에적용하기에는시스템이너무크다 34
요 약 XSLT XML 문서의구조변환, 템플릿활용 XML Stylesheet Language XPATH XML 노드의위치경로선택및 Predicate Expression 제공 SQL-like XML 데이터처리성능향상 XSL-FO XML 문서의포맷팅객체제공, XML2PDF, XML2WML 등다양한문서변환 XSL 의 2 단계활용 연락처 E-mail : chs@kware21.com Tel : 02-536-5093 Homepage : www.kware21.com, www.xmlspecial.com 35