SKRYPT DO LABORATORIUM METODY REPREZENTACJI INFORMACJI ĆWICZENIE 5: Przekształcanie dokumentów XML XSL FO autor: dr inż. Jacek Rumiński Gdańsk, 2010 Projekt Przygotowanie i realizacja kierunku inżynieria biomedyczna studia międzywydziałowe współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego.
1. Zagadnienia wstępne 1.1.Wymagania w odniesieniu do studenta Osiągnięcie celów ćwiczenia będzie możliwe poprzez właściwe przygotowanie się studenta do zajęć. Będzie to możliwe poprzez: - powtórzenie wiedzy nabytej w czasie wykładów, - wykonanie ćwiczenia nr 1, 2 i 4, - zapoznanie się z instrukcją do ćwiczenia ilustrującą podstawowe zagadnienia z zakresu tematyki ćwiczenia, a szczególnie formatowania i transformacji dokumentów z wykorzystaniem XSLT i XSL FO oraz przetwarzania dokumentów XML z wykorzystaniem XPath. Ponadto wymagana jest od studenta: podstawowa umiejętność programowania, umiejętność twórczego myślenia. 1.2.Wymagania w odniesieniu do stanowiska laboratoryjnego Stanowisko laboratoryjne powinno być wyposażone w komputer z działającym oprogramowaniem parsera XML, edytora tekstowego do tworzenia dokumentów XML, oprogramowania transformacji dokumentów XSL FO (Apache FOP) oraz w dostęp do Internetu poprzez przeglądarkę WWW. Na komputerze dostępne powinna być zainstalowana instrukcja do ćwiczenia w wersji elektronicznej oraz pliki testowe. Stosowane technologie i narzędzia w ćwiczeniu: przykładowe pliki XML i XSL FO oraz programy/procesory XSLT, JCreator, edytor XML, oprogramowanie transformacji dokumentów XML/XSL FO. 1.3.Cele ćwiczenia Celem ćwiczenia jest praktyczna demonstracja wiedzy teoretycznej, przedstawionej w ramach wykładów. Realizując ćwiczenie laboratoryjne studenci zdobędą szereg nowych umiejętności w zakresie transformacji dokumentów XML, w tym: tworzenie dokumentów XSL FO umożliwiających formatowanie dokumentów do wydruku (PDF), 2
tworzenie dokumentów XSL FO umożliwiających transformacje informacji XML do układu stron drukarskich, przeprowadzanie transformacji dokumentów XML, wykorzystywanie oprogramowania transformacji dokumentów XML/XSL FO. 1.4.Metody dydaktyczne Student w pierwszej kolejności realizuje zadania przykładowe (workplan.xml, workplan.xsl, SQL/XML), demonstrujące poszczególne elementy formatowania dokumentów za pomocą składni XSL oraz przeprowadzania procesu transformacji dokumentów. Realizuje również przykładowe polecenia z zakresu tworzenia tabeli z kolumną o typie danych XML, wypełniania tabeli danymi oraz formułowaniu i wykonywania zapytań SQL/XQuery. Następnie, na podstawie posiadanej wiedzy i zdobytej umiejętności z zadań demonstracyjnych, realizuje przydzielone zadania. Wszystkie utworzone dokumenty i kody źródłowe wpisuje w dokumencie elektronicznym, który jednocześnie staje się sprawozdaniem z ćwiczenia laboratoryjnego. Materiały wprowadzające i pomocnicze: XML, XSLT, i XSL FO specyfikacje i podręczniki na stronach www.w3c.org oraz www.xml.com, podręczniki drukowane o XML, materiały i wiedza z wykładów. 1.5.Zasady oceniania Ocenie podlegać będzie realizacja poszczególnych zadań w ramach danego ćwiczenia laboratoryjnego. Dodatkowo w czasie realizacji ćwiczenia przydzielone zostaną studentowi dodatkowe zadania. Poszczególnym zadaniom przydzielono liczbę punktów jakie można zdobyć za ich wykonania. Maksymalna liczba punktów wynosi 12. Wykaz literatury podstawowej do ćwiczenia: Wykaz literatury podstawowej: 1. Skrypt z materiałami do przedmiotu Metody reprezentacji informacji 2. Materiały do przedmiotu opracowane w formie edukacji na odległość, dostęp: http://uno.biomed.gda.pl 3. Steven Holzner, XML. Vademecum profesjonalisty, WNT, 2001 4. Zasoby strony internetowej www.w3.org, w szczególności specyfikacja XML, XSL-FO Wykaz literatury uzupełniającej: 1. Elliotte Rusty Harold, W.Scott Means, XML. Almanach, Helion, 2002 2. Przebieg ćwiczenia 3
L.p. Zadanie 1. Zapoznanie się z instrukcją laboratoryjną (przed ćwiczeniem) 2. Wprowadzenie kierownika ćwiczenia. Zapoznanie się uczestników ze stosowanymi programami, przegląd dokumentacji (10 min.) 3. Transformacja przykładowych dokumentów XSL-FO (25 min.) 4. Transformacja przykładowych dokumentów XSL-FO z wykorzystaniem dokumentu XML jako źródła informacji (15 min.) 5. Zaprojektowanie dokumentu XML oraz arkusza XSL-FO pojedynczej strony dokumentacji medycznej (60min.) 6. Transformacja opracowanych dokumentów (20 min.) 7. Przesłanie/pokazanie zbioru dokumentów/programów do oceny (5 min.) UWAGI! 1. PRZED przystąpieniem do ćwiczenia należy w katalogu d:\dydaktyka\studenci utworzyć własny katalog (imie_nazwisko), a następnie przekopiować tam zawartość katalogu d:\dydaktyka\mri\cw5. Proszę pracować wyłącznie na wykonanej kopii plików. 3. Wprowadzenie do ćwiczenia W czasie realizacji ćwiczenia realizowane będą zadania zgodnie z ich wcześniejszym opisem. Każde zadanie (z wyjątkiem zadania realizowanego przed przystąpieniem do ćwiczenia laboratoryjnego) opisano poniżej. Ad 2. Wprowadzenie kierownika ćwiczenia. Zapoznanie się uczestników ze stosowanymi programami, przegląd dokumentacji (10 min.) Po wprowadzeniu kierownika ćwiczenia uczestnicy zapoznają się ze stanowiskiem komputerowym, oprogramowaniem i dokumentami związanymi z ćwiczeniem. Następnie utworzyć we wskazanym przez kierownika ćwiczenia katalogu własny podkatalog o nazwie zawierającej własne nazwisko. Do katalogu tego przegrać zawartość podkatalogu DANE (znajdującego się w folderze zawierającym instrukcję do ćwiczenia). W utworzonym podkatalogu należy przechowywać wszystkie wytworzone w czasie trwania ćwiczenia dokumenty i programy. Ad 3. Transformacja przykładowych dokumentów XSL-FO (25 min.) Wykorzystując podane przykłady przeprowadzić proces transformacji dokumentu XSL FO do PDF wykorzystując środowisko Apache FOP (d:\dydaktyka\mri\cw5\soft\fop). a) Polecenie fop 4
fop.bat dokument.fo dokument.pdf Przykład 1. Dokument iwm.fo <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="all" page-height="297mm" page-width="210mm" margin-top="1in" margin-bottom="1in" margin-left="0.5in" margin-right="0.5in"> <fo:region-body region-name="plan" margin-top="1in" margin-bottom="0in" margin-left="1in" margin-right="0in"/> </fo:layout-master-set> <fo:page-sequence master-reference="all"> <fo:flow flow-name="plan" font-family="arial" font-size="40pt"> <fo:block text-align="justify" border="2pt solid red">informatyka w medycynie </fo:root> fop.bat iwm.fo iwm.pdf Przykład 2. Dokument svg.fo <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="all" page-height="297mm" page-width="210mm" margin-top="10mm" margin-bottom="10mm" margin-left="10mm" margin-right="10mm"> <fo:region-body region-name="plan" margin-top="0in" margin-bottom="0in" margin-left="1in" margin-right="0in"/> </fo:layout-master-set> <fo:page-sequence master-reference="all"> <fo:flow flow-name="plan" font-family="arial" font-size="40pt"> 5
<fo:block> <fo:instream-foreign-object content-height="200mm"> <svg xmlns="http://www.w3.org/2000/svg" width="150mm" height="200mm"> <radialgradient id="grad" gradientunits="userspaceonuse" cx="60mm" cy="70mm" r="50mm" fx="60mm" y="70mm"> <stop stop-color="blue" offset="0"/> <stop stop-color="green" offset="0.4"/> <stop stop-color="yellow" offset="0.6"/> <stop stop-color="orange" offset="0.8"/> <stop stop-color="red" offset="1.0"/> </radialgradient> <rect x="10mm" y="20mm" width="100mm" height="100mm" fill="url(#grad)" strokewidth="1mm"/> <text font-family="georgia" font-size="36pt" x="10mm" y="130mm"> Przykład SVG! </text> </svg> </fo:instream-foreign-object> </fo:root> fop.bat svg.fo svg.pdf Przykład 3. Dokument raport.fo <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="tytul" margin="10mm" page-height="297mm" page-width="210mm"> <fo:region-body margin="60mm"/> <fo:page-sequence-master master-name="stronatytulowa"> <fo:single-page-master-reference master-reference="tytul"/> 6
</fo:page-sequence-master> <fo:simple-page-master master-name="tresc" margin="15mm" page-height="297mm" pagewidth="210mm"> <fo:region-body margin="15mm" column-gap="10mm" column-count="2"/> <fo:region-before region-name="naglowek" extent="15mm" /> <fo:region-after region-name="stopka" extent="15mm" /> </fo:layout-master-set> <fo:page-sequence master-reference="stronatytulowa"> <fo:flow flow-name="xsl-region-body" font-family="arial" font-size="30pt"> <fo:block text-align="center" text-indent="2mm" border="2pt solid red"> Raport z XML-FO. <fo:page-sequence master-reference="tresc"> <fo:static-content flow-name="naglowek"> <fo:block border-bottom-width="thin" border-bottom-style="solid" border-bottom-color="blue" font-weight="bold" text-align="center"> Raport z XML-FO </fo:static-content> <fo:static-content flow-name="stopka"> <fo:block border-top-width="thin" border-top-style="solid" border-top-color="blue" font-weight="bold" text-align="center"> 7
Jacek W. Ruminski, strona <fo:page-number/> </fo:static-content> <fo:flow flow-name="xsl-region-body" font-family="arial" font-size="12pt"> <fo:block text-align="justify" text-indent="2mm" > TU DODAĆ co najmniej 100 linii tekstu </fo:root> fop.bat raport.fo raport.pdf Ad 4. Transformacja przykładowych dokumentów XSL-FO z wykorzystaniem dokumentu XML jako źródła informacji (15 min.) Wykonać przykładowe zadanie transformacji dokumentów wykorzystując pliki workplan.xml i workplan.xsl podane w załączniku. fop.bat -xml workplan.xml -xsl workplan.xsl workplan.pdf Ad. 5 Zaprojektowanie dokumentu XML oraz arkusza XSL-FO pojedynczej strony dokumentacji medycznej (60min.) Prowadzący przydzieli każdej osobie pojedynczą kartkę dokumentacji medycznej (w formie dokumentu papierowego lub PDF). Na tej podstawie należy: - utworzyć przykładowy dokument XML z danymi (dane.xml), - utworzyć dokument XSL-FO odtwarzający formę dokumentu dokumentacji medycznej (forma.fo). Następnie sprawdzić czy dokument forma.fo po transformacji do dokumentu PDF odpowiada wzorcowi. Ad. 6 Transformacja opracowanych dokumentów (20 min.) 8
Utworzony w poprzedniej części ćwiczenia arkusz forma.fo zmienić do postaci dokumentu XSL (forma.xsl), a następnie dokonać transformacji dokumentu źródłowego (dane.xml) do opracowanej formy układu strony (forma.xsl) posługując się oprogramowaniem Apache FOP. 9
4 Załączniki W części tej zawarto kody programów oraz pliki przykładowe i instrukcje konfiguracji oprogramowania. 4.1 Przykładowy dokument XSL-FO: iwm.fo <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="all" page-height="297mm" page-width="210mm" margin-top="1in" margin-bottom="1in" margin-left="0.5in" margin-right="0.5in"> <fo:region-body region-name="plan" margin-top="1in" margin-bottom="0in" margin-left="1in" margin-right="0in"/> </fo:layout-master-set> <fo:page-sequence master-reference="all"> <fo:flow flow-name="plan" font-family="arial" font-size="40pt"> <fo:block text-align="justify" border="2pt solid red">informatyka w medycynie </fo:root> 4.2 Przykładowy dokument XSL-FO: svg.fo <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="all" page-height="297mm" page-width="210mm" margin-top="10mm" margin-bottom="10mm" margin-left="10mm" margin-right="10mm"> <fo:region-body region-name="plan" margin-top="0in" margin-bottom="0in" margin-left="1in" margin-right="0in"/> </fo:layout-master-set> <fo:page-sequence master-reference="all"> <fo:flow flow-name="plan" font-family="arial" font-size="40pt"> <fo:block> <fo:instream-foreign-object content-height="200mm"> 10
<svg xmlns="http://www.w3.org/2000/svg" width="150mm" height="200mm"> <radialgradient id="grad" gradientunits="userspaceonuse" cx="60mm" cy="70mm" r="50mm" fx="60mm" y="70mm"> <stop stop-color="blue" offset="0"/> <stop stop-color="green" offset="0.4"/> <stop stop-color="yellow" offset="0.6"/> <stop stop-color="orange" offset="0.8"/> <stop stop-color="red" offset="1.0"/> </radialgradient> <rect x="10mm" y="20mm" width="100mm" height="100mm" fill="url(#grad)" strokewidth="1mm"/> <text font-family="georgia" font-size="36pt" x="10mm" y="130mm"> Przykład SVG! </text> </svg> </fo:instream-foreign-object> </fo:root> 4.3 Przykładowy dokument XSL-FO: raport.fo <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="tytul" margin="10mm" page-height="297mm" page-width="210mm"> <fo:region-body margin="60mm"/> <fo:page-sequence-master master-name="stronatytulowa"> <fo:single-page-master-reference master-reference="tytul"/> </fo:page-sequence-master> <fo:simple-page-master master-name="tresc" margin="15mm" page-height="297mm" pagewidth="210mm"> <fo:region-body margin="15mm" column-gap="10mm" column-count="2"/> 11
<fo:region-before region-name="naglowek" extent="15mm" /> <fo:region-after region-name="stopka" extent="15mm" /> </fo:layout-master-set> <fo:page-sequence master-reference="stronatytulowa"> <fo:flow flow-name="xsl-region-body" font-family="arial" font-size="30pt"> <fo:block text-align="center" text-indent="2mm" border="2pt solid red"> Raport z XML-FO. <fo:page-sequence master-reference="tresc"> <fo:static-content flow-name="naglowek"> <fo:block border-bottom-width="thin" border-bottom-style="solid" border-bottom-color="blue" font-weight="bold" text-align="center"> Raport z XML-FO </fo:static-content> <fo:static-content flow-name="stopka"> <fo:block border-top-width="thin" border-top-style="solid" border-top-color="blue" font-weight="bold" text-align="center"> Jacek W. Ruminski, strona <fo:page-number/> </fo:static-content> <fo:flow flow-name="xsl-region-body" font-family="arial" font-size="12pt"> <fo:block text-align="justify" text-indent="2mm" > 12
TU DODAĆ co najmniej 100 linii tekstu </fo:root> 4.4 Przykładowy dokument XML: workplan.xml <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="workplan.xsl"?> <workplan year="2011" semester="zimowy"> <monday> <lecture time="11-12" room="ne 02">Bazy danych</lecture> <lecture time="12-13" room="ea Aud 1">Metody reprezentacji informacji</lecture> <lecture time="14-16" room="ea 01">Języki programowania</lecture> <lab time="16-18" room="ea 101/102">GIS</lab> </monday> <tuesday> <lecture time="13-14" room="ne Aud L">Przetwarzanie obrazów</lecture> <project time="14-17" room="ne 238">Projekt grupowy</project> </tuesday> <wednesday> <meeting time="13-17" room="sala senatu">senat PG</meeting> </wednesday> <thursday> <meeting time="9-10" room="ea229">zebranie Katedry</meeting> <meeting time="10-13" room="ea 106">Konsultacje</meeting> <lecture time="14-16" room="ea Aud. 2">GIS</lecture> </thursday> <friday> <lecture time="10-11" room="ea Aud. 2">Biometria</lecture> <lecture time="11-13" room="gg211">przetwarzanie rozproszone</lecture> </friday> </workplan> 4.5 Przykładowy dokument XSL-FO: workplan.xsl <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="all" page-height="210mm" page-width="297mm" margin="10mm"> <fo:region-body region-name="plan" margin="16mm"/> <fo:region-before region-name="naglowek" extent="15mm" /> </fo:layout-master-set> <fo:page-sequence master-reference="all"> <fo:static-content flow-name="naglowek"> <fo:block border-bottom-width="thin" border-bottom-style="solid" border-bottom-color="blue" font-family="arial" font-size="20pt" font-weight="bold" text-align="center"> PLAN ZAJĘĆ JACKA RUMIŃSKIEGO, ROK: <xsl:value-of select="workplan/@year"/> 13
</fo:static-content> <fo:flow flow-name="plan" font-family="arial" font-size="20pt"> <fo:table border-collapse="collapse" font-size="14pt" font-family="arial"> <fo:table-column column-width="20%" background-color="rgb(255,246,206)"/> <fo:table-column column-width="20%"/> <fo:table-column column-width="20%" background-color="rgb(255,246,206)"/> <fo:table-column column-width="20%"/> <fo:table-column column-width="20%" background-color="rgb(255,246,206)"/> <fo:table-header color="rgb(255,255,255)" background-color="rgb(125,73,2)" font-weight="bold"> <fo:table-row> <fo:block> Poniedziałek <fo:block> Wtorek <fo:block>środa <fo:block>czwartek <fo:block>piątek </fo:table-row> </fo:table-header> <fo:table-body> <fo:table-row> <xsl:for-each select="//monday/*"> <fo:block><xsl:apply-templates select="."/> <fo:block /> </xsl:for-each> <xsl:for-each select="//tuesday/*"> <fo:block><xsl:apply-templates select="."/> <fo:block /> </xsl:for-each> <xsl:for-each select="//wednesday/*"> <fo:block><xsl:apply-templates select="."/> <fo:block /> </xsl:for-each> <xsl:for-each select="//thursday/*"> <fo:block><xsl:apply-templates select="."/> <fo:block /> </xsl:for-each> <xsl:for-each select="//friday/*"> <fo:block><xsl:apply-templates select="."/> <fo:block /> </xsl:for-each> 14
</fo:table-body> </fo:table> </fo:table-row> </fo:root> </xsl:template> <xsl:template match="lecture"> <xsl:value-of select="@time"/> <xsl:text> {</xsl:text> <xsl:value-of select="@room"/> <xsl:text>}: </xsl:text> <xsl:value-of select="name()"/> <xsl:text>: </xsl:text> <xsl:value-of select="."/> </xsl:template> <xsl:template match="meeting"> <xsl:value-of select="@time"/> <xsl:text> {</xsl:text> <xsl:value-of select="@room"/> <xsl:text>}: </xsl:text> <xsl:value-of select="name()"/> <xsl:text>: </xsl:text> <xsl:value-of select="."/> </xsl:template> <xsl:template match="lab"> <xsl:text> </xsl:text> <xsl:value-of select="@time"/> <xsl:text> {</xsl:text> <xsl:value-of select="@room"/> <xsl:text>}: </xsl:text> <xsl:value-of select="name()"/> <xsl:text>: </xsl:text> <xsl:value-of select="."/> </xsl:template> <xsl:template match="project"> <xsl:value-of select="@time"/> <xsl:text> {</xsl:text> <xsl:value-of select="@room"/> <xsl:text>}: </xsl:text> <xsl:value-of select="name()"/> <xsl:text>: </xsl:text> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> 15