Aplikacje internetowe laboratorium XML, DTD, XSL Celem ćwiczenia jest stworzenie dokumentu XML, wyposażenie dokumentu w specyfikację struktury (przy użyciu DTD), oraz transformacja dokumentu XML do postaci HTML przy użyciu arkuszy stylów XSL. Do wykonania ćwiczenia potrzebny jest dowolny edytor plików tekstowych oraz przeglądarka internetowa. 1. Stwórz plik pracownicy.xml zawierający informacje o wszystkich zespołach i pracownikach zespołów. Wykorzystaj poniższy kod: <INSTYTUT NAZWA="INSTYTUT INFORMATYKI" ULICA="PIOTROWO 2" KOD="60-965" MIASTO="POZNAN"> <ZESPOLY> <NAZWA>ADMINISTRACJA</NAZWA> <PRACOWNIK ID_PRAC="p180"> <NAZWISKO>MAREK</NAZWISKO><ETAT>SEKRETARKA</ETAT><PLACA>410,2</PLACA> <NAZWA>ALGORYTMY</NAZWA> <PRACOWNIK ID_PRAC="p110"> <NAZWISKO>BLAZEWICZ</NAZWISKO><ETAT>PROFESOR</ETAT><PLACA>1350</PLACA> <NAZWA>SYSTEMY EKSPERCKIE</NAZWA> <PRACOWNIK ID_PRAC="p230"> <NAZWISKO>HAPKE</NAZWISKO><ETAT>ASYSTENT</ETAT><PLACA>480</PLACA> <PRACOWNIK ID_PRAC="p200"> <NAZWISKO>ZAKRZEWICZ</NAZWISKO><ETAT>STAZYSTA</ETAT><PLACA>208</PLACA> <NAZWA>SYSTEMY ROZPROSZONE</NAZWA> <PRACOWNIK ID_PRAC="p220"> <NAZWISKO>KONOPKA</NAZWISKO><ETAT>ASYSTENT</ETAT><PLACA>480</PLACA> <PRACOWNIK ID_PRAC="p190"> <NAZWISKO>MATYSIAK</NAZWISKO><ETAT>ASYSTENT</PLACA><PLACA>371</ETAT> <PRACOWNIK ID_PRAC="p170"> <NAZWISKO>JEZIERSKI</NAZWISKO><ETAT>ASYSTENT</ETAT><PLACA>439,7</PLACA> <PRACOWNIK ID_PRAC="p160"> <NAZWISKO>KOSZLAJDA</NAZWISKO><ETAT>ADIUNKT</ETAT><PLACA>590</PLACA> <NAZWA>BADANIA OPERACYJNE</NAZWAZESPOLU> </ZESPOLY> </INSTYTUT> 2. Sprawdź, czy plik jest poprawnie wyświetlany przez przeglądarkę. Znajdź błędy w dokumencie i je napraw.
3. Stwórz opis DTD (ang. Document Type Definition) struktury danych przechowywanych w pliku pracownicy.xml. W nagłówku pliku pracownicy.xml dodaj poniższy kod: <!DOCTYPE INSTYTUT [ <!ELEMENT INSTYTUT (ZESPOLY)> <!ATTLIST INSTYTUT NAZWA CDATA #REQUIRED ULICA CDATA #IMPLIED KOD CDATA #IMPLIED MIASTO CDATA #FIXED "POZNAN"> <!ELEMENT ZESPOLY (ZESPOL)+> <!ELEMENT ZESPOL (NAZWA,PRACOWNICY?)> <!ELEMENT NAZWA (#PCDATA)> <!ELEMENT PRACOWNICY (PRACOWNIK)+> <!ELEMENT PRACOWNIK (NAZWISKO,ETAT,PLACA)> <!ATTLIST PRACOWNIK ID_PRAC ID #REQUIRED> <!ELEMENT NAZWISKO (#PCDATA)> <!ELEMENT ETAT (#PCDATA)> <!ELEMENT PLACA (#PCDATA)> <!ENTITY szef "DYREKTOR"> ]> <INSTYTUT NAZWA="INSTYTUT INFORMATYKI"...> 4. Dodaj do zespołu ADMINISTRACJA nowego pracownika zdefiniowanego jak poniżej i zobacz, jak dokument jest wyświetlany w przeglądarce. Zwróć uwagę na to, w jaki sposób przeglądarka interpretuje encję XML. <PRACOWNIK ID_PRAC="p100"> <NAZWISKO>WEGLARZ</NAZWISKO><ETAT>&szef;</ETAT><PLACA>1730</PLACA> 5. Wykorzystaj walidator http://www.stg.brown.edu/service/xmlvalid do sprawdzenia poprawności swojego pliku pracownicy.xml 6. Pracownikowi ZAKRZEWICZ zmień wartość atrybutu ID_PRAC na "p220" i ponownie zwaliduj dokument. Zapoznaj się z komunikatem o błędzie. Przywróć poprawną wersję dokumentu. 7. Pracownikowi JEZIERSKI usuń znacznik <PLACA>439,7</PLACA> i ponownie zwaliduj dokument. Zapoznaj się z komunikatem o błędzie. Przywróć poprawną wersję dokumentu.
8. Stwórz plik transform.xsl zawierający kod XSL służący do transformacji dokumentu pracownicy.xml do postaci HTML. Wypełnij plik następującym kodem: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:fo="http://www.w3.org/1999/xsl/format"> </xsl:stylesheet> 9. Dopisz do pliku pracownicy.xml powiązanie z arkuszem stylistycznym XSL. Jako drugą linijkę pliku pracownicy.xml umieść następujący kod. Następnie, otwórz plik pracownicy.xml w przeglądarce i zaobserwuj wynik. Przeanalizuj źródło zbudowanej strony HTML. Co się stało ze znacznikami, dla których w arkuszu stylistycznym nie znaleziono reguł? <?xml-stylesheet type="text/xsl" href="transform.xsl"?> 10. Dodaj do arkusza stylistycznego XSL regułę czytającą nazwę instytutu. Odśwież dokument w przeglądarce i zaobserwuj wynik. <h1> <xsl:value-of select="@nazwa"/> </h1>
11. Analogicznie, zmodyfikuj szablon dopasowywany do znacznika <INSTYTUT> w taki sposób, aby poprawnie wyświetlić adres i kod instytutu. <h1> <xsl:value-of select="@nazwa"/> </h1> <h2> <xsl:value-of select="@ulica"/> </h2> <h2> <xsl:value-of select="@kod"/> <xsl:text> </xsl:text> <xsl:value-of select="@miasto"/> </h2> 12. Dodaj szablon dopasowujący się do znacznika i zaobserwuj działanie szablonu w przeglądarce. <xsl:template match="zespol"> <div class="zespol"> <xsl:number/>.<xsl:value-of select="nazwa"/> <table> <xsl:attribute name="border">1</xsl:attribute> <th>id</th><th>nazwisko</th><th>etat</th><th>placa</th> <xsl:apply-templates select="pracownicy"/> </table> </div> 13. Dodaj szablon dopasowujący się do znacznika <PRACOWNIK> i zaobserwuj działanie szablonu w przeglądarce. <xsl:template match="pracownik"> <td><xsl:value-of select="@id_prac"/></td> <td><xsl:value-of select="nazwisko"/></td> <td><xsl:value-of select="etat"/></td> <td><xsl:value-of select="placa"/></td>
14. W kolejnym kroku ukryjemy tabelkę dla tych zespołów, które nie zatrudniają żadnych pracowników. Zamiast tabelki pojawi się napis Brak pracowników. Zmodyfikuj szablon dopasowywany do elementu w następujący sposób: <xsl:template match="zespol"> <div class="zespol"> <xsl:number/>.<xsl:value-of select="nazwa"/> <xsl:choose> <xsl:when test="pracownicy"> <table> <xsl:attribute name="border">1</xsl:attribute> <th>id</th><th>nazwisko</th><th>etat</th><th>placa</th> <xsl:apply-templates select="pracownicy"/> </table> </xsl:when> <xsl:otherwise> <br/><em>brak pracowników</em> </xsl:otherwise> </xsl:choose> </div> 15. Kolejnym krokiem będzie podświetlenie pracowników zatrudnionych na etacie asystenta kolorem błękitnym. Zmodyfikuj szablon dopasowywany do znacznika <PRACOWNIK> w następujący sposób: <xsl:template match="pracownik"> <xsl:if test="etat='asystent'"> <xsl:attribute name="bgcolor">#addfff</xsl:attribute> </xsl:if> <td><xsl:value-of select="@id_prac"/></td> <td><xsl:value-of select="nazwisko"/></td> <td><xsl:value-of select="etat"/></td> <td><xsl:value-of select="placa"/></td> 16. Ostatnim krokiem będzie wykorzystanie parsera Xalan-Java. Pobierz parser ze strony http://apache.forall.pl/xml/xalan-j. Rozpakuj archiwum do katalogu, w którym prowadzisz ćwiczenie. Dodaj ścieżkę do głównego archiwum parsera do zmiennej systemowej CLASSPATH i wygeneruj wynikowy kod HTML bezpośrednio do pliku. Pełna dokumentacja opcji parsera dostępnych z linii poleceń znajduje się tutaj: http://xml.apache.org/xalan-j/commandline.html C:\> set CLASSPATH=xalan-j_2_7_0/xalan.jar;%CLASSPATH% C:\>java org.apache.xalan.xslt.process -IN pracownicy.xml -XSL transform.xsl -OUT pracownicy.html