Literatura. Głównie informacje w sieci: www.wikipedia.pl www.w3.org www.google.pl www.w3schools.com/xsl http://xmlsoft.org/



Podobne dokumenty
LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

Prezentacja i transformacja

XML DTD XML Schema CSS

WYKŁAD 1 METAJĘZYK SGML CZĘŚĆ 1

XML extensible Markup Language. Paweł Chodkiewicz

Aplikacje internetowe laboratorium XML, DTD, XSL

Plan prezentacji. Krótko o XML Arkusze stylów XSLT XSL XSL Path Przegląd konstrukcji języka i przykłady Narzędzia Podsumowanie Literatura

Język XSLT. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Plan dzisiejszego wykładu. Narzędzia informatyczne w językoznawstwie. XML - Definicja. Zalety XML

Rola języka XML narzędziem

XML extensible Markup Language 3

Wprowadzenie do technologii XML

29. Poprawność składniowa i strukturalna dokumentu XML

Extensible Markup Language III

Kurs WWW Język XML, część II

XML materiały dydaktyczne - Kurs Podstawowy XSL - wprowadzenie. XSL warstwa przekształcania (XSLT) oraz prezentacji informacji (XSL FO).

Prezentacja dokumentów XML

Elementarz HTML i CSS

DTD - encje ogólne i parametryczne, przestrzenie nazw

Kurs WWW Język XML, część I

Języki formatowania dokumentów strukturalnych. XSL przekształcenia XML-a. XSL a XSLT. XSL części składowe. Zasada działania przekształcenia XSLT

Przetwarzanie dokumentów XML za pomocą XSLT ( r.)

Technologie zarządzania treścią

Aplikacje internetowe laboratorium XML, DTD, XML Schema, XSL

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

Prezentacja i transformacja

extensible Markup Language, cz. 1 Marcin Gryszkalis, mg@fork.pl

XML Path Language (XPath)

Egzamin z przedmiotu Projektowanie języków XML imię i nazwisko. Zadanie Suma Punkty Max Punkty

Jak wygląda XML? Definiowanie typów dokumentów. Struktura logiczna dokumentu XML. Podstawy składni XML. Definiowanie języków. Poprawność dokumentów

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Dokument poprawnie sformułowany jest zgodny z ogólnymi zasadami składniowymi:

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Jak wygląda XML? Definiowanie typów dokumentów Część 1. DTD, XML Schema. Struktura logiczna dokumentu XML. Składnia XML. Encje predefiniowane.

c TP: anything: 13 listopada 2004 roku 1

METAJĘZYKI. Politechnika Koszalińska Wydział Elektroniki i Informatyki Katedra Inżynierii Komputerowej

1 Podstawy c++ w pigułce.

UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Podstawy (X)HTML i CSS

Podstawy XML-a. Zaawansowane techniki programowania

XML w sosie własnym. Standard XML wraz z DTD, przestrzenie nazw, projektowanie struktury dokumentów. Patryk Czarnik. Instytut Informatyki UW

Dzięki arkuszom zewnętrznym uzyskujemy centralne sterowanie wyglądem serwisu. Zewnętrzny arkusz stylów to plik tekstowy z rozszerzeniem css.

libxml2 parser DOM dla C++ czwartek, 8 grudnia 11

Służy do wybierania/wyszukiwania fragmentów dokumentu XML. Przypomina trochę ścieżki w systemie operacyjnym. Niech będzie dany dokument XML:

Jak wygląda XML? Definiowanie typów dokumentów Część 1. DTD. Struktura logiczna dokumentu XML. Podstawy składni XML. Definiowanie języków

WYKŁAD 2 DTD DOCUMENT TYPE DEFINITION CZĘŚĆ 1

Przykładowy dokument XML

Ćwiczenia laboratoryjne nr 8 Podstawy języka XML.

Narzędzia informatyczne w językoznawstwie

Plan prezentacji DTD. Wiązanie DTD z dokumentem XML Deklaracja typu dokumentu. Co to jest DTD. Wstęp. Przedmiot: XML i jego zastosowania

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Przetwarzanie dokumentów XML za pomocą procesora XSLT (Zajęcia r.

Podstawy języka XML. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Osie (axes) Location paths

Relacyjne bazy danych a XML

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

XSL, tj. XSLT i XSL-FO czyli jak przekształcać i ładnie wyświetlać XML-e. Kuba Pochrybniak

Prezentacja dokumentów XML

Stwórz dokument XML zawierający poniższe informacje. Wykorzystaj atrybuty.

Rodzaje przetwarzania XSLT (1)

XHTML - Extensible Hypertext Markup Language, czyli Rozszerzalny Hipertekstowy Język Oznaczania.

Tworzenie Stron Internetowych. odcinek 6

Technologie internetowe

LAB 7. XML EXtensible Markup Language - Rozszerzalny Język Znaczników XSD XML Schema Definition Definicja Schematu XML

mgr inż. Jacek Staniec Język XML

Podstawy JavaScript ćwiczenia

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Wprowadzenie do XML. Tomasz Przechlewski

Środowisko XML (Extensible Markup Language).

Jak wygląda XML? Definiowanie typów dokumentów Część 1. DTD, XML Schema. Struktura logiczna dokumentu XML. Składnia XML. Encje predefiniowane.

za pomocą: definiujemy:

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych

CSS. Kaskadowe Arkusze Stylów

XML w sosie własnym. Standard XML wraz z DTD, przestrzenie nazw, projektowanie struktury dokumentów. Patryk Czarnik. Instytut Informatyki UW

Zaawansowane aplikacje WWW - laboratorium

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Przykładowy dokument XML

XML extensible Markup Language. część 3

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

INTEGRACJA I EKSPLORACJA DANYCH

Programowanie internetowe

Aplikacje internetowe. Interfejs użytkownika

Podstawy programowania skrót z wykładów:

STRONY INTERNETOWE mgr inż. Adrian Zapała

1 Podstawy c++ w pigułce.

2 Podstawy tworzenia stron internetowych

Model semistrukturalny

Programowanie obiektowe

Dokumenty SEDU składają się z dwóch części: Opisu sprawy Formularza elektronicznego

Zaawansowana Pracownia Komputerowa - Ćwiczenia. Krzysztof Miernik

Tworzenie Stron Internetowych. odcinek 5

Kaskadowe arkusze stylów (CSS)

Prezentacja dokumentów XML

Dokument hipertekstowy

XML extensible Markup Language. część 3

XML extensible Markup Language. część 8

Prezentacja dokumentów XML

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Pakiet XML Czym jest i z czym się je?

Transkrypt:

XML DTD XSLT

Literatura Głównie informacje w sieci: www.wikipedia.pl www.w3.org www.google.pl www.w3schools.com/xsl http://xmlsoft.org/ 2

SGML (ang. Standard Generalized Markup Language) Standardowy uogólniony język znaczników służący do ujednolicania struktury i formatu różnego typu informacji (danych). Nie jest zbiorem określonych znaczników i reguł ich użytkowania, lecz ogólnym, nadrzędnym językiem służącym do definiowania dowolnych znaczników i ustalania zasad ich poprawnego użytkowania. Pozwala zapisać je w formie dokumentu tekstowego Łatwa przenośność Ujednolicania zasad pisania i przekazywania dokumentów tekstowych w obrębie dużych firm lub instytucji. Źródło: wikipedia 3

SGML Dokument w SGML'u składa się zwykle z 3 części deklaracji dokumentu, która definiuje ogólne reguły stosowane w zapisie dokumentu (np. maksymalna długość nazwy elementu, znak używany jako początek znacznika (domyślnie jest to znak < ) DTD definicji typu dokumentu, czyli definicji wszystkich znaczników i reguł ich stosowania właściwego dokumentu tekst wraz ze znacznikami. Źródło: wikipedia 4

SGML Ze względu na olbrzymią złożoność SGML mało który edytor pozwala na pełną obsługę standardu. Ze względu na olbrzymią złożoność SGML mało który edytor pozwala na pełną obsługę standardu. Zwykle deklaracja dokumentu SGML jak i DTD ukryte są najczęściej w oprogramowaniu, tak jak jest to w przypadku HTML'a Źródło: wikipedia 5

XML XML (ang. Extensible Markup Language) uniwersalny język formalny przeznaczony do reprezentowania różnych danych w ustrukturalizowany sposób Został zaprojektowany do przekazywania i przechowywania danych Jest niezależny od platformy Łatwa wymiana dokumentów pomiędzy różnymi systemami Jest podzbiorem SGML Jest rekomendowany oraz specyfikowany przez organizację W3C (World Wide Web Consortium) Źródło: wikipedia 6

XML Różnica pomiędzy XMLem a HTMLem jest taka, że HTML został zaprojektowany by pokazywać dane i główny nacisk jest położony na to jak one wyglądają XML przeznaczony jest do przechowywania danych, tu skupiono się jak dane mają być przechowane lub przekazane. XML jest czystym tekstem, opisującym samego siebie. Jednak do prezentowania lub przesyłania trzeba napisać dodatkowe oprogramowanie. <?xml version="1.0" encoding="utf-8"?> <list> <od>jak Kowalski</od> <do>anna Nowak</do> <temat>wyznanie</temat> <tresc>już Cie nie kocham</tresc> </list> Źródło: wikipedia 7

XML Wiele nowych Internetowych języków powstało z XMLa XHTML jest standardem HTML bazującym na XMLu. WSDL - Opis web serwisów WAP i WML - stosowane w urządzeniach przenośnych (handheld devices) RSS dostarczanie wiadomości RDF i OWL stosowane w hierarhizowaniu i kategoryzowaniu zasobów sieci WWW SMIL - (Synchronized Multimedia Integration Language) jest standardem zalecanym przez W3C do opisu prezentacji multimedialnych z wykorzystaniem XML Źródło: wikipedia 8

XML XML nie ma predefiniowanych tagów, użytkownik sam sobie wymyśla: <list> <od> <do> <temat> <tresc> nie jest jakimś standardem. HTML posiada predefiniowane tagi np. <body> <title> <head> <meta> XML jest strukturą drzewiastą Posiada korzeń (główny tag zwany rootem) Gałęzie Liście W XMLu wyróżniamy też Potomka, przodka, rodzeństwo Zawartość może być tekstem lub elementem <root> <child age= 55 > <subchild>tekst1</subchild> <subchild>tekst2</subchild> </child> </root> XML posiada też atrybuty Źródło: http://www.w3schools.com 9

XML Dokument jest poprawny składniowo (ang. well-formed), jeżeli jest zgodny z regułami składni XML. Np. w odróżnieniu od HTML'a XML wymaga domykania znaczników Posiada tag główny (root) Poprawny składniowo nie zawsze oznacza poprawny strukturalnie Dokument jest poprawny strukturalnie (ang. Valid) jeżeli jest poprawny składniowo oraz zgodny z definicją dokumentu. tzn. dodatkowymi regułami określonymi przez użytkownika. Do tego celu służy język DTD. Źródło: wikipedia 10

XML - składnia Wszystkie elementy muszą mieć tag zamykający, nie poprawne jest np. <p>paragraf <p>drugi paragraf poprawny zapis to: <p>paragraf poprawny</p> Trzeba zauważyć że deklaracja <?xml version="1.0" encoding="utf-8"?> nie jest częścią dokumentu XML więc nie jest błędem że nie posiada domknięcia Tagi XML rozróżniają wielkość liter <tag> oraz <Tag> to dwa różne tagi. Źródło: 11 http://www.w3schools.com

XML - składnia Tagi muszą być poprawnie zagnieżdżone <b><i>nie poprawnie</b></i> tak można w HTMLu <b><i>poprawnie</i></b> Wszystkie dokumenty XML muszą mieć główny tag będący rodzicem wszystkich innych tagów (root) XML nie scala białych znaków Źródło: 12 http://www.w3schools.com

XML - składnia Niektóre znaki są kluczowe (podmioty, ENTITIES) w składni XML i trzeba zastąpić innymi: <wzor> 1+3 < 5 </wzor> źle, parser < rozpoznał by jako nowy tag. <wzor> 1+3 < </wzor> dobrze < < > > & & " " &apos; ' Źródło: 13 http://www.w3schools.com

XML - elementy Element to wszystko od tagu początkowego do tagu końcowego, łącznie z tymi tagami Elementy mogą zawierać inne elementy, tekst lub jedno i drugie. Elementy są rozszerzalne. Jeżeli autor dokumentu XML doda kilka elementów to aplikacja która obsługiwała poprzednią wersję dokumentu powinna nadal działać. Owszem może ewentualnie nie wyświetlić pewnych danych ale nie powinna się wywalić. Źródło: 14 http://www.w3schools.com

Nazewnictwo XML - elementy Dobre rady Mogą zawierać liczby, cyfry i inne znaki Nie mogą zaczynać się od cyfry czy znaku interpunkcyjnego Nie mogą zaczynać się od liter XML Xml xml itp. Nie mogą zawierać spacji Nazwy powinny być krótkie i treściwe Raczej unikać znaków (minus) gdyż inne programy mogą interpretować to jako odejmowanie Unikać. (kropek) inne programy czasami interpretują to jako oddzielenie metody od obiektu : (dwukropek) używany jest przy przestrzeniach nazw Pomimo pełnej obsługi polskich znaków w standardzie XML czasami możemy mieć problemy w programach które nie wspierają w pełni XML'a Źródło: 15 http://www.w3schools.com

XML - składnia Elementy mogą zawierać atrybuty Atrybuty tagów muszą być w cudzysłowach lub apostrofach ' <info data=10.11.2008> źle </info> <info data= 10.11.2008 >dobrze </info> Jeżeli w atrybucie ma wystąpić cudzysłów to można to zrealizować na dwa sposoby <info atr=' to jest cytat jakis'> <info atr= to jest "cytat" jakis > Źródło: 16 http://www.w3schools.com

Elementy a atrybuty Mimo iż zapis oraz XML - składnia <osoba wiek="20"> <imie>jan</imie> <nazwisko>kowalski</nazwisko> </osoba> <osoba> <wiek>20</wiek> <imie>jan</imie> <nazwisko>kowalski</nazwisko> </osoba> Zawiera takie same dane i w stosowaniu atrybutów panuje pewna dowolność, bardziej eleganckim wydaje się stosowanie ich tylko jako identyfikatorów rekordu Źródło: 17 http://www.w3schools.com

DTD Definicja Typu Dokumentu rodzaj dokumentu definiujący formalną strukturę dokumentów HTML, XML, XHTML lub innych z rodziny SGML. Mogą być zawarte w dokumencie który definiują lub w osobnym pliku zwykle z rozszerzeniem dtd. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE ksiazka-telefoniczna [ <!ELEMENT ksiazka-telefoniczna (osoba*)> <!ATTLIST ksiazka-telefoniczna kategoria CDATA "domyslny"> <!ELEMENT osoba (imie,nazwisko,telefon)> <!ATTLIST osoba charakter CDATA "lagodny"> <!ELEMENT imie (#PCDATA)> <!ELEMENT nazwisko (#PCDATA)> <!ELEMENT telefon (#PCDATA)> ]>... Źródło: wikipedia 18

DTD XML z punktu widzenia DTD składa się z: Elementów [ELEMENTS] Atrybutów [ATTRIBUTES] Encji/podmiotów [ENTITIES] Danych znakowych parsowanych [PCDATA] Danych znakowych nie parsowanych [CDATA] Źródło: http://www.w3schools.com/ 19

DTD kilka przykładów <!ELEMENT br EMPTY> - pusty element <br/> <!ELEMENT nasz-element1 (#PCDATA)> - zdefiniowanie elementu naszelement1 który zawiera dane parsowane <!ELEMENT nasz-element2 ANY> - zdefiniowanie elementu nasz-element2 który może zawierać dowolne elementy lub dane. <!ELEMENT nasz-element3 (dziecko1,dziecko2)> - element o nazwie naszelement3 który ma 2 i tylko 2 elementy dziecko1 i dziecko2 <!ELEMENT nasz-element4 (dziecko1?,dziecko2*,(dziecko3 dziecko4)+)> - element o nazwie nasz-element4 który ma 1 lub 0 elementów dziecko1, dowolną ilość elementów dziecko2 i wystąpienie przynajmniej jednego elementu dziecko3 lub dziecko4 <!ELEMENT nasz-element5 (dziecko1 dziecko2 #PCDATA)*) element o nazwie nasz-element5 który może mieć dowolną ilość elementów dziecko1 lub dziecko2 lub dane parsowane. Źródło: 20 http://www.w3schools.com

DTD atrybuty <!ATTLIST nazwa-elementu nazwa-atrybutu typ-atrybutu wartoscdomyslna> CDATA wartością są znaki (en1 en2..) - wartość atrybutu musi być jedna z listy ID wartość jest unikalnym identyfikatorem IDREF wartość jest identyfikatorem innego elementu (referencja) IDREFS wartość to lista innych identyfikatorów NMTOKEN wartością jest poprawna nazwa XML NMTOKENS wartościami są poprawne nazwy XML ENTITY wartością jest encja/podmiot ENTITIES wartościami są encje/podmioty NOTATION wartością jest notacja Xml: wartością jest predefiniowana wartość XML Źródło: 21 http://www.w3schools.com

DTD atrybuty Wartości domyślne atrybutów mogą być następujące: Value domyślna wartość #REQUIRED atrybut jest wymagany #IMPLIED atrybut nie jest wymagany #FIXED value atrybut ma ustaloną wartość Np. <!ATTLIST kwadrat szerokość CDATA "0"> <!ATTLIST osoba numer CDATA #REQUIRED> <osoba numer="5677" /> poprawny xml <osoba /> nie poprawny xml <!ATTLIST platnosc typ (czek gotowka) "gotowka"> - przykład atrybutu z listą wyboru z domyślną wartością Źródło: 22 http://www.w3schools.com

DTD encje/podmioty Skróty, standardowego tekstu, lub specjalnych znaków <!ENTITY pisarz "Jan Kowalski."> <!ENTITY copyright "Kowalski i Spółka"> W XMLu wyglądało by to np. tak: <author>&autor;&copyright;</author> Źródło: 23 http://www.w3schools.com

XML <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="transformacja.xslt"?> <!DOCTYPE ksiazka-telefoniczna SYSTEM "definicja.dtd"> <ksiazka-telefoniczna kategoria="bohaterowie"> <!-- komentarz --> <osoba charakter="dobry"> <imie>adam</imie> <nazwisko>miauczynski</nazwisko> <telefon>123-456-789</telefon> </osoba> <osoba charakter="zly"> <imie>alojzy</imie> <nazwisko>markowski</nazwisko> <telefon/> </osoba> </ksiazka-telefoniczna> 24

CSS Jedną z opcji prezentacji danych XMLowych jest zastosowanie arkusza styli CSS Cascading Style Sheets język służący do opisu formy prezentacji (wyświetlania) stron WWW Jest to lista dyrektyw (tzw. reguł) ustalających w jaki sposób ma zostać wyświetlana przez przeglądarkę internetową zawartość wybranego elementu (lub elementów) (X)HTML lub XML. Źródło: wikipedia 25

CSS Składa się zwykle z selektora cechy i wartości np. table { border: thin solid #0000FF; } Źródło: wikipedia 26

CSS Przykład pliku styl.css osoba { display: block; margin-bottom: 30pt; margin-left: 0; border-right: blue thin solid; border-top: blue thin solid; font-weight: bold; font-size: large; border-left: blue thin solid; color: silver; border-bottom: blue thin solid; font-style: italic; font-family: Arial; background-color: black; } imie, nazwisko { display: block; color: yellow; margin-left: 20pt; } telefon { color: #FF00FF; } Źródło: wikipedia 27

CSS Plik adresownik3_z_css.xml <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/css" href="styl.css"?> <!DOCTYPE ksiazka-telefoniczna SYSTEM "definicja.dtd"> <ksiazka-telefoniczna kategoria="bohaterowie"> <!-- komentarz --> <osoba charakter="dobry"> <imie>adam</imie> <nazwisko>miauczynski</nazwisko> <telefon>123-456-789</telefon> </osoba> <osoba charakter="zly"> <imie>alojzy</imie> <nazwisko>markowski</nazwisko> <telefon/> </osoba> <osoba charakter="dobry"> <imie>miś</imie> <nazwisko>uszatek</nazwisko> <telefon>43434343</telefon> </osoba> </ksiazka-telefoniczna> Źródło: wikipedia 28

XSL EXtensible Stylesheet Language Obecnie dzieli się na 4 części: XSLT służy do transformacji dokumentów XML np. Do XHTML'a lub innych dokumentów xmlowych. Xpath służy do nawigowania w dokumentach XML XSL- dawny XSL-FO, słownik opisujący formatowanie XQuery język zapytań. 29

XSLT Tłumaczy tagi XML na XHTML lub inny XML Jest najważniejszą częścią XSL Używa XPath do nawigowanie w dokumentach XML Można dodawać lub zabierać elementy lub atrybuty do lub z wyjściowego pliku Można zmieniać kolejność czy sortować elementy Wykonywać testy i podejmować decyzje które elementy wyświetlić a które ukryć Oraz wiele innych ciekawych operacji 30

XSLT wsparcie Większość przeglądarek internetowych wspiera XML i XSLT Firefox wspiera od wersji 3.0 XML, XSLT i XPath IE wspiera XML, XSLT i XPath od wersji 6 wersja 5 była nie kompatybilna z oficjalną rekomendacją W3C XSL Google Chrome wspiera XML, XSLT i XPath od wersji 1 Opera XML, XSLT i XPath wspiera od wersji 9 Opera 8 wspierała tylko XML+CSS Apple Safari 3 wspiera XML i XSLT 31

XSLT Jak to działa? Podczas procesu transformacji, XSLT używa XPath do zdefiniowania kawałka dokumentu źródłowego który powinien pasować do jednego lub kilku predefiniowanych wzorców. Kiedy wystąpi spasowanie, XSLT przekształca pasującą część źródłową na dokument docelowy, według zadanego wzorca 32

XSLT Tworzymy XSLT Zaczynamy od poprawnej deklaracji typu dokumentu Root element który definiuje że dany dokument jest XSLT to <xsl:stylesheet> lub <xsl:transform> oba są jednoznaczne Poprawną formą zadeklarowanie dokumentu XSLT zgodnego z W3C XSLT jest: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/ 1999/XSL/Transform"> lub <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> 33

XSLT Tworzymy XSLT Zacznijmy od naszego przykładowego XML'a adresownik1.xml Tworzymy plik transformacja1.xslt 34

XSLT <?xml version="1.0" encoding="utf-16"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>moja książka telefoniczna</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">imię</th> <th align="left">nazwisko</th> <th align="left">numer</th> </tr> <xsl:for-each select="ksiazka-telefoniczna/osoba"> <tr> <td> <xsl:value-of select="imie"/> </td> <td> <xsl:value-of select="nazwisko"/> </td> <td> <xsl:value-of select="telefon"/> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> 35

XSLT Podłączamy xslt do xml'a <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="transformacja1.xslt"?> <!DOCTYPE ksiazka-telefoniczna SYSTEM "definicja.dtd"> <ksiazka-telefoniczna kategoria="bohaterowie"> <!-- komentarz --> <osoba charakter="dobry"> <imie>adam</imie> <nazwisko>miauczynski</nazwisko> <telefon>123-456-789</telefon> </osoba> <osoba charakter="zly"> <imie>alojzy</imie> <nazwisko>markowski</nazwisko> <telefon/> </osoba>... 36

XSLT elementy <xsl:template> Posiada atrybut match służący do skojarzenia wzorca z elementem xml. Może też służyć do określenia wzorca całego dokumentu <xsl:template match="/"> / kojarzy root element dokumentu XML Zawartość elementu xsl:template określa fragment HTML'a do zapisania na wyjściu. 37

XSLT elementy <xsl:value-of> Może służyć do ekstraktowania wartości z XML i wstawienia ich do wyjściowego pliku. Posiada atrybut select którego wartością znowu jest XPath określający ścieżkę do elementu XML którego wartość chcemy użyć. Przykładowo <td> <xsl:value-of select="ksiazka-telefoniczna/osoba/imie"/> </td> 38

XSLT elementy <xsl:for-each"> Służy do wskazania wszystkich węzłów o określonej ścieżce Posiada atrybut select, który wskazuje za pomocą XPath węzeł który może występować wiele razy Działa trochę jak pętla w której dla każdego wystąpienia danego elementu wykonuje się kod w jej wnętrzu <xsl:for-each select="ksiazka-telefoniczna/osoba"> <tr> <td> <xsl:value-of select="imie"/> </td> <td> <xsl:value-of select="nazwisko"/> </td> <td> <xsl:value-of select="telefon"/> </td> </tr> </xsl:for-each> 39

XSLT elementy <xsl:for-each"> Możemy też filtrować które elementy mają się znaleźć na liście np: <xsl:for-each select="ksiazka-telefoniczna/osoba[imie='jan']"> Spowoduje to wejście tylko w te elementy gdzie tag imię będzie = Jan Możemy zastosować następujące operatory = (równe)!= (różne) < mniejsze niż > większe niż Przykład transformacja2.xsl 40

XSLT elementy <xsl:sort/> Sortowanie według tego co wskażemy w select Można użyć w elementach xsl:for-each oraz xsl:apply-templates <xsl:for-each select="ksiazka-telefoniczna/osoba[imie!='jan']"> <xsl:sort select="nazwisko"/> <tr> <td> <xsl:value-of select="imie"/> </td> <td> <xsl:value-of select="nazwisko"/> </td> <td> <xsl:value-of select="telefon"/> </td> </tr> </xsl:for-each> Przykład transformacja3.xsl 41

XSLT elementy Sprawdzanie warunku logicznego <xsl:if/> W poniższym przykładzie chcemy wyświetlić wszystkie osoby z wiekiem powyżej 100 <xsl:if test="wiek > 100"> <tr> <td> <xsl:value-of select="imie"/> </td> <td> <xsl:value-of select="nazwisko"/> </td> <td> <xsl:value-of select="telefon"/> </td> </tr> </xsl:if> Przykład transformacja3.xsl 42

XSLT elementy <xsl:choose/> <xsl:when/><xsl:otherwise/> Coś w rodzaju konstrukcji switch/case Wybierane są pewne przypadki w razie nie spełnienia żadnego przetwarzana jest część otherwise <xsl:choose> <xsl:when test="@charakter = 'dobry'"> <tr bgcolor="green">... </tr> </xsl:when> <xsl:when test="@charakter = 'zly'"> <tr bgcolor="red">... </tr> </xsl:when> <xsl:otherwise> <tr bgcolor="yellow"> <td>... </tr> </xsl:otherwise> </xsl:choose> Przykład transformacja3.xsl 43

Zastosuj odpowiedni wzorzec XSLT elementy <xsl:apply-templates/> Opisujemy co ma występować na danym poziomie <xsl:template match="ksiazka-telefoniczna/osoba"> <tr> <xsl:apply-templates select="imie"/> <xsl:apply-templates select="nazwisko"/> <xsl:apply-templates select="telefon"/> <xsl:apply-templates select="wiek"/> </tr> </xsl:template> <xsl:template match="imie"> <td> <xsl:value-of select="."/> </td> </xsl:template> Przykład transformacja4.xsl 44

XSLT i XML narzędzia W Linuxie mamy do dyspozycji dwa przydatne narzędzia związane z xmlem. xmllint służy do parsowania plików xmlowych. Między innymi sprawdza ich poprawność lub formatuje wyjście robiąc odpowiednie wcięcia np: xmllint --format adresownik4.xml >> adresonik4_f.xml xmllint --dtdvalid definicja.dtd adresownik.4.xml xsltproc służy przetworzenia pliku xml zadanym xslt. Np: xsltproc adresownik4.xml -o adresownik.html Z narzędzi komercyjnych można polecić spyxml lub TurboXML 45

LIBXML Wstęp LibXml2 jest biblioteką służącą parsowaniu xml Działa na Linuxie/Unixie Windowsie i jest łatwo przenoszona na inne systemy. Jest napisana praktycznie w czystym Ansi C Istnieje też wrapper do c++ http://libxmlplusplus.sourceforge.net/ 46

LIBXML Instalacja Najprościej zainstalować w postaci paczki linuxowej libxml2 oraz libxml2-devel Można też pobrać źródła lub skompilowane wersje biblioteki ze strony ftp://xmlsoft.org/libxml2/ Istnieją też gotowe wersje dla Windowsa Można pobrać źródła src.rpm następnie wykonać rpm --rebuild libxml(2)-xxx.src.rpm. To powinno wygenerować dwa rpm'y gotowe do zainstalowania 47

LIBXML Kompilacja Jeżeli ktoś chce skompilować sobie bezpośrednio ze źródeł może wykonać to w prosty (pod warunkiem spełnionych zależności) sposób. Rozpakować i przejść do katalogu gunzip -c xxx.tar.gz tar xvf - cd libxml-xxxx Sprawdzić jakie mamy opcje:./configure help Wygenerować i uruchomić make:./configure [dodatkowe opcje] make make install 48

LIBXML Używanie Podczas kompilowania programów z użyciem libxml potrzeba podać ścieżkę do bibliotek i do includów By pobrać dodatkowe flagi kompilatora w tym przypadku jest to ścieżka do includów: xml2-config --cflags By zobaczyć jakie biblioteki powinniśmy dolinkować: xml2-config -libs Ostatecznie polecenie gcc może wyglądać tak: gcc nasz_program.c -o program `xml2- config --cflags` `xml2-config --libs` 49

LIBXML używanie Zacznijmy od zrobienia pliku Makefile: PROGS = przyklad1 CC = gcc CFLAGS = -Wall -ggdb `xml2-config cflags` LIBS = `xml2-config libs` CLEANFILES = core *.o all: $(PROGS) przyklad1: przyklad1.c ${CC} ${CFLAGS} ${INC} -o przyklad1 przyklad1.c {LIBS} clean: rm -f ${PROGS} ${CLEANFILES} 50

LIBXML używanie Piszemy program przyklad.c który na początek tylko wczyta plik xml podany jako parametr. #include <stdio.h> #include <libxml/tree.h> #include <libxml/parser.h> #include <libxml/xmlreader.h> int main (int argc, char **argv) { xmldocptr doc; doc = xmlparsefile (argv[1]); if (doc == NULL) { printf ("Błąd ładowania dokumentu xml: %s\", argv[1]); return (-1); } return 0; } 51

XML używanie Typ xmldocptr jest zdefiniowany następująco: Typedef xmldoc * xmldocptr; Structure xmldoc struct _xmldoc { void * _private : application data xmlelementtype type : XML_DOCUMENT_NODE, must be second! char * name : name/filename/uri of the document struct _xmlnode *children : the document tree struct _xmlnode *last : last child link struct _xmlnode *parent : child->parent link struct _xmlnode *next : next sibling link struct _xmlnode *prev : previous sibling link struct _xmldoc * doc : autoreference to itself End of common p int compression : level of zlib compression int standalone : standalone document (no external refs) } struct _xmldtd * intsubset : the document internal subset struct _xmldtd * extsubset : the document external subset struct _xmlns * oldns : Global namespace, the old way const xmlchar * version : the XML version string const xmlchar * encoding : external initial encoding, if any void * ids : Hash table for ID attributes if any void * refs : Hash table for IDREFs attributes if any const xmlchar * URL : The URI for that document int charset : encoding of the in-memory content actua struct _xmldict *dict : dict used to allocate names or NULL void * psvi : for type/psvi informations int parseflags : set of xmlparseroption used to parse th int properties : set of xmldocproperties for this docume 52

XML używanie Dodajemy poruszanie się po węzłach i odczytanie ich wartości. xmldocptr doc; xmlnodeptr rootelement; xmlnodeptr wezel; wezel = rootelement->xmlchildrennode; while (wezel!= NULL) { printf("nazwa węzła to: %s typ: %d wartość: %s\n",wezel->name,wezel->type,wezel->content); if (wezel->type==1 && wezel->xmlchildrennode!=null) { printf("wartość tego węzła to: %s\n",wezel- >xmlchildrennode->content); } wezel=wezel->next; } Przykład: przyklad2.c przyklad1.xml 53

XML używanie Typ xmlnodeptr zdefiniowany jest następująco: Typedef xmlnode * xmlnodeptr; Structure xmlnode struct _xmlnode { void * _private : application data xmlelementtype type : type number, must be second! const xmlchar * name : the name of the node, or the entity struct _xmlnode * children : parent->childs link struct _xmlnode * last : last child link } struct _xmlnode * parent : child->parent link struct _xmlnode * next : next sibling link struct _xmlnode * prev : previous sibling link struct _xmldoc * doc : the containing document End of common p xmlns * ns : pointer to the associated namespace xmlchar * content : the content struct _xmlattr * properties : properties list xmlns * nsdef : namespace definitions on this node void * psvi : for type/psvi informations unsigned short line : line number unsigned short extra : extra data for Xpath/XSLT 54

XML używanie Typ typy węzłów są podane w typie wyliczeniowym: Enum xmlelementtype { XML_ELEMENT_NODE = 1 XML_ATTRIBUTE_NODE = 2 XML_TEXT_NODE = 3 XML_CDATA_SECTION_NODE = 4 XML_ENTITY_REF_NODE = 5 XML_ENTITY_NODE = 6 XML_PI_NODE = 7 XML_COMMENT_NODE = 8 XML_DOCUMENT_NODE = 9 XML_DOCUMENT_TYPE_NODE = 10 XML_DOCUMENT_FRAG_NODE = 11 XML_NOTATION_NODE = 12 XML_HTML_DOCUMENT_NODE = 13 XML_DTD_NODE = 14 XML_ELEMENT_DECL = 15 XML_ATTRIBUTE_DECL = 16 XML_ENTITY_DECL = 17 XML_NAMESPACE_DECL = 18 XML_XINCLUDE_START = 19 XML_XINCLUDE_END = 20 XML_DOCB_DOCUMENT_NODE = 21 } 55

Odczytanie atrybutów: XML używanie printf("wartość atrybutu atr1 w rootelemencie to: %s \n ", xmlgetprop(rootelement, (xmlchar*) "atr1")); printf("wartość atrybutu atr2 w rootelemencie to: %s \n ", xmlgetprop(rootelement, (xmlchar*) "atr2")); wezel = rootelement->xmlchildrennode; while (wezel!= NULL) { printf("nazwa węzła to: %s typ: %d wartość: %s\n", wezel->name,wezel->type,wezel->content); if (wezel->type==1 && wezel->xmlchildrennode!=null) { printf("wartość tego węzła to: %s\n", wezel->xmlchildrennode->content); printf("wartość atrybutu atr1 w wezle to: %s \n ", xmlgetprop(wezel, (xmlchar*) "atr1")); printf("wartość atrybutu atr2 w wezle to: %s \n ", xmlgetprop(wezel, (xmlchar*) "atr2")); } wezel=wezel->next; } Przykład: przyklad3.c przyklad2.xml 56

XML używanie Tworzenie dokumentu xml: int main (int argc, char **argv) { xmldocptr doc; char *encoding = "ISO-8859-2"; xmlnodeptr rootelement; doc = xmlnewdoc((const xmlchar*)"1.0"); if (doc == NULL) { printf ("Błąd tworzenia dokumentu xml\n"); return (-1); } rootelement = xmlnewdocnode(doc,null,(const xmlchar*)"glowny", const xmlchar*)"tresc"); if (rootelement == NULL) { printf ("Nie utworzono root elementu"); return (-1); } xmldocsetrootelement(doc, rootelement); xmlsaveformatfileenc("wyjsciowy.xml", doc, encoding, 2); return 0; } Przykład: przyklad4.c 57

XML funkcje xmldocptr xmlnewdoc (const xmlchar * version) Tworzy nowy dokument xml'owy version oznacza numer wersji xml zwykle podaje się 1.0 xmlnodeptr xmlnewdocnode (xmldocptr doc, xmlnsptr ns, const xmlchar * name, const xmlchar * content) Doc - Tworzy nowy węzeł w dokumencie wskazanie dokumentu do którego mamy dołączyć tworzony węzeł ns NameSpace (można dać NULL) name nazwa nowego węzła content - zawartość 58

XML funkcje xmlnodeptr xmldocsetrootelement (xmldocptr doc,xmlnodeptr root) Ustawia tzw root element w dokumencie. doc dokument do którego chcemy dołączyć root element. Gdybyśmy chcieli odłączyć można użyć funkcji: xmlunlinknode(root) int xmlsaveformatfileenc (const char * filename, xmldocptr cur, const char * encoding, int format) Zapisuje drzewo dokumentu xmlowego cur do postaci pliku o nazwie filename encoding użyte kodowanie format czy spacje formatujące powinny zostać dodane. 59

XML używanie Tworzenie dokumentu xml: xmlnodeptr wezel; xmlnodeptr wezel2; // xmlattrptr prop; xmldocsetrootelement(doc, rootelement); xmladdchild(rootelement,xmlnewnode(null,(const xmlchar*)"pierwszy")); wezel = xmlnewnode(null,(const xmlchar*)"drugi"); wezel2 = xmlnewtext((const xmlchar*)"tekst drugiego"); //prop = xmlnewprop(wezel,(const xmlchar*)"atr2",(const xmlchar*)"ola"); //xmladdchild(wezel,prop); xmladdchild(wezel,wezel2); xmladdchild(rootelement,wezel); wezel = xmlnewnode(null,(const xmlchar*)"trzeci"); xmlnewprop(wezel,(const xmlchar*)"atr3",(const xmlchar*)"ala"); xmladdchild(rootelement,wezel); wezel2 = xmlnewtextchild(wezel,null,(const xmlchar*)"podwezle", (const xmlchar*)"zawartosc"); xmlsaveformatfileenc("wyjsciowy.xml", doc, encoding, 2); Przykład: przyklad4.c 60

XML funkcje xmlnodeptr xmladdchild (xmlnodeptr parent, xmlnodeptr cur) Dodaje węzeł cur do węzła parrent. Nowy węzeł jest dodawany na końcu. Węzeł cur jest zwalniany. W przypadku gdy drugim parametrem jest atrybut wtedy jest on dodawany Jeżeli atrybut o podanej nazwie istnieje to zostaje on nadpisany. xmlnodeptr xmlnewnode (xmlnsptr ns, const xmlchar * name) Tworzy nowy węzeł ns NameSpace (można dać NULL) name nazwa nowego węzła 61

XML funkcje xmlnodeptr xmlnewtext (const xmlchar * content) Tworzy nowy węzeł tekstowy Content zawartość tekstowa xmlattrptr xmlnewprop (xmlnodeptr node, const xmlchar * name, const xmlchar * value) Tworzy nowy atrybut node węzeł do którego dołączymy atrybut name nazwa nowego watrubutu value wartość nowego watrubutu 62

XML funkcje xmlnodeptr xmlnewtextchild (xmlnodeptr parent, xmlnsptr ns, const xmlchar * name, const xmlchar * content) Tworzy nowy węzeł potomny Dodaje go na końcu listy węzłów u rodzica parent ns oznacza NameSpace (przestrzeń nazw) można dać NULL wtedy nowy węzeł odziedziczy ns po rodzicu name nazwa węzła content jeżeli nie będzie NULL zostanie wstawiony w nowym węźle encje takie jak <, >, czy & zostaną automatycznie zamienione. xmlattrptr xmlnewprop (xmlnodeptr node, const xmlchar * name, const xmlchar * value) 63