XML & XSLT. Programowanie w Javie 2



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

XML Path Language (XPath)

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

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

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

Prezentacja i transformacja

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

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ęzyki formatowania dokumentów strukturalnych. XSL przekształcenia XML-a. XSL a XSLT. XSL części składowe. Zasada działania przekształcenia XSLT

Wprowadzenie do XSLT

XML extensible Markup Language 3

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

Aplikacje internetowe laboratorium XML, DTD, XSL

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

Extensible Markup Language III

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

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

Rodzaje przetwarzania XSLT (1)

Języki i Techniki Programowania II. Wykład 13. TRaX, Applety, Java Security

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

XML extensible Markup Language. część 8

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

Aplikacje internetowe laboratorium XML, DTD, XML Schema, XSL

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

Prezentacja i transformacja

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

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

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 04

Wprowadzenie do technologii XML

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

XML extensible Markup Language. część 6

XML extensible Markup Language. Paweł Chodkiewicz

Prezentacja dokumentów XML

Rola języka XML narzędziem

XML DTD XML Schema CSS

XQuery. XQuery. Przykład. dokument XML. XQuery (XML Query Language) XQuery 1.0: An XML Query Language. W3C Recommendation

I. Dlaczego standardy kodowania mailingów są istotne?

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

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

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

5.14 JSP - Przykład z obiektami sesji Podsumowanie Słownik Zadanie... 86

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

UKŁAD INFORMACJI I POWIĄZAŃ MIĘDZY NIMI W INFORMACJI W SPRAWIE PODATKU LEŚNEGO (IL-1) W FORMACIE DANYCH XML

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

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

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

Podstawy (X)HTML i CSS

Wprowadzenie do standardu XSL

XSLT. Patryk Czarnik. Instytut Informatyki UW. XML i nowoczesne technologie zarzadzania treścia 2007/08

Przedmiot: Grafika komputerowa i projektowanie stron WWW

DTD - encje ogólne i parametryczne, przestrzenie nazw

XML extensible Markup Language. część 3

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

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

XML i nowoczesne technologie zarządzania treścią 2007/08

STRONY INTERNETOWE mgr inż. Adrian Zapała

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

Słowem wstępu. Standard: W3C XPath razem XSLT 1.0. XPath razem z XQuery 1.0 i XSLT 2.0. XPath trwają prace nad XPath 3.

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

Przykładowy dokument XML

Ćwiczenia laboratoryjne nr 8 Podstawy języka XML.

Kurs HTML 4.01 TI 312[01]

Technologie internetowe

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2007/08

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

ECDL/ICDL Web Editing Moduł S6 Sylabus - wersja 2.0

Podstawy JavaScript ćwiczenia

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

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

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

Podstawy XML-a. Zaawansowane techniki programowania

XML i nowoczesne technologie zarządzania treścią

Ministerstwo Finansów

BAZY DANYCH. Dr hab. Sławomir Zadrożny, prof. PR

Programowanie internetowe

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

XML w bazach danych i bezpieczeństwie

Aplikacje internetowe. Interfejs użytkownika

Plan prezentacji XSLT. XSLT Ogólna charakterystyka. Drzewo XML. Wstęp. Przedmiot: XML i jego zastosowania. Zagadnienia podstawowe

ABC języka HTML i XHTML / Maria Sokół. wyd. 2. Gliwice, cop Spis treści

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Przykładowy dokument XML

Model semistrukturalny

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

za pomocą: definiujemy:

Przykładowy dokument XML

Elementarz HTML i CSS

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2008/09. Instytut Informatyki UW

HTML DOM, XHTML cel, charakterystyka

Odsyłacze. Style nagłówkowe

O stronach www, html itp..

<meta:wartosc> </meta:identyfikator> <meta:rodzajrelacji>maczesc</meta:rodzajrelacji>

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Wprowadzenie do języka HTML

Witryny i aplikacje internetowe

używane skróty: HTTP - protokół do transferu tekstu, hipertekstu, zbiorów binarnych URL - jednolity lokalizator zasobów

XML extensible Markup Language. część 3

Bazy danych i strony WWW

Michał Bielecki, KNI 'BIOS'

XML extensible Markup Language. część 4

Transkrypt:

XML & XSLT Programowanie w Javie 2

Co to jest XML (1) Rozszerzalny język znaczników, XML = extensible Markup Language Język reguł kodowania drzewiastych struktur danych Opisuje rodziny dokumentów odpowiadających klasie obiektów Przykłady: <?xml version= 1.0 encoding= UTF-8?> <transakcja> <rachunek>99-350</rachunek> <zakup akcji= 100 > <firma rynek= WG >Exbud</firma> </zakup> <sprzedaż akcji= 200 > <firma rynek= NT >Optimus</firma> </sprzedaż> </transakcja>

Co to jest XML (2) <?xml version= 1.0?> <ROWSET> <ROW num= 1 > <FIRMA>Exbud</FIRMA> <OBRÓT>5000000</OBRÓT> </ROW> <ROW num= 2 > <FIRMA>Optimus</FIRMA> <OBRÓT>90000</OBRÓT> </ROW> </ROWSET>

Co to jest XML (3) <?xml version= 1.0?> <raport-po-wypadkowy> Ubezpieczony w <firma-ubezpieczeniowa>pzu</firmaubezpieczeniowa> pojazd marki <marka>warszawa</marka> wpadł na przydrożne drzewo. Ustalone przyczyny wypadku to <przyczyny>nadmierna prędkość, nietrzeźwy kierowca, niesprawne hamulce.</przyczyny> Zadziwiające jest to, że <ofiary>nie było rannych i zabitych</ofiary> </raport-po-wypadkowy>

Co to jest XML (4) Specyfikacja XML 1.0 jest rekomendacją W3C (World Wide Web Consortium) z lutego 1998 Specyfikacja XML opisuje składnię dokumentów XML, tj. określa co to znaczy, że dokument jest dobrze sformowany (well formed) Poprawność formy dotyczy głównie zgodności z drzewowym modelem danych Specyfikacja XML zawiera też składnię opisu typów DTD Data Type Definition Tekst DTD określa rodzinę dokumentów danego typu (podaje dopuszczalne nazwy elementów, sposób ich zagnieżdżania, krotność występowania, itp.) Analizator składni (parser) sprawdza czy dokument jest dobrze sformowany i opcjonalnie poprawny (valid) według wymagań zawartych we wskazanym DTD Poprawność typu dotyczy zgodności z definicją typu danych opisanych w DTD

Co można robić z dokumentami XML Edytować w dowolnych edytorach tekstu Edytować w edytorach XML, które sprawdzają poprawność formy i typu Przesyłać i odbierać w sieci za pośrednictwem standardowych protokołów (np. FTP, SMTP, HTTP). W protokole HTTP: dokument HTML ma zawartość typu text/html obrazek w formacie GIF ma zawartość typu image/gif dokument XML ma zawartość typu text/xml Generować po stronie serwera Używać elementy określone przez obce DTD Budować w programach strukturę drzewa dokumentu XML (infoset) Manipulować zawartością na strukturze drzewa dokumentu za pośrednictwem modelu DOM (Document Object Model) Zapytywać o specyficzne elementy za pośrednictwem wyrażeń języka XPath Transformować na inne dokumenty XML za pomocą języka XSLT (the XML Stylesheet Language for Transformations)

Dlaczego warto stosować technologię XML XML umożliwia tworzenie sieci usług informacyjnych: oddzielenie formy od treści ułatwia wymianę danych standardy e-commerce, e-learning XML upraszcza integrowanie aplikacji: firmy posiadają heterogenne platformy obliczeniowe (sprzęt, systemy operacyjne, bazy danych) XML służy do przenoszenia danych między różnymi systemami typowy scenariusz: aplikacja SAP pobiera dane ze swojej bazy, konwertuje na XML i wysyła do serwera aplikacji w korporacji X; serwer aplikacji stosując odpowiedni arkusz styli XSL dokonuje transformacji XSLT i przesyła dokument XML do serwera bazy Oracle XML upraszcza publikowanie informacji w sieci: obiekty z informacją źródłową (z baz danych, z sieci) mogą być formowane w postać stron danych XML (XML data page) strony danych XML można transformować (XSLT) na postać wymaganą przez odbiorcę (HTML Hypertext Markup Language, WML Wireless Markup Language, SVG Scalable Vector

Tworzenie i walidacja dokumentu XML (1) 10 zasad 1. Rozpoczynaj nowy dokument XML deklaracją XML: <?xml version=1.0?> 2. Definiuj tylko jeden element najwyższego poziomu 3. Twórz właściwe znaczniki otwierające i zamykające dla nowych elementów (z dokładnością do wielkości znaków): <NazwaElementu>...</NazwaElementu> 4. Dodawaj komentarze <!-- komentarz -->; nigdy w ramach zawartości atrybutu lub znacznika 5. Nazwy elementów i własności zaczynaj od litery 6. Wstawiaj własność elementu w jego znacznik otwierający <NazwaElementu atrybut= wartość atrybutu >...</NazwaElementu> 7. Wartości własności otaczaj zawsze parą cudzysłowów lub parą apostrofów 8. Wartości atrybutów mogą zawierać wyłącznie zwykły tekst (nie może to być tekst parsowalny, ze znacznikami czy pod-atrybutami) 9. W tekście elementu pisz zawsze < zamiast znaku (<), > zamiast (>), & zamiast (&), zaś w tekście atrybutu używaj " zamiast ( ) i &apos; zamiast ( ) 10. Puste elementy zapisuj w postaci

Tworzenie i walidacja dokumentu XML (2) Narzędzia weryfikacji formy i typu dokumentu XML: środowiska pracy programisty (np. JDeveloper), programy wywoływane z linii polecenia okna systemowego (np. oraxml), przeglądarki Internetowe (np. IE5 Internet Explorer wersja 5 i następne) Walidacja dokumentu XML: Przykład: Dokument składa się z listy (FAQ-List) często zadawanych pytań FAQ. Element FAQ składa się z listy par pytanie-odpowiedź, tj. Question-Answer, a także ma dwie własności: email pytającego (Submitter) oraz stwierdzony poziom trudności zadanego pytania (Level). Treść pytania i odpowiedzi ma typ tekstowy z możliwością wstawiania całostek zastępczych, np. < Typ takiego dokumentu można opisać w pliku FAQ-List.dtd: <!ELEMENT FAQ-List (FAQ+)> <!ELEMENT FAQ (Question, Answer)+> <!ATTLIST FAQ Submitter CDATA #IMPLIED Level (Beginner Intermediate Advanced) Intermediate > <!ELEMENT Question (#PCDATA )>

Tworzenie i walidacja dokumentu XML (3) Dokument XML by przejść walidację musi zawierać deklarację typu: <!DOCTYPE Nazwa-Typu SYSTEM Nazwa-Pliku-DTD > Przykład dokumentu zgodnego z powyższym DTD: <?xml version= 1.0?> <!DOCTYPE FAQ-List SYSTEM FAQ-List.dtd > <FAQ-List> <FAQ Submitter=sw@elka.pw.edu.pl> <Question>Kiedy przeglądarka IE będzie w pełni wspierać XML+XSLT?</Question> <Answer>Nie wiem. Bill Gates wie.</answer> <FAQ Submitter=ws@elka.pw.edu.pl Level= Advanced > <Question>Kiedy te materiały będą wystawione w Internecie?</Question> <Answer>Wkrótce.</Answer> </FAQ> </FAQ-List>

Modularyzacja dokumentu XML (1) Włączanie ustalonego tekstu <!ENTITY LSM Learning Management System > <!ENTITY wer ver 1.0 > Przykład dokumentu zgodnego z powyższym DTD: <?xml version= 1.0?> <!DOCTYPE FAQ-List SYSTEM FAQ-List.dtd [ <! lokalne definicje --> <!ENTITY LSM Learning Management System > <!ENTITY wersja 1.0 > ]> <FAQ-List> <FAQ Submitter=ws@elka.pw.edu.pl> <Question>Dlaczego &LMS; &wer; nie zawiera lekcji na żywo</question> <Answer>Bo &LMS; &wer; ma szeroki zasięg.</answer> </FAQ>

Modularyzacja dokumentu XML (2) Włączanie zawartości pliku <!ENTITY faq1999 SYSTEM faq-list-1999.xml > <!ENTITY faqweb SYSTEM http://xml.us.oracle.com/faq-listweb > Przykład <?xml version= 1.0?> <!DOCTYPE FAQ-List SYSTEM FAQ-List.dtd [ <!ENTITY faq1999 SYSTEM faq-list-1999.xml > <!ENTITY faqweb SYSTEM http://xml.us.oracle.com/faq-listweb > ]> <FAQ-List> &faq1999; &faqweb; </FAQ-List>

Modularyzacja dokumentu XML (3) Włączanie obcych elementów z innych dokumentów Zbiór nazw (przestrzeń nazw namespace) danego dokumentu XML lub danego elementu X to zbiór wszystkich nazw elementów zawartych w drzewie elementu X oraz nazw ich własności Zbiór nazw identyfikujemy przez globalnie unikatowy identyfikator URI Uniform Resource Identifier Unikatowy identyfikator budujemy przez połączenie URL (Uniform Resource Locator) dla danej domeny adresowej rozszerzony o unikatowy identyfikator w ramach tej domeny Skrót URI definiujemy w znaczniku otwierającym włączany obcy element, np. skrót nms: <obcy xmlns:nms="http://www.mysite.com/obcy > Skrót poprzedza każdą nazwę elementu i atrybutu wziętą z obcego zbioru nazw W elemencie można użyć nazw z kilku zbiorów nazw wtedy każdy zbiór nazw ma swój skrót Gdy element składa się wyłącznie z obcych elementów z kilku zbioru nazw, to jeden z tych zbiorów może mieć pusty skrót, którego

Modularyzacja dokumentu XML (4) Przykład użycia zbioru nazw w arkuszu styli <xsl:stylesheet version= 1.0 xmlns:xsl= http://www.w3.org/1999/xsl/transform > <xsl:output indent= yes /> <xsl:template match= / > <Oscar> <xsl:for-each select= /MovieList/Movie[Award/@From= Oscar ] > <Winner Category="{Award/@Category} > <xsl:value select= @Title /> </Winner> </xsl:for-each> </Oscar> </xsl:template> </xsl:stylesheet>

Wyszukiwanie elementów w języku XPath (1) Wyrażenia języka XPath używane są jako wartość atrybutu select w elementach arkuszy styli XSL XPath działa na drzewie dokumentu określając warunki logiczne filtrujące elementy występujące na ścieżce prowadzącej od korzenia do liścia Elementy z poziomu pierwszego /* Element o nazwie nnn z poziomu pierwszego /nnn Element(y) o nazwie nnn będące bezpośrednim potomkiem elementu mmm mmm/nnn Pełne drzewo /Nazwa-elementu głównego Dowolny element(y) o nazwie nnn //nnn Element bieżący. Element ojcowski.. Element(y) o nazwie nnn znajdujące się w poddrzewie względem bieżącego elementu.//nnn Własność o nazwie aaa @aaa Element(y) o nazwie nnn spełniający(e) warunek W //nnn[w]

Wyszukiwanie elementów w języku XPath (2) <MovieList> <Movie Title= American Beauty RunningTime= 121 > <Cast> <Actor Role= Lester Burnham > <Name>Spacey</Name> <Award From= Oscar Category= Best Actor /> </Actor> <Actress Role= Carolyn Burnham > <Name>Bening</Name> <Award From= BAFTA Category= Best Actress /> </Actress> </Cast> <Award From= Oscar Category= Best Film /> <Award From= BAFTA Category= Best Film /> </Movie> <Movie Title= Wiedźmin RunningTime= 125 > <Cast> <Actor Role= Wiedźmin > <Name>Żebrowski</Name> </Actor> <Actress Rola= Queen > <Name>Wiśniewska</Name> </Actress> <Actor Role= Poet > <Name>Zamachowski</Name> <Award From= Jury Category= Best Singer /> </Actor> </Cast> </Movie> </MovieList>

Wyszukiwanie elementów w języku XPath (3) Wszystkie podelementy elementów o nazwie Actor: Zapytanie: /MovieList/Movie/Cast/Actor/* lub równoważnie: //Actor/* Wynik: <Name>Spacey</Name> <Award From= Oscar Category= Best Actor /> <Name>Żebrowski</Name> <Name>Zamachowski</Name> <Award From= Jury Category= Best Tale /> Wszystkie role kobiece: Zapytanie: //Actress/@Role Wynik: Role= Carolyn Burnham Role= Queen

Wyszukiwanie elementów w języku XPath (4) Czas trwania filmów z udziałem Wśniewskiej: Zapytanie: /MovieList/Movie[Cast/Actress/Name= Wiśniewska ]/ @RunningTime Wynik: RunningTime= 125 Obsada w filmach z udziałem Zamachowskiego, których czas trwania jest dłuższy niż 100 minut: Zapytanie: //Movie[Cast/Actor/Name= Zamachowski and @RunningTime>100]/Cast//Name Wynik: <Name>Żebrowski</Name> <Name>Wiśniewska </Name> <Name>Zamachowski </Name> Aktorzy nagrodzeni Oskarem w filmach, które również dostały Oskara: Zapytanie: //Movie[Award/@Category= Best Film ]// Actor[Award/@Category= Best Actor ]/Name/text()

Wyszukiwanie elementów w języku XPath (5) Tytuły filmów, które otrzymały co najmniej dwie nagrody Zapytanie: //Movie[count(.//Award)>1]/@Title/text() Wynik: American Beauty Tytuły filmów, w których wystąpił aktor lub aktorka o nazwisku rozpoczynającym się na Ż Zapytanie: //Movie[.//Name[starts-with(., Ż )]]/@Title/text() Wynik: Wiedźmin Nazwiska aktorów, którzy nie otrzymali żadnej nagrody: Zapytanie: //Name[count(../Award)=0]/text() lub //Name[not(../Award)]/text() Wynik: Żebrowski Wiśniewska

Wprowadzenie do języka XSLT (1) Język XSLT (XML Stylesheet Transform) to deklaratywny język, którego konstrukcje zdefiniowane w XML otaczają stałe elementu tworzonego dokumentu, a same selekcjonują elementy wejściowego dokumentu XML Typowe konstrukcje to: template, apply-templates, value-of Procesor XSLT przegląda dokument XML w podziale na elementy określone w modelu DOM selekcjonując je według wyrażenia XPath umieszczonego w atrybucie select elementu apply-templates Dla kolejnego elementu modelu DOM, procesor XSLT próbuje znaleźć szablon (template), którego wyrażenie XPath w atrybucie match najbardziej precyzyjnie określa ten element We wnętrzu dobranego szablonu element value-of pozwala skopiować wybrane elementy wejściowego dokumentu XML, do dokumentu wyjściowego, a także rekurencyjnie stosować stosować element applytemplates Rekurencyjny przegląd drzewa dokumentu XML upraszcza zapis skryptu XSLT

Wprowadzenie do języka XSLT (2) Prosty przykład Wejściowy dokument XML: <?xml version= 1.0 ><greeting>hello XML guys</greeting> Arkusz styli dokument XSLT: <xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/xsl/transform version= 1.0 > <xsl:output method= html /> <xsl:template match= / > <html><body><xsl:apply-templates select= greeting /></body></html> </xsl:template> <xsl:template match= greeting > <h1><xsl:value-of select=. /></h1> </xsl:template> </xsl:stylesheet> Wyjściowy dokument HTML: <html><body><h1>hello XML guys</h1></body></html>

Wprowadzenie do języka XSLT (3) Kroki procesora XSLT w przykładzie Greeting 1. Dokument XSLT i XML są parsowane do modelu DOM 2. Korzeń drzewa XML staje się bieżącym kontekstem 3. Procesor stosuje szablon z match= / generują się znaczniki otwierające html i body 4. W wyniku konstrukcji apply-templates procesor wybiera jako kontekst element(y) /greeting 5. Procesor stosuje szablon z match= greeting generuje się otwarcie znacznika h1 6. Procesor stosuje konstrukcję value-of do bieżącego elementu greeting generuje się tekst Hello XML guys 7. Generuje się zamknięcie znacznika h1 8. Procesor rekurencyjnie wraca do dokończenia szablonu z match= / generują się znaczniki zamykające body oraz html

Wprowadzenie do języka XSLT (4) Typowa postać dokumentu XSLT Element stylesheet określa zbiór nazw xsl oraz wersję XSLT Element output definiuje typ dokumentu wyjściowego w atrybucie method, np. html, xml, text Szablony template określają transformacje na dopasowanym zbiorze elementów dokumentu wejściowego

Wprowadzenie do języka XSLT (5) Szablony wbudowane (mają niższy priorytet!): szablon dla dowolnego elementu i korzenia: <xsl:template match= * / ><xsl:applytemplates/></xsl:template> szablon dla dowolnego trybu: <xsl:template match= * / mode= x ><xsl:applytemplates mode= x /></xsl:template> Szablon kopiujący węzły tekstowe i atrybutowe na wyjście <xsl:template match= text() @* ><xsl:value-of select=. /></xsl:template> Szablon dla komentarzy i instrukcji przetwarzających <xsl:template match= comment() processinginstruction() /> Szablon dla węzła zbioru nazw <xsl:template match= namespace() />

Wprowadzenie do języka XSLT (6) Elementy najwyższego poziomu include oraz import włącza inny arkusz z niższym priorytetem w przypadku import strip-space oraz preserve-space określa w atrybucie elements listę elementów wejściowych dla których pomija się lub zachowuje się spacje key określa nazwę indeksu, indeksowane elementy i atrybut indeksujący variable zmienna, która ma nadawaną wartość tylko raz param globalny parametr, który można ustawiać z zewnątrz decimal-format określa format zapisu wartości liczbowych i przypisuje mu nazwą, na którą może powołać się funkcja format-number() attribute-set nadaje nazwę grupie atrybutów namespace-alias zastępcza nazwa dla zbioru nazw (zwykle używana, gdy jeden arkusz styli generuje inny arkusz styli)

Przykład Zespoły dokument artists.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE artists SYSTEM "artists.dtd" [ <!ENTITY depeche SYSTEM "entities/depeche.ent"> <!ENTITY front SYSTEM "entities/front.ent"> <!ENTITY u2 SYSTEM "entities/u2.ent"> <!ENTITY dire SYSTEM "entities/dire.ent"> <!ENTITY cure SYSTEM "entities/cure.ent"> ]> <?xml-stylesheet type="text/xsl" href="artists.xsl"?> <artists> <band> &depeche; </band> <band> &front; </band> <band> &u2; </band> <band> &dire; </band> <band> &cure; </band> </artists>

Przykład Zespoły dokumenty cure.ent, dire.ent <name>the Cure</name> <album><title>the Top</title></album> <album><title>mixed Up</title></album> <album><title>bloodflowers</title></album> <album><title>pornography</title></album> <image uri="img/cure.jpg"/> <link url="http://www.thecure.com"/> <name>dire Straits</name> <album> <title>alchemy</title> <year>1984</year> </album> <album> <title>making Movies</title> <year>1980</year> </album>

Przykład Zespoły dokument DTD artists.dtd <?xml version="1.0" encoding="utf-8"?> <!ELEMENT artists (band+)> <!ELEMENT band (name, album*, image?, link?)> <!ELEMENT name (#PCDATA)> <!ELEMENT album (title, year*)> <!ELEMENT image EMPTY> <!ATTLIST image uri CDATA #REQUIRED> <!ELEMENT link EMPTY> <!ATTLIST link url CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT year (#PCDATA)>

Przykład Zespoły dokument XSL artists.xsl (1) <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:fo="http://www.w3.org/1999/xsl/format"> <xsl:template match="/"> <html> <head> <title>moje ulubione zespoły</title> <style type="text/css"> body {font-family: Verdana, Arial, Helvetica, sans-serif; background-image: url(img/tlo.gif);} td {font-size:11px;} h1 {font-size:16px; font-style : italic; color: #cc0000} a:link, a:visited, a:active {text-decoration:none; color:#000000; fontweight:bold;} a:hover {text-decoration:underline; color:#000000; font-weight:bold;} </style> </head> <body> <blockquote> <h1>to są moje ulubione zespoły, wraz z krótkimi opisami.</h1><br/> <xsl:apply-templates/> </blockquote> </body> </html> </xsl:template>

Przykład Zespoły dokument XSL artists.xsl (2) <xsl:template match="band"> <br/> <table border="0" cellpadding="3" cellspacing="1" width="450"> <tr> <td valign="top"> <font size="+1" color="#006600"><xsl:apply-templates select="name"/></font> <br/><br/> <xsl:apply-templates select="link"/> </td> <td><xsl:apply-templates select="image"/></td> <tr><td colspan="2">najciekawsze płyty:<hr size="1" noshade="noshade"/></td></tr> </tr> <xsl:apply-templates select="album"> <xsl:sort select="year"/> </xsl:apply-templates> </table> <br/> </xsl:template>

Przykład Zespoły dokument XSL artists.xsl (3) <xsl:template match="band/link"> link do oficjalnej strony:<br/> <a target="_blank" href="{@url}"><xsl:value-of select="@url"/></a> </xsl:template> <xsl:template match="band/image"> <img alt="img" style="float:right" align="right" src="{@uri}"/> </xsl:template> <xsl:template match="band/album"> <tr> <td width="300"><xsl:apply-templates select="title"/></td> <td ><xsl:apply-templates select="year"/></td> </tr> <tr><td colspan="2"></td></tr> </xsl:template> </xsl:stylesheet>

XPath dodatkowe wiadomości * wybiera z bieżącego kontekstu tylko elementy @* wybiera z bieżącego kontekstu tylko atrybuty xxx:* wybiera z bieżącego kontekstu wszystkie elementy, których skrót dla zbioru nazw równa się xxx @xxx:* wybiera z bieżącego kontekstu wszystkie atrybuty dla elementów, których skrót dla zbioru nazw równa się xxx node() wybiera wszystkie rodzaje węzłów z bieżącego kontekstu Wyrażenie movie//actor jest równoważne movie/descendant::actor Axes (osie) : child, parent, self, attribute, ancestor, ancestoror-self, descendant, descendant-or-self, preceding-sibling, following-sibling, preceding, following, namespace Typy wyrażeń XPath: node-set, boolean, number, string

Zdania kontrolne element if W atrybucie test wyrażenie XPath określa warunek, przy którym szablon zawarty w elemencie if będzie stosowany Przykład: <xsl:if test= count(award) > 1 >...</xsl:if> Konwersje wartości wyrażeń XPath do wartości logicznej: liczba różna od zera, niepusty zbiór węzłów, niepusty string konwertują się na true Przykład: <xsl:if test= $x >...</xsl:if> Wartość zależy od wartości zmiennej x. Przykład: <xsl:if test= true() >...</xsl:if> Test jest zawsze prawdziwy. Przykład: <xsl:if test= true >...</xsl:if> Prawdziwość testu zależy od tego czy są w bieżącym kontekście

Zdania kontrolne element choose (1) Element choose składa się z sekwencji elementów when zakończonej opcjonalnie elementem otherwise Procesor wylicza wartości logiczne atrybutu test w kolejnych elementach when. Stosowany jest szablon z pierwszego prawdziwego elementu when. Jeśli wszystkie są fałszywe, to stosuje się szablon z elementu otherwise, a gdy go nie ma, to nie wybiera się żadnego szablonu. Przykład: Elementy xxx mają być rozmieszczone w wierszu tabeli html. Jeśli atrybut zarobki ma wartość mniejszą niż 200, to wiersz ten ma tło bgcolor=lavender. W przeciwnym razie wiersze mają tło przydzielane cyklicznie z listy: papayawhip, mintcream, whitesmoke. <xsl:template match= xxx > <tr> <xsl:attribute name= bgcolor > <xsl:choose>...</xsl:choose> </xsl:attribute> <xsl:apply-templates select= * /> </tr>

Zdania kontrolne element choose (2) <xsl:choose> <xsl:when test= @zarobki > 200 > <xsl:text>lavender</xsl:text> </xsl:when> <xsl:when test= position() mod 3 = 0 > <xsl:text>papayawhip</xsl:text> </xsl:when> <xsl:when test= position() mod 3 = 1 > <xsl:text>mintcream</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>whitesmoke</xsl:text> </xsl:otherwise> </xsl:choose>

Zdania kontrolne element for-each (1) Element for-each ma atrybut select, którego wartość jest wyrażeniem XPath określającym zbiór elementów. Procesor stosuje szablon zawarty w elemencie for-each dla każdego elementu z wybranego zbioru Przykład: Kurs składa się z modułów. Moduł składa się ze slajdów. Każdy z tych elementów posiada atrybut tytuł. Chcemy ułożyć spis rzeczy kursu. Przykładowy dokument XML: <course title= OPA >... 6 wcześniejszych modułów <module title= XSLT > <slide title= Wprowadzenie >...</slide> <slide title= Przykład Zespoły >...</slide> <slide title= XPath >...</slide> <slide title= Zdania kontrolne >...</slide>... </module>... </course>

Zdania kontrolne element for-each (2) Fragment arkusza styli tworzący spis rzeczy <xsl:template match= course > <xsl:for-each select= module > <h1> <xsl:text>moduł </xsl:text> <xsl:value-of select= position() /> <xsl:text>. </xsl:text> <xsl:value-of select= @title /> </h1> <ul> <xsl:for-each select= slide > <li> <xsl:value-of select= position() /> <xsl:text>. </xsl:text> <xsl:value-of select= @title /> </li> </xsl:for-each> </ul> </xsl:for-each> </xsl:template>

Zdania kontrolne elementy call-template, param, with-param (1) Element call-template w atrybucie name określa nazwę szablonu, który należy zastosować: <xsl:call-template name= nazwa_szablonu /> Nazwa szablonu jest nadawana jako wartość atrybutu name w elemencie template: <xsl:template name= nazwa_szablonu > Dwa szablony o identycznym warunku XPath można rozróżnić atrybutem mode, tj. można dokonać transformacji tej samej części dokumentu wielokrotnie dla różnych trybów <xsl:template match= / mode= nazwa_trybu > Szablon może mieć swoje parametry, których nazwy ustala się w elementach podległych o nazwie param: <xsl:template name= obliczpole > <xsl:param name= h /> <xsl:param name= w /> <xsl:value-of select= $h * $w /> </xsl:template>

Zdania kontrolne elementy call-template, param, with-param (2) Domyślną wartość parametru możemy nadać na dwa sposoby: przez atrybut select: <xsl:template name= addcelltotable > <xsl:param name= bgcolor select= blue /> <xsl:param name= width select= 200 /> <xsl:param name= content /> <td width= {$width} bgcolor= {$bgcolor} > <xsl:apply-templates select= $content /> </td> </xsl:template> przez zawartość: <xsl:param name= width > 200 </xsl:param>

Zdania kontrolne elementy call-template, param, with-param (3) Przekazywanie parametru realizuje element with-param podległy elementowi call-template: <xsl:call-template name= obliczpole > <xsl:with-param name= w select= 100 /> <xsl:with-param name= h select= 200 /> </xsl:call-template> Parametry template muszą wystąpić na początku template Parametr bez atrybutu select i bez zawartość jest tekstem pustym (string długości zero) Element param, którego rodzicem jest stylesheet jest globalny, a więc można go używać w dowolnym szablonie Globalne parametry można ustawiać z linii polecenia: Xalan... param basecolor magenta; Oracle... basecolor= magenta z programy Javy w interfejsie TrAX:

Zdania kontrolne elementy call-template, param, with-param (4) //... Transformer t=(transformerfactory.newinstance()). newtransformer(new StreamSource(xslID)); //... t.setparameter( basecolor, magenta ); t.setparameter( startx, new Integer(25)); t.transform(new StreamSource(xmlID), new StreamResult(outputID));

Zdania kontrolne element variable Element variable można inicjalizować na trzy sposoby: pusty tekst: <xsl:variable name= width /> przez atrybut select: <xsl:variable name= width select= 50 /> przez zawartość: <xsl:variable name= width > 50 </xsl:variable> Element variable może być używany tylko w ramach elementu rodzicielskiego Użycie zmiennej (tak jak parametru): <td width= {$width} >