XSL 의이해 김현한국학중앙연구원인문정보학교실 hyeon@aks.ac.kr 이저작물 (PPT) 의인용표시방법 : 김현, XSL 의이해, 전자문서와하이퍼텍스트 수업자료 (2018)
1. XSL 이란? 2. XSL Elements 3. XSL 에의한문서표현
1. XSL이란? XSL 관련개념 XSL (extensible Stylesheet Language) 문서의스타일을정의하기위한언어 XSLT (XSL Transformation) XML 문서의구조를다른구조로변환시키는마크업언어 XML HTML, XML WML, XML XML XSL-FO (XSL Formatting Objects) XML 문서를非 XML 문서 (XML 권고안문법에따라작성된텍스트형식의파일이아닌문서 ) 로변환하는방법 XML 문서 PDF 문서 XSL XSLT XSL-FO
1. XSL이란? XSL 문서의적용방법 XSL 문서의적용방법 XML 문서 <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>... XSL 문서 (mystyle.xsl) <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:html="http://www.w3.org/1999/xhtml">... </xsl:stylesheet>
1. XSL 이란? 2. XSL Elements 3. XSL 에의한문서표현
1. 2. XSL Elements 기본요소 기본요소 xsl:stylesheet XSLT 의최상위요소 xsl:output XSLT 를통해변환된결과가어떠한문서인지를표시 (XML, HTML, TEXT) Indent 속성 요소사이의공백표시 / 제거 xsl:template XML 문서의어느부분을어떻게변환할것인지결정한다. match 속성을이용하여문맥노드의위치를 XPath 표현식으로지정한다. xsl:apply-templates 문맥노드의하위에있는자식요소의처리를지시한다. select 속성을이용하여특정노드를선택할수있다. xsl:value-of 요소나속성의내용을문자열형식으로출력한다. select 속성을이용하여특정노드를선택할수있다. 6
1. 2. XSL Elements 제어요소 제어요소 xsl:if test 속성의조건이참일경우의처리를지시한다. xsl:choose, xsl:when, xsl:otherwise test 속성의조건이참일경우와거짓일경우의처리를지시한다. xsl:for-each select 속성을통해선택한노드를반복적으로처리한다. xsl:sort xml 문서의내용을순차적으로정열한다. <apply-templates> 나 <for-each> 의자식요소로사용할수있다. order 속성으로차순 (ascending descending) 을지정 data-type 속성으로숫자 / 문자여부 (number text) 를지정 7
1. 2. XSL Elements XML 문서생성요소 XML 문서생성요소 xsl:element 결과트리를출력할때새로운요소를생성한다. xsl:attribute 결과트리에출력되는요소의속성값을동적으로할당한다. 8
1. XSL 이란? 2. XSL Elements 3. XSL 에의한문서표현
예제 DTD: 문서의구조 <?xml version="1.0" encoding="utf-8"?> <!ENTITY % 고유명사 " 인명 지명 "> <!ELEMENT 항목 ( 항목명, 메타데이터, 본문 )> <!ATTLIST 항목 ID CDATA #REQUIRED> <!ELEMENT 항목명 (#PCDATA)> <!ELEMENT 메타데이터 ( 분야, 유형 )> <!ELEMENT 분야 (#PCDATA)> <!ELEMENT 성격 (#PCDATA)> <!ELEMENT 본문 (#PCDATA % 고유명사 ;)*> <!ELEMENT 인명 (#PCDATA)> <!ATTLIST 인명유형 CDATA #IMPLIED> <!ELEMENT 지명 (#PCDATA)> <!ATTLIST 지명유형 CDATA #IMPLIED> XML: 문서의내용 <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href= mystyle.xsl"?> < 항목 ID="10001332 IRI="http://digerati.aks.ac.kr/terms/heritage# 수내동 _ 가옥 "> < 항목명 > 수내동가옥 </ 항목명 > < 메타데이터 > < 분야 > 생활 민속 </ 분야 > < 성격 > 건물 </ 성격 > </ 메타데이터 > < 본문 > < 지명 > 분당 </ 지명 > 신도시개발전이곳에세거하였던 < 인명유형 =" 성씨 "> 한산이씨 ( 韓山李氏 )</ 인명 > 의살림집중한채로 < 인명 > 이택구 </ 인명 > 씨가거주하였던집이다. </ 본문 > </ 항목 > XSL: 문서의모양 <?xml version="1.0" encoding="utf-8"?> <!-- XSL for 항목 _Display 1.0 written by Hyeon Kim 2016. 6. 9. --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/tr ansform" xmlns:html="http://www.w3.org/1999/xht ml"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <html:html xmlns="http://www.w3.org/1999/xhtml" xmlns:dc="http://purl.org/dc/terms/" version="xhtml+rdfa 1.0" > <xsl:apply-templates /> </html:html> <xsl:template match=" 인명 "> <html:font style="color:green;fontweight:bold"> <xsl:value-of select="."/> </html:font> </xsl:stylesheet>
예제 : 출력형태 11
예제분석 : XML 문서 <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="mystyle.xsl"?> < 항목 ID="10001332" IRI="http://digerati.aks.ac.kr/terms/heritage# 수내동 _ 가옥 "> < 항목명 > 수내동가옥 </ 항목명 > < 메타데이터 > < 분야 > 생활 민속 </ 분야 > < 성격 > 건물 </ 성격 > </ 메타데이터 > < 본문 > < 지명 > 분당 </ 지명 > 신도시개발전이곳에세거하였던 < 인명유형 =" 성씨 "> 한산이씨 ( 韓山李氏 )</ 인명 > 의살림집중한채로 < 인명 > 이택구 </ 인명 > 씨가거주하였던집이다. < 삽도 url="house_a.jpg"> 수내동가옥 </ 삽도 > < 삽도 url="house_b.jpg"> 수내동가옥 </ 삽도 > </ 본문 > </ 항목 > 12
예제분석 : DTD 문서 <?xml version="1.0" encoding="utf-8"?> <!ENTITY % 고유명사 " 인명 지명 "> <!ELEMENT 항목 ( 항목명, 메타데이터, 본문 )> <!ATTLIST 항목 ID CDATA #REQUIRED> <!ELEMENT 항목명 (#PCDATA)> <!ELEMENT 메타데이터 ( 분야, 성격 )> <!ELEMENT 분야 (#PCDATA)> <!ELEMENT 성격 (#PCDATA)> <!ELEMENT 본문 (#PCDATA % 고유명사 ;)*> <!ELEMENT 인명 (#PCDATA)> <!ATTLIST 인명유형 CDATA #IMPLIED> <!ELEMENT 지명 (#PCDATA)> <!ATTLIST 지명유형 CDATA #IMPLIED>
예제분석 : XSD 문서 (1) <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs=http://www.w3.org/2001/xmlschema elementformdefault="qualified"> <xs:element name=" 항목 "> <xs:complextype> <xs:sequence> <xs:element ref=" 항목명 "/> <xs:element ref=" 메타데이터 "/> <xs:element ref=" 본문 "/> </xs:sequence> <xs:attributegroup ref="attlist. 항목 "/> </xs:complextype> </xs:element> <xs:attributegroup name="attlist. 항목 "> <xs:attribute name="id" use="required"/> </xs:attributegroup> <xs:element name=" 항목명 " type="xs:string"/> <xs:element name=" 메타데이터 "> <xs:complextype> <xs:sequence> <xs:element ref=" 분야 "/> <xs:element ref=" 성격 "/> </xs:sequence> </xs:complextype> </xs:element> <xs:element name=" 분야 " type="xs:string"/> <xs:element name=" 성격 " type="xs:string
예제분석 : XSD 문서 (2) <xs:element name=" 본문 "> <xs:complextype mixed="true"> <xs:choice minoccurs="0" maxoccurs="unbounded"> <xs:element ref=" 인명 "/> <xs:element ref=" 지명 "/> </xs:choice> </xs:complextype> </xs:element> <xs:element name=" 인명 "> <xs:complextype mixed="true"> <xs:attributegroup ref="attlist. 인명 "/> </xs:complextype> </xs:element> <xs:attributegroup name="attlist. 인명 "> <xs:attribute name=" 유형 "/> </xs:attributegroup> <xs:element name=" 지명 "> <xs:complextype mixed="true"> <xs:attributegroup ref="attlist. 지명 "/> </xs:complextype> </xs:element> <xs:attributegroup name="attlist. 지명 "> <xs:attribute name=" 유형 "/> </xs:attributegroup> </xs:schema>
예제분석 : XSL 문서 (1) <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:html="http://www.w3.org/1999/xhtml"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <xsl:apply-templates /> <xsl:template match=" "> <xsl:value-of select="."/> </xsl:stylesheet>
예제분석 : XSL 문서 (2) <xsl:template match="/"> <html:html xmlns="http://www.w3.org/1999/xhtml" xmlns:dc="http://purl.org/dc/terms/" version="xhtml+rdfa 1.0" > <xsl:apply-templates /> </html:html> <xsl:template match=" 항목 "> <html:html> <html:head> <html:title> <xsl:value-of select="./@id"/> </html:title> <html:link> <xsl:attribute name="rel">dc:relation</xsl:attribute> <xsl:attribute name="href"><xsl:value-of select="./@iri"/></xsl:attribute> </html:link> <html:style> body {font-family: 함초롬바탕 } img {border:0} a {text-decoration:none} </html:style> </html:head> <html:body> <xsl:apply-templates/> </html:body> </html:html>
예제분석 : XSL 문서 (3) <xsl:template match=" 항목명 "> <html:font style="color:red;font-weight:bold;font-size:18pt"> <xsl:value-of select="."/> </html:font> <html:br/><html:br/> <xsl:template match=" 메타데이터 "> <xsl:apply-templates/> <html:br/> <xsl:template match=" 분야 "> <html:font style="color:grey;font-weight:bold">o 분야 : </html:font> <xsl:value-of select="."/> <html:br/> <xsl:template match=" 성격 "> <html:font style="color:grey;font-weight:bold">o 성격 : </html:font> <xsl:value-of select="."/> <html:br/>
예제분석 : XSL 문서 (4) <xsl:template match=" 본문 "> <xsl:apply-templates/> <html:br/> <xsl:template match=" 지명 "> <html:font style="color:blue;font-weight:bold"> <xsl:value-of select="."/> </html:font> <xsl:template match=" 인명 "> <html:font style="color:green;font-weight:bold"> <xsl:value-of select="."/> </html:font> <xsl:template match="text()"> <xsl:value-of select="."/>
예제분석 : XSL 문서 (5) <xsl:template match=" 삽도 "> <html:br/> <html:br/> <html:img> <xsl:attribute name="width">300</xsl:attribute> <xsl:attribute name="src"><xsl:value-of select="./@url" /></xsl:attribute> </html:img> <!-- 간단히이렇게쓰는것도가능 <html:img width="300" src="{./@url}" /> --> <html:br/> <html:font size="-1"><xsl:value-of select="."/></html:font> <html:br/>