Wprowadzenie do XML Tomasz Traczyk ttraczyk@ia.pw.edu.pl http://www.ia.pw.edu.pl/~ttraczyk/
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
Co to jest XML? Extensible Markup Language Metajęzyk umożliwia definiowanie języków znakowania służy do zapisu różnorodnych dokumentów i struktur danych przeznaczony m.in. do użycia w WWW Geneza XML Podzbiór SGML (Standard Generalised Markup Language) Uproszczony przez usunięcie trudnych i niekoniecznych konstrukcji Dostosowany do przetwarzania w WWW
Po co XML? Co zapewnia XML? Możliwość definiowania struktury dokumentu znaczników (tags) Prostotę łatwość opanowania przez użytkowników względnie proste przetwarzanie Łatwość interpretacji dokumentu przez przeglądarki przez człowieka nawet bez definicji struktury dokumentu Możliwość tworzenia połączeń (links) między dokumentami przez sieć
Założenia XML Pierwotne Łatwa wymiana danych i dokumentów między różnymi systemami informatycznymi różnymi społecznościami użytkowników Tworzenie i prezentacja dokumentów reprezentujących różne dziedziny za pomocą ujednoliconego oprogramowania Późniejsze Możliwość definiowania nowych typów dokumentów w oparciu o definicje już istniejące Wymiana danych z możliwie silną kontrolą poprawności typów danych identyfikatorów i odwołań (referencji) Dystrybucja specjalistycznych dokumentów bezpośrednio w WWW Proste i ujednolicone przetwarzanie i wyszukiwanie informacji Łatwy podział dokumentów na części współdzielenie części (także odległych) przez różne dokumenty
Czym jest XML Czym jest XML? Sposobem reprezentowania informacji informacji semistrukturalnej część struktury dobrze określona część zmienna, źle zdefiniowana lub nieistotna np. dokumenty tekstowe danych o dobrze określonej strukturze Reprezentacja ta służyć ma do wymiany informacji niekiedy także do jej składowania Czym nie jest XML? Nowym modelem danych, mogącym wyprzeć np. model relacyjny czy obiektowy. odpowiada modelowi hierarchicznemu łatwemu do wyrażenia za pomocą znakowania wystarczającemu do reprezentowania wielu rodzajów dokumentów niedostatki rekompensuje się zastosowaniem identyfikatorów i referencji do nich Konkurencją dla modeli stosowanych współcześnie w bazach danych (choć może uzupełniać ich możliwości)
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
Dokument w XML Dokument w XML Plik tekstowy Znaczniki początkowe ujęte w znaki < > końcowe ujęte w </ > Budowa dokumentu prolog element główny elementy podrzędne epilog Możliwe użycie łączników (links) Znakowanie znaczeniowe Nie ma predefiniowanych znaczników Znaczniki odzwierciedlają strukturę dokumentu/danych Znacznikom nie jest z góry przypisany sposób prezentacji Do formatowania wizualnego konieczne użycie arkusza stylistycznego (stylesheet)
Dokument w XML przykład <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd"> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty> <przedmiot id="kbd2" wersja="1"> <slowo_kluczowe>bazy danych</slowo_kluczowe> <slowo_kluczowe>oracle</slowo_kluczowe> <konspekt> <czesc_konspektu id="streszczenie"> <P> Monograficzny przedmiot poświęcony bazie danych i narzędziom Oracle. </P> </czesc_konspektu> <czesc_konspektu id="treść przedmiotu"> <P> Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle7 i <I>Oracle8</I> oraz administrowaniem nimi.</p> <P> Przedstawiane są także narzędzia do budowy aplikacji: </P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Dokument w XML przykład <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd"> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty> <przedmiot id="kbd2" wersja="1"> Prolog <slowo_kluczowe>bazy danych</slowo_kluczowe> - Wersja XML (obowiązkowa) i strona kodowa (opcjonalna) <slowo_kluczowe>oracle</slowo_kluczowe> * <konspekt> - Odwołanie do DTD (opcjonalne) <czesc_konspektu id="streszczenie"> - Odwołanie do arkusza stylistycznego (opcjonalne) * <P> Monograficzny przedmiot poświęcony bazie danych i narzędziom Oracle. </P> * Instrukcje przetwarzania </czesc_konspektu> <czesc_konspektu id="treść przedmiotu"> <P> Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle7 i <I>Oracle8</I> oraz administrowaniem nimi.</p> <P> Przedstawiane są także narzędzia do budowy aplikacji: </P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Dokument w XML przykład <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd"> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty> <przedmiot id="kbd2" wersja="1"> <slowo_kluczowe>bazy danych</slowo_kluczowe> <slowo_kluczowe>oracle</slowo_kluczowe> <konspekt> <czesc_konspektu id="streszczenie"> <P> Monograficzny przedmiot Elementypoświęcony bazie danych i narzędziom Oracle. </P> - Element główny dokładnie jeden </czesc_konspektu> - Elementy podrzędne <czesc_konspektu id="treść - Jawne przedmiotu"> zamykanie znaczników <P> Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle7 i <I>Oracle8</I> oraz administrowaniem nimi.</p> <P> Przedstawiane są także narzędzia do budowy aplikacji: </P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Dokument w XML przykład <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd"> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty> <przedmiot id="kbd2" wersja="1"> <slowo_kluczowe>bazy danych</slowo_kluczowe> <slowo_kluczowe>oracle</slowo_kluczowe> <konspekt> <czesc_konspektu id="streszczenie"> <P> Monograficzny przedmiot poświęcony bazie danych i narzędziom Oracle. </P> </czesc_konspektu> Atrybuty <czesc_konspektu id="treść przedmiotu"> - Uzupełniają elementy <P> Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle7 i <I>Oracle8</I> - Wartości oraz ujęte administrowaniem w cudzysłów nimi.</p> <P> Przedstawiane są także narzędzia do budowy aplikacji: </P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
Co może towarzyszyć dokumentowi XML? Definicja dokumentu Arkusze stylistyczne (style-sheets) Określa precyzyjnie składnię dokumentu deklaracje elementów określenie ich poprawnego zawierania i następstwa deklaracje atrybutów elementów definicje typów danych (tylko schematy) definicje encji (tylko DTD) Funkcja określenie sposobu prezentacji dla elementów i atrybutów transformacje (tylko XSL), np. XML HTML XML XML możliwe różne prezentacje tego samego dokumentu w zależności od środowiska Języki DTD (Document Type Definition) schematy (XML Schema) Języki XSL (extensible Style Language) CSS (Cascading Style Sheets)
DTD (Document Type Definition) Rola Definiowanie składni dokumentu XML W XML istnienie DTD jest nieobowiązkowe! Składnia Pochodzi wprost z SGML Nie jest w XML nie można użyć narzędzi XML-owych Zawartość Deklaracje elementów Określenie ich poprawnego zawierania i następstwa Deklaracje atrybutów elementów Deklaracje identyfikatorów i odwołań Definicje encji Deklaracje notacji sposób obsługi pewnych formatów danych Sekcje warunkowe Podobna koncepcyjnie do klasycznych notacji formalnych definicji składni, np. BNF (Backus-Naur Form) Łatwa do opanowania Dostosowana głównie do definiowania struktur dokumentów tekstowych Niedostosowana do definiowania struktur danych: brak definicji typów danych (wszystko jest tekstem) słabo zrealizowane identyfikatory i odwołania
Przykład DTD <!ELEMENT eres_konspekty (przedmiot)+ > <!ELEMENT przedmiot ((slowo_kluczowe)*, konspekt) > <!ELEMENT slowo_kluczowe (#PCDATA) > <!ELEMENT konspekt (czesc_konspektu)+ > <!ELEMENT czesc_konspektu (P UL)+ > <!ELEMENT P (#PCDATA I)* > <!ELEMENT I (#PCDATA) > <!ELEMENT UL (LI)+ > <!ELEMENT LI (#PCDATA) > <!ATTLIST przedmiot id ID #REQUIRED wersja CDATA #IMPLIED > <!ATTLIST czesc_konspektu id ID #REQUIRED >
Przykład DTD, c.d. <!ELEMENT eres_konspekty (przedmiot)+ > <!ELEMENT przedmiot ((slowo_kluczowe)*, konspekt) > <!ELEMENT slowo_kluczowe (#PCDATA) > <!ELEMENT konspekt (czesc_konspektu)+ > <!ELEMENT czesc_konspektu (P UL)+ > <!ELEMENT P (#PCDATA I)* > <!ELEMENT I (#PCDATA) > <!ELEMENT UL (LI)+ > <!ELEMENT LI Definicje elementów (#PCDATA) > - Definiują nazwy elementów <!ATTLIST czesc_konspektu - Określają zawieranie id i następstwo: ID #REQUIRED <!ATTLIST przedmiot? id ID #REQUIRED element opcjonalny > + * wersja CDATA powtórzenia #IMPLIED(obowiązkowe, > opcjonalne) alternatywa - Określają zawartość elementu: #PCDATA tekstowa (Parsed Character Data) EMPTY pusta (tylko znacznik i atrybuty) ANY dowolna
Przykład DTD, c.d. Definicje atrybutów - Definiują nazwy atrybutów - Określają typ atrybutu: <!ELEMENT eres_konspekty CDATA (przedmiot)+ tekstowy (Character Data) > ID identyfikator (unikalny w ramach dokumentu) <!ELEMENT przedmiot ((slowo_kluczowe)*, konspekt) > IDREF referencja <!ELEMENT slowo_kluczowe (#PCDATA) > <!ELEMENT konspekt - Określają obowiązkowość (czesc_konspektu)+ atrybutów: > #REQUIRED obowiązkowy <!ELEMENT czesc_konspektu #IMPLIED (P UL)+ opcjonalny bez wartości > domyślnej <!ELEMENT P #FIXED(#PCDATA I)* ustalony (niezmienny) > <!ELEMENT I - Podają (#PCDATA) > <!ELEMENT UL - wartości (LI)+ domyślne atrybutów opcjonalnych > <!ELEMENT LI - listy dopuszczalnych (#PCDATA) wartości (typy wyliczeniowe) > <!ATTLIST czesc_konspektu id ID #REQUIRED > <!ATTLIST przedmiot id ID #REQUIRED wersja CDATA #IMPLIED >
Encje Encje (jednostki, entities) Rodzaj makrodefinicji Encje ogólne Stosowane do włączania części dokumentu (np. powtarzalnych, z plików zewnętrznych) umieszczania znaków specjalnych w dokumencie Odwołanie do encji ogólnej: &nazwa; Encje predefiniowane: znaki specjalne XLM (tylko!): < > " ' & referencje znakowe, np. (Unicode) Encje zewnętrzne i wewnętrzne Encje wewnętrzne są definiowane w DTD Encje zewnętrzne odwołują się do plików (słowo SYSTEM) Encje parametryczne Wykorzystanie powtarzające się części DTD parametryzacja DTD Do użycia w DTD odwołanie: %nazwa; Definiowane w DTD <!ENTITY % nazwa "tekst"> lub <!ENTITY % nazwa SYSTEM "URL"> Encje definiowane w DTD: <!ENTITY nazwa "tekst"> lub <!ENTITY nazwa SYSTEM "URL">
DTD zewnętrzne i wewnętrzne DTD zewnętrzne Definicja typu umieszczona w osobnym dokumencie Odwołanie do niego w deklaracji DTD Przykład: <!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd"> Nazwa DTD musi być taka sama, jak nazwa elementu głównego dokumentu! DTD wewnętrzne Treść DTD umieszczona w prologu dokumentu Przykład: <!DOCTYPE eres_konspekty [ <!ELEMENT eres_konspekty... > Rozwiązanie mieszane Część DTD w prologu, część w osobnym pliku Zastosowanie np.: do uzupełniania wspólnego DTD lokalnymi definicjami encji do parametryzowania DTD Encji parametrycznej zdefiniowanej w wewnętrznej części mieszanego DTD można użyć do parametryzowania zewnętrznej części DTD Przykład: <!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd" [ <!ENTITY... > ]> <!ELEMENT przedmiot... >... ]>
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw itd. Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
Dokument inne składniki Instrukcje przetwarzania Służą do sterowania aplikacjami przetwarzającymi Składnia <?nazwa_aplikacji atrybuty?> Komentarze Składnia <!-- tekst komentarza --> Zawartość: cokolwiek oprócz -- Nazwy rozpoczynające się od xml zastrzeżone Sekcje CDATA W tekście wewnątrz sekcji CDATA nie są rozpoznawane znaki specjalne XML Stosowane do umieszczania fragmentów zawierających dużo znaków specjalnych Przetwarzanie białych znaków Atrybut predefiniowany xml:space wartość "preserve" powoduje zachowywanie nadmiarowych białych znaków przez programy przetwarzające Składnia <![CDATA[ tekst ]]>
Adresy zasobów Adresy bazowe dla URL Atrybut predefiniowany xml:base ustala URL odniesienia dla odwołań w elemencie, w którym jest określony w elementach podrzędnych pozwala na użycie adresów względnych URI (Unified Resource Identifier) Rozszerzony URL adres sieciowy zapytanie identyfikator fragmentu (XPointer) Lub URN URN (Unified Resource Name) Jednoznaczna nazwa zasobu, bez określania jego lokalizacji Np. urn:oracle-xsql
Motywacja Powstaje wiele słowników dziedzinowych Autorzy dokumentów powinni móc korzystać z wielu słowników i dodawać własne Powstaje ryzyko konfliktów nazw Rozwiązanie przestrzenie nazw (XML namespaces) Nazwy elementów lub atrybutów poprzedzane prefiksem przestrzeni nazw i dwukropkiem Przestrzenie nazw Przykład <eres_konspekty xmlns="http://www.elka.pw.edu.pl/eres" Definiowanie przestrzeni nazw Przez podanie specjalnego atrybutu xmlns:prefiks_przestrzeni Wartość tego atrybutu określa URI przestrzeni nazw URN słownika URL domeny zarządzającej słownikiem Nazwą przestrzeni jest jej URI, a nie prefiks! Przestrzeń zdefiniowana w elemencie nadrzędnym może być wykorzystywana w podrzędnych W jednym dokumencie można użyć wielu przestrzeni nazw xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.elka.pw.edu.pl/eres konspekty.xsd"> Przestrzeń domyślna bez prefiksu Przestrzeń pomocnicza z prefiksem xsi Użycie prefiksu: przed nazwą elementu lub atrybutu
Łączniki XLink łączniki między dokumentami Łączniki znaczniki dowolnie zdefiniowane przez użytkownika mające ustalone w specyfikacji atrybuty z przestrzeni nazw XLink Lokalizatory xlink:href adresy URI mogą zawierać identyfikator fragmentu (XPointer) Typy łączenia xlink:type proste (simple) jak A z HTML złożone (extended), np. z wieloma lokalizatorami Zachowania (behaviors) xlink:show (replace embed new) xlink:actuate (onload onrequest) XPointer adresowanie w dokumencie Adresowanie oparte na kontekście w drzewie elementów W dokumencie nie są konieczne żadne specjalne oznaczenia Używa rozszerzonych wyrażeń XPath do adresowania elementów Możliwe jest wskazanie punktu lub zakresu
Internacjonalizacja Przetwarzanie znaków narodowych Przetwarzanie XML na wejściu i wyjściu wybrane strony kodowe wewnętrzne przetwarzanie w Unicode konwersje wejściu i wyjściu Określenie strony kodowej dokumentu domyślnie UTF-8 każdą inną stronę kodową trzeba koniecznie podać w prologu dokumentu atrybut encoding napotkanie znaku spoza zadeklarowanej strony kodowej powoduje błąd typowe strony kodowe dla języka polskiego: ISO-8859-2 windows-1250 Określenie języka Atrybut predefiniowany xml:lang określa język zawartości elementu Wartości: dwuliterowe skróty ISO-639 (np. pl, en) Może być użyty przy przetwarzaniu, np. do prezentowania tylko informacji w wybranym języku do sterowania przenoszeniem wyrazów w czasie formatowania
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw itd. Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
Poprawność dokumentu w XML Dokument dobrze sformułowany (well-formed) Warunki niepusta zawartość wszystkie konstrukcje poprawne w sensie well-formed (w/g specyfikacji języka) wszystkie konstrukcje rozpoczęte muszą być jawnie zakończone każda konstrukcja zawarta w innej musi być w niej zawarta w całości tylko jedna konstrukcja (element główny) nie zawarta w żadnej innej brak odwołań do niezdefiniowanych encji Nie musi mieć DTD (dokument standalone) Mimo braku DTD może być wyświetlany przez przeglądarki Przeznaczenie: tylko wyświetlanie Dokument prawidłowy (valid) Warunki jest well-formed powiązany z istniejącym DTD lub schematem pełna zgodność zawartości z DTD lub schematem wszystkie konstrukcje poprawne w sensie valid (wg specyfikacji języka) Przeznaczenie: przetwarzanie Do przetwarzania na ogół potrzebny jest dostęp do DTD lub schematu
XML a HTML XML Przeznaczenie metajęzyk służy do definiowania języków Realizacja podzbiór SGML brak predefiniowanych znaczników Składnia element niepusty musi być jawnie zakończony element pusty musi być oznaczony /> wrażliwy na wielkość liter w nazwach elementów i atrybutów wartości atrybutów muszą być ujęte w cudzysłów HTML Przeznaczenie gotowy język służy do zapisu stron WWW Realizacja konkretyzacja SGML zestaw predefiniowanych znaczników Składnia niektóre elementy niepuste nie muszą być zakończone jawnie elementy puste nie muszą być wyróżniane niewrażliwy na wielkość liter wartości atrybutów mogą, ale nie muszą być ujęte w cudzysłów Należy się spodziewać, iż rozwój HTML będzie postępował w kierunku zaostrzenia reguł składni, jak w XML
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw itd. Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Reprezentacja informacji choć tekstowa umożliwia bezstratne odczytanie informacji, dokładną weryfikację poprawności i łatwe dalsze przetwarzanie. Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji XML pozwala zapisać wszelkie informacje, które mogą być wyrażone Uniwersalność tekstowo, w sposób całkowicie niezależny od platformy sprzętowej i Duża siła wyrazu programowej. Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Za pomocą XML można zapisać nawet bardzo złożone struktury informacji. Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Struktura informacji jest łatwa do rozszerzania i dostosowywania, z możliwością wykorzystania struktur wcześniej zdefiniowanych. Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dzięki zastosowaniu arkuszy stylistycznych ten sam dokument może być różnorodnie prezentowany w zależności od potrzeb i możliwości. Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Osiągnięta dzięki prostej i regularnej składni oraz ustandaryzowanym narzędziom. Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dokumenty XML są zrozumiałe dla człowieka, każdy dokument Dostosowanie do specyfiki przetwarzania niesie bowiem w sieci metainformację Web w postaci znaczników sam się Internacjonalizacja opisuje. Ułatwia to posługiwanie się dokumentami, uruchamianie oprogramowania itd. Niewygórowane koszty Względna prostota
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota Szczegółowe rozwiązania XML są dostosowane do przetwarzania w Sieci. Popularne narzędzia internetowe (przeglądarki, serwery aplikacyjne itd.) wyposażono w rozwiązania (parsery, procesory XSL itp.) ułatwiające użycie XML.
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota W XML można używać wielu różnych stron kodowych, a przetwarzanie XML odbywa się wewnętrznie z użyciem Unicode.
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota Jest to standard otwarty, nie wymagający licencji. Do przetwarzania i prezentacji dokumentów XML można użyć standardowego (często darmowego) oprogramowania. Można zatem tworzyć rozwiązania bazujące na XML nie ponosząc wielkich nakładów.
Cechy XML Zalety XML Sformalizowany zapis informacji Uniwersalność Duża siła wyrazu Elastyczność Możliwość zróżnicowanej prezentacji Łatwość przetwarzania Czytelność Dostosowanie do specyfiki przetwarzania w sieci Web Internacjonalizacja Niewygórowane koszty Względna prostota Idea języków znakowania jest powszechnie znana, a nawet zaawansowane rozwiązania są stosunkowo łatwe do zrozumienia.
Cechy XML Główne wady XML Rozwlekłość zapisu Ograniczona wydajność przetwarzania Niedostatki implementacji standardów XML-owych
Cechy XML Decyduje o niej znaczny narzut na znaczniki niosące metainformację. Nie jest to na ogół wadą istotną, np. przy Rozwlekłość zapisu przesyłaniu informacji stosować można kompresję, która jest zwykle bardzo efektywna. Ograniczona wydajność przetwarzania Główne wady XML Niedostatki implementacji standardów XML-owych
Cechy XML Główne wady XML Rozwlekłość zapisu Ograniczona wydajność przetwarzania Niedostatki implementacji standardów XML-owych Wynika zarówno z rozwlekłości plików jak ze stosowania uniwersalnych narzędzi. Dla małych dokumentów ograniczenia wydajności zwykle nie stanowią problemu, dla dokumentów większych stosowanie parserów typu SAX daje na ogół wydajność dostatecznie dobrą.
Cechy XML Główne wady XML Rozwlekłość zapisu Ograniczona wydajność przetwarzania Niedostatki implementacji standardów XML-owych Zwłaszcza niepełna implementacja standardów w przeglądarkach WWW powoduje, że XML nie może wciąż jeszcze być stosowany jako podstawowy język wymiany informacji w sieci Web.
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw itd. Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
Ważniejsze zastosowania XML Tworzenie stron internetowych WWW, WAP, e-biznes B2C Decydujące zalety: uniwersalność, zróżnicowana prezentacja, łatwość przetwarzania, dostosowanie do specyfiki WWW Kluczowe technologie: XSLT Przykłady: XHTML, WML Multimedia Grafika wektorowa, integracja multimediów itp. Decydujące zalety: duża siła wyrazu, dostosowanie do specyfiki WWW Przykłady: SVG, SMIL, Voice-ML Reprezentacja informacji semistrukturalnej Informacje o strukturze zmiennej, słabo ustalonej, częściowo nieistotnej itp. reprezentacja złożonych dokumentów tekstowych zapis w bazach danych Decydujące zalety: sformalizowany zapis, duża siła wyrazu, elastyczność Kluczowe technologie: DTD/XML-Schema, XSLT, XSL-FO
Ważniejsze zastosowania XML Specjalistyczne struktury danych Informacje naukowe, ekonomiczne itp.; specjalistyczne dialekty komunikacja w sferze publicznej struktury ad-hoc Decydujące zalety: sformalizowany zapis, uniwersalność, siła wyrazu, elastyczność, łatwość przetwarzania Kluczowe technologie: DTD/XML-Schema, XSLT Przykłady: MathML, CML Elektroniczna wymiana danych (EDI) Wymiana danych (zwykle przez Internet) między systemami informacyjnymi e-biznes B2B integracja systemów heterogenicznych Decydujące zalety: sformalizowany zapis, siła wyrazu, łatwość przetwarzania, niewygórowane koszty Kluczowe technologie: XML-Schema, DOM/SAX Przykład: XML/EDI, np. ebxml, MS BizTalk
Ważniejsze zastosowania XML Konfiguracja oprogramowania Pliki konfiguracyjne oprogramowania Decydujące zalety: sformalizowany zapis, łatwość przetwarzania, czytelność, prostota Przykład: EJB, XSQL Opis zasobów Protokoły komunikacyjne Protokoły wymiany komunikatów, zdalnego wywoływania procedur itp. Decydujące zalety: sformalizowany zapis, łatwość przetwarzania Przykłady: SOAP, XML-RPC, Web-DAV Deskryptory zasobów sieciowych, oprogramowania itp. Decydujące zalety: sformalizowany zapis, elastyczność, łatwość przetwarzania Przykłady: RDF, WSDL Cechy XML najczęściej istotne dla zastosowań: sformalizowany zapis, łatwość przetwarzania
Aplikacje XML Aplikacje XML = dialekty XML Powszechnego użycia, np. WML, SVG, XHTML Branżowe/specjalistyczne, np. MathML, CML Tworzone ad hoc
Przykłady zastosowań XML EDI (Electronic Data Interchange) XML wydaje się idealnym narzędziem dla elektronicznej wymiany danych czytelny prosty łatwy w przetwarzaniu powszechnie używany Koncepcja XML/EDI: semantyka istniejących standardów EDI składnia XML Wiele propozycji standaryzacyjnych Handel elektroniczny (e-commerce) XML jest bardzo dobrym narzędziem do wymiany danych w handlu elektronicznym proste i łatwe do wykorzystania (darmowe oprogramowanie) wspierane przez wielkich producentów systemów ERP odpowiednie do użycia także przez małe firmy Zastosowania B2C i B2B XML szczególnie cenny w B2B: łatwe dalsze przetwarzanie informacji
EDI przykład Przykład: Projekt komunikatów XML do gromadzenia danych na temat ochrony zdrowia dane o lekach refundowanych szpitalne statystyczne karty choroby RUM i jego rozszerzenia <?xml version="1.0" encoding="windows-1250"?> <!DOCTYPE mz:komunikat SYSTEM "LEK.dtd" > <mz:komunikat xmlns:mz="http://www.mz.gov.pl/csioz/start/xml" typ="lek" wersja="1.00" > <mz:dokument id="xxxidaxprs" nr="xxxidairrs" tryb="c" data="xxxidawurs" > <mz:nadawca > <mz:podmiot typ="0" symbol="xxxida2cvs" /> </mz:nadawca> <mz:odbiorca > <mz:podmiot typ="0" symbol="xxxida2cvs" /> </mz:odbiorca> <mz:sprawozdanie symbol="xxxidav2rs" data="xxxida53rs" > <mz:okres typ="xxxida0ass" rok="xxxidaicss" nr="xxxidasdss" data-od="xxxida2ess" data-do="xxxidakgss" /> <mz:komorka-org regon="xxxida1evs" nr="000" /> </mz:sprawozdanie> <mz:pozycja id="xxxidagnss" tryb="d" > <mz:swiadczenie typ="0" > <mz:zlecenie data="xxxidadyss" >...
XML w analizie systemów informacyjnych Motywacja Dotyczy wczesnych etapów analizy Brak narzędzi, np. typu CASE (jeszcze nie wybrane) Potrzebne modele na ogół bazują na opisie słownym ale powinny być możliwie sformalizowane Potrzebne różne formy prezentacji wyników tabele zestawienia różne przekroje tych samych informacji Potrzebne eleganckie formatowanie raporty drukowane strony WWW Typowe modele Planowanie analizy analiza wymagań plan działań i podział zadań projekt raportu Słowniki pojęć, skrótów, instytucji i osób Wykazy spotkań i notatki z nich (minutes) Budowanie modeli Tworzenie specjalizowanych struktur w XML Wielokrotne użycie struktur z poprzednich projektów struktur uniwersalnych typowych elementów raportów
XML w analizie s.i. przykłady Planowanie zadań analizy systemów informacyjnych Analiza procesów biznesowych do celów eksploracji danych (data mining) sformalizowany spis procesów spis i ocena zasobów danych zależności między danymi a procesami ocena podatności procesów na eksplorację danych Analizy wymagań funkcjonalnych i techniczno-organizacyjnych dla internetowych systemów informacyjnych sformalizowany wykaz wymagań warianty i klasyfikacje projekty systemu promocji eksportu sieci innowacyjnej w dziedzinie nowych technologii portalu samorządu gospodarczego zautomatyzowane tworzenie rankingów
XML w analizie s.i. przykłady, c.d. Zautomatyzowane tworzenie dokumentacji - Zaprojektowanie struktur XML - Wypełnienie struktur treścią - Napisanie arkuszy XSL -formatowanie - zestawienia, wyciągi, rankingi - Przetwarzanie XSL: -XML HTML strony WWW -XML HTML RTF raporty robocze -XML T E X lub FO profesjonalne publikacje <postulat id="tz.o.3"> <nazwa>xml</nazwa> <opis> Język XML pozwala prezentować w WWW informację z zachowaniem jej struktury. Informacja pobrana w tej formie jest wyświetlana w sposób podobny do "zwykłych" stron WWW, ale może być łatwo dalej przetwarzana przez komputery, np. umieszczana we własnych bazach danych odbiorcy. </opis> <wersja ref="rek"> W miarę możliwości informacja z repozytorium &czego; powinna być prezentowana w dwóch wersjach: w HTML oraz w XML. </wersja> <wersja ref="max"> Należy założyć, iż w przyszłości -- w miarę popularyzowania się XML -- do prezentowania danych strukturalnych powinien przede wszystkim stosowany język XML, a nie HTML. <P/> Należy także skłonić dostawców danych, by w przyszłości dostarczali swoje dane w XML. </wersja> </postulat>
Wymiana danych między bazami Użycie XML do integracji baz Przykład 1: Dealer dystrybutor heterogenicznych rozproszonych systemy w tanich technologiach u dealerów duża baza zbiorcza u dystrybutora Przykład 2: Baza konstrukcji detektora ALICE A Large Ion Collider Experiment na LHC (Large Hadron Collider) w CERN konstrukcja wielkiego urządzenia pomiarowego rozproszona baza danych Centralna b.d. w licznych laboratoriach na całym świecie bazy satelickie na oprogramowaniu open source baza centralna na Oracle Satelickie b.d.
Plan prezentacji Co to jest XML Dokument w XML DTD i encje Składniki XML: łączniki, przestrzenie nazw itd. Poprawność dokumentu XML Zalety i wady XML Ważniejsze zastosowania XML Rola i pozycja XML
XML w systemach z bazami danych XML w wymianie danych XML jest bardzo dobrym środkiem wymiany danych między bazami danych łatwy w przetwarzaniu zawiera metadane łatwo rzutować struktury relacyjne na XML łatwa kontrola poprawności Szczególnie cenny w systemach heterogenicznych łatwość transformacji danych XML jako format składowania danych Właściwe rozwiązanie dla danych semistrukturalnych bez bardzo złożonych lub bardzo generycznych struktur relacyjnych Odpowiednie np. dla struktur często zmiennych dokumentów tekstowych z wyraźnie określoną strukturą Składowanie XML w relacyjnych b.d. Pełna strukturalizacja do tabel relacyjnych sztywna łatwe w przeszukiwaniu i przetwarzaniu XML jako tekst (CLOB) elastyczne trudne w przeszukiwaniu i przetwarzaniu Reprezentacja hybrydowa kompromis łączący zalety i wady poprzednich metod Specjalny typ dla XML daje nadzieję na połączenie zalet poprzednich metod Specjalne XML-owe bazy danych Na razie raczej do zastosowań niszowych
Standaryzacja XML Organizacja standaryzacyjna Standaryzacją XML zajmuje się World Wide Web Consortium (W3C) Wydawane są tzw. rekomendacje, stanowiące końcowy wynik procesu standaryzacji Stan prac standaryzacyjnych ważniejsze rekomendacje XML i DTD Extensible Markup Language (XML) 1.0, 1998-2000 Przestrzenie nazw Namespaces in XML, 1999 XML Schema XML Schema Parts 0-2: Primer, Structures, Datatypes, 2001 XSL i FO XSL Transformations (XSLT) 1.0, 1999 XML Path Language (XPath) 1.0, 1999 Associating Style Sheets with XML Documents Version 1, 1999 Extensible Stylesheet Language (XSL) Version 1.0, 2001 Łączniki XML Linking Language (XLink) Version 1.0, 2001
Pozycja i przyszłość XML Pozycja XML Modna technologia Stanowi podstawę wielu innych, intensywnie rozwijanych technologii Prawdopodobnie będzie w przyszłości podstawowym formatem wymiany informacji (także w aplikacjach powszechnego użytku) Prawdopodobnie wyprze HTML z wielu zastosowań Web-owych Pozycja XML wydaje się niezagrożona Przyszłość XML Nowe standardy, np. XQuery Coraz lepsze wsparcie w systemach baz danych Nowe zastosowania: XHTML, systemy biurowe itd.
Drzewa DOM Maciej Zakrzewicz mzakrz@cs.put.poznan.pl http://www.cs.put.poznan.pl/~mzakrz/
Document Object Model (DOM) Document Object Model jest standardem modelowania dokumentów XML przy użyciu struktury drzewa znaczniki XML i ich zawartość są modelowane przez węzły drzewa; zagnieżdżanie znaczników służy za podstawę do konstruowania hierarchii Document Object Model jest wykorzystywany jako forma reprezentacji dokumentów XML w pamięci komputera Transformacja dokumentu XML do postaci Document Object Model jest realizowana automatycznie przez parser DOM Implementacja, adresowanie i przeszukiwanie drzew Document Object Model mogą być realizowane przy użyciu biblioteki DOM API
Przykład struktury drzewa DOM <katalog> <ksiazka isbn="83-7243-134-5"> <tytul>xml krok po kroku</tytul> <cena>43</cena> <autorzy> <autor>michael J. Young</autor> <autor>katarzyna Tryc</autor> </autorzy> <wydawnictwo>read Me</wydawnictwo> <rok>2000</rok> </ksiazka>... </katalog> <ksiazka> <katalog> isbn="83-7243-134-5" <tytul> <cena> <autorzy> <wydawnictwo> <rok> korzeń węzeł elementu XML krok po kroku 43 <autor> <autor> Read Me 2000 węzeł tekstowy węzeł atrybutu Michael J. Young Katarzyna Tryc
W3C DOM API: obiekt Node Obiekt klasy/typu Node reprezentuje węzeł w drzewie DOM (węzeł elementu, węzeł tekstowy, itd.) Atrybuty (W3C) attributes tablica atrybutów węzła childnodes tablica węzłów potomnych firstchild pierwszy węzeł potomny lastchild ostatni węzeł potomny nextsibling prawy węzeł sąsiedni nodename nazwa węzła nodetype identyfikator typu węzła nodevalue wartość węzła parentnode węzeł nadrzędny Metody (W3C) appendchild(n) clonenode(b) haschildnodes() insertbefore(n,n) removechild(n) replacechild(n,n) dołącza nowy węzeł jako ostatni węzeł potomny zwraca kopię węzła z/bez węzłami potomnymi zwraca prawdę, jeżeli węzeł zawiera węzły potomne dołącza nowy węzeł jako węzeł potomny przed wskazanym węzłem usuwa wskazany węzeł potomny zamienia istniejący węzeł potomny z podanym węzłem previoussibling lewy węzeł sąsiedni
W3C DOM API: obiekt NodeList Obiekt klasy/typu NodeList reprezentuje zbiór obiektów typu Node Atrybuty (W3C) length liczba elementów w zbiorze Metody (W3C) item(i) zwraca element i-ty element zbioru
W3C DOM API: obiekt Document Obiekt klasy/typu Document modeluje całe drzewo DOM; wszystkie węzły drzewa są jego potomkami Atrybuty (W3C) Metody (W3C) documentelement doctype element najwyższego poziomu w dokumencie DTD lub XML Schema dla dokumentu createattribute(s) createcomment(s) createelement(s) createtextnode(s) getelementsbytagname(s) tworzy nowy węzeł atrybutu tworzy nowy węzeł komentarza tworzy nowy element tworzy nowy węzeł tekstowy zwraca zbiór węzłów o podanej nazwie
W3C DOM API: obiekt Element Obiekt klasy/typu Element modeluje węzeł reprezentujący znacznik XML Atrybuty (W3C) tagname nazwa węzła Metody (W3C) getattribute(s) getattributenode(s) getelementsbytagname(s) removeattribute(s) removeattributenode(n) setattribute(s,s) setattributenode(n) zwraca wartość podanego atrybutu zwraca węzeł podanego atrybutu zwraca zbiór węzłów o podanej nazwie usuwa wartość podanego atrybutu usuwa podany węzeł atrybutu ustawia nową wartość atrybutu wstawia nowy węzeł atrybutu
W3C DOM API: obiekt Attr i Text Obiekt klasy/typu Attr reprezentuje atrybut znacznika XML w formie tzw. węzła atrybutu; obiekt Attr posiada ogólne atrybuty i metody klasy/typu Node plus poniższe: Atrybuty (W3C) name specified value nazwa atrybutu prawda oznacza, że wartość atrybutu jest ustawiona w dokumencie wartość atrybutu Obiekt klasy/typu Text reprezentuje treść umieszczoną wewnątrz znacznika XML
Implementacja W3C DOM: Java i PL/SQL Wszystkie typy DOM zostały zaimplementowane w języku Java jako interfejsy w pakiecie org.w3c.dom (posiadają nazwy jak w specyfikacji W3C) i jako klasy rzeczywiste w pakiecie oracle.xml.parser.v2 (posiadają nazwy z prefiksem XML) Wszystkie typy DOM zostały zaimplementowane w języku PL/SQL jako obiekty pakietu XMLDOM (posiadają nazwy z prefiksem DOM) i DBMS_XMLDOM (od wersji 9.2 DBMS_XMLDOM zaczyna zastępować XMLDOM)
Java: funkcje konstrukcji drzew DOM createelement(string) [interfejs Document] tworzy nowy węzeł, reprezentujący znacznik o podanej nazwie; węzeł ten nie wchodzi jeszcze w skład drzewa dokumentu createtextnode(string) [interfejs Document] tworzy nowy węzeł tekstowy; węzeł ten nie wchodzi jeszcze w skład drzewa dokumentu appendchild(node) [interfejs Node] dodaje nowy węzeł jako ostatni węzeł potomny clonenode(boolean) [interfejs Node] wykonuje kopię wskazanego węzła wraz z lub bez jego węzłów potomnych removechild(node) [interfejs Node] odpina wskazany węzeł potomny od jego węzła nadrzędnego replacechild(node, Node) [interfejs Node] odpina istniejący węzeł potomny i na jego miejscu umieszcza nowy węzeł potomny setnodevalue(string) [interfejs Node] nadaje węzłowi wartość tekstową
Konstrukcja drzewa DOM w języku Java XMLDocument xmldoc = new XMLDocument(); Node katalognode = xmldoc.createelement("katalog"); xmldoc.appendchild(katalognode); Node ksiazkanode = xmldoc.createelement("ksiazka"); katalognode.appendchild(ksiazkanode); Node tytulnode = xmldoc.createelement("tytul"); ksiazkanode.appendchild(tytulnode); <katalog> <ksiazka> Node tytultext = xmldoc.createtextnode("zaawansowany XML"); tytulnode.appendchild(tytultext); <tytul> <cena> Node cenatext = xmldoc.createtextnode("85"); tytulnode.appendchild(tytultext); Zaawansowany XML 85
PL/SQL: funkcje konstrukcji drzew DOM xmldom.createelement(domdocument, Varchar2) tworzy nowy węzeł, reprezentujący znacznik o podanej nazwie; węzeł ten nie wchodzi jeszcze w skład drzewa dokumentu xmldom.createtextnode(domdocument, Varchar2) tworzy nowy węzeł tekstowy; węzeł ten nie wchodzi jeszcze w skład drzewa dokumentu xmldom.appendchild(domdocument, DOMNode) dodaje nowy węzeł jako ostatni węzeł potomny xmldom.clonenode(domdocument, boolean) wykonuje kopię wskazanego węzła wraz z lub bez jego węzłów potomnych xmldom.removechild(domdocument, DOMNode) odpina wskazany węzeł potomny od jego węzła nadrzędnego xmldom.replacechild(domdocument, DOMNode, DOMNode) odpina istniejący węzeł potomny i na jego miejscu umieszcza nowy węzeł potomny xmldom.setnodevalue(domdocument, Varchar2) nadaje węzłowi wartość tekstową xmldom.makenode(domelement) konwertuje typ DOMElement do DOMNode
Konstrukcja drzewa DOM w języku PL/SQL declare xmldoc xmldom.domdocument; tmpnode xmldom.domnode; katalogelement xmldom.domelement; ksiazkaelement xmldom.domelement; tytulelement xmldom.domelement; cenaelement xmldom.domelement; cenatext xmldom.domtext; tytultext xmldom.domtext; tytulnode xmldom.domnode; cenanode xmldom.domnode; begin xmldoc := xmldom.newdomdocument; katalogelement := xmldom.createelement(xmldoc, 'katalog'); tmpnode := xmldom.appendchild(xmldom.makenode(xmldoc), xmldom.makenode(katalogelement)); ksiazkaelement := xmldom.createelement(xmldoc, 'ksiazka'); tmpnode := xmldom.appendchild(tmpnode, xmldom.makenode(ksiazkaelement)); <katalog> tytulelement := xmldom.createelement(xmldoc, 'tytul'); tytulnode := xmldom.appendchild(tmpnode, xmldom.makenode(tytulelement)); <ksiazka> cenaelement := xmldom.createelement(xmldoc, 'cena'); cenanode := xmldom.appendchild(tmpnode, xmldom.makenode(cenaelement)); tytultext := xmldom.createtextnode(xmldoc, 'Zaawansowany XML'); <tytul> <cena> tmpnode := xmldom.appendchild(tytulnode, xmldom.makenode(tytultext)); cenatext := xmldom.createtextnode(xmldoc, '85'); Zaawansowany tmpnode := xmldom.appendchild(cenanode, xmldom.makenode(cenatext)); XML 85 end;
Java: funkcje nawigacyjne DOM API getdocumentelement() [interfejs Document] zwraca obiekt węzła reprezentującego znacznik najwyższego poziomu getelementsbytagname(string) [interfejs Document] zwraca tablicę obiektów węzłów reprezentujących podany znacznik XML getchildnodes() [interfejs Node] zwraca tablicę obiektów węzłów potomnych (bez węzłow atrybutowych) getattributes() [interfejs Node] zwraca tablicę obiektów potomnych węzłów atrybutowych getnodename() [interfejs Node] zwraca nazwę znacznika dla węzła getnodetype() [interfejs Node] zwraca numeryczny identyfikator typu węzła getnodevalue() [interfejs Node] zwraca treść węzła (tylko dla węzłów tekstowych) getfirstchild() [interfejs Node] - zwraca obiekt pierwszego węzła potomnego (z pominięciem węzłów atrybutowych) getlastchild() [interfejs Node] - zwraca obiekt ostatniego węzła potomnego (z pominięciem węzłów atrybutowych) getnextsibling() [interfejs Node] zwraca obiekt prawego sąsiada węzła (z pominięciem węzłów atrybutowych) getprevioussibling() [interfejs Node] zwraca obiekt lewego sąsiada węzła (z pominięciem węzłów atrybutowych) getparentnode() [interfejs Node] zwraca obiekt węzła nadrzędnego
PL/SQL: funkcje nawigacyjne DOM API xmldom.getdocumentelement(domdocument) zwraca obiekt węzła reprezentującego znacznik najwyższego poziomu xmldom.getelementsbytagname(domdocument) zwraca tablicę obiektów węzłów reprezentujących podany znacznik XML xmldom.getchildnodes(domnode) zwraca tablicę obiektów węzłów potomnych (bez węzłow atrybutowych) xmldom.getattributes(domnode) zwraca tablicę obiektów potomnych węzłów atrybutowych xmldom.getnodename(domnode) zwraca nazwę znacznika dla węzła xmldom.getnodetype(domnode) zwraca numeryczny identyfikator typu węzła xmldom.getnodevalue(domnode) zwraca treść węzła (tylko dla węzłów tekstowych) xmldom.getfirstchild(domnode) - zwraca obiekt pierwszego węzła potomnego (z pominięciem węzłów atrybutowych) xmldom.getlastchild(domnode) - zwraca obiekt ostatniego węzła potomnego (z pominięciem węzłów atrybutowych) xmldom.getnextsibling(domnode) zwraca obiekt prawego sąsiada węzła (z pominięciem węzłów atrybutowych) xmldom.getprevioussibling(domnode) zwraca obiekt lewego sąsiada węzła (z pominięciem węzłów atrybutowych) xmldom.getparentnode(domnode) zwraca obiekt węzła nadrzędnego
DOM API: funkcje nawigacyjne #document D katalog getdocumentelement() E getnodename() książka E... getchildnodes() getattributes() getchildnodes() isbn 14-2887-... A tytul E autorzy E rokwydania E #text T autor E #text T C++ XML 2002 #text T Fabio Arc... getnodevalue() getchildnodes() wydawnictwo E #text Mikom T cena E #text T 36 D DOCUMENT_NODE (9) E ELEMENT_NODE (1) A ATTRIBUTE_NODE (2) T TEXT_NODE (3)
Java: prosta nawigacja w drzewie DOM XMLDocument d e=d.getdocumentelement() c=e.getchildnodes() f=c.item(i) f.getnodename(), f.getnodevalue(), f.getnodetype() Odczytaj węzeł reprezentujący znacznik najwyższego poziomu (np. <katalog>) Pobierz listę elementów potomnych W pętli odczytuj kolejne węzły z listy (np. <ksiazka>) Przetwarzaj węzeł g=f.getchildnodes() Pobierz listę elementów potomnych h=g.item(j)... Odczytaj kolejny węzeł z listy (np. <tytul>,<autorzy>,<cena>,<rok>, <wydawnictwo>)
Java: nawigacja w drzewie DOM getchildnodes() Wyświetl tytuły wszystkich książek opisanych w dokumencie XML XMLDocument xmldoc;... Node docnode = null, booknode = null, elementnode = null; NodeList docnodelist = null, booknodelist = null; try { docnode = xmldoc.getdocumentelement(); docnodelist = docnode.getchildnodes(); for (int i=0; i<docnodelist.getlength(); i++) { booknode = docnodelist.item(i); booknodelist = booknode.getchildnodes(); for (int j=0; j<booknodelist.getlength(); j++) { elementnode = booknodelist.item(j); if (elementnode.getnodename().equals("tytul")) System.out.println(elementNode.getFirstChild().getNodeValue()); }}} catch (Exception e) {System.out.println(e);} Access 2002. Projektowanie baz danych. Księga eksperta Access 2002/XP PL dla każdego ASP.NET. Vademecum profesjonalisty C++ XML Dane w sieci WWW Delphi 6. Praktyka programowania - tom 1,2 Delphi. Almanach...
Java: nawigacja w drzewie DOM getattributes() Wyświetl wartość pierwszego atrybutu każdego znacznika <ksiazka> w dokumencie XML XMLDocument xmldoc;... Node docnode = null, booknode = null, urlnode = null; NodeList docnodelist = null, booknodelist = null; try { docnode = xmldoc.getdocumentelement(); docnodelist = docnode.getchildnodes(); for (int i=0; i<docnodelist.getlength(); i++) { booknode = docnodelist.item(i); urlnode = booknode.getattributes().item(0); System.out.println(urlNode.getNodeValue()); } } catch (Exception e) {System.out.println(e);} 83-7197-669-0 83-7197-786-7 83-7197-691-7 83-7279-215-1 83-7279-149-X 83-7279-214-3 83-7197-469-8 83-7197-377-2...
Java: nawigacja w drzewie DOM getelementsbytagname() Wyświetl tytuły wszystkich książek opisanych w dokumencie XML Access 2002. Projektowanie baz danych. Księga eksperta Access 2002/XP PL dla każdego ASP.NET. Vademecum profesjonalisty XMLDocument xmldoc; C++ XML... Dane w sieci WWW Node titlenode = null; Delphi. Almanach NodeList titlenodelist = null;... try { titlenodelist = xmldoc.getelementsbytagname("tytul"); for (int i=0; i<titlenodelist.getlength(); i++) { titlenode = titlenodelist.item(i); System.out.println(titleNode.getFirstChild().getNodeValue()); } } catch (Exception e) {System.out.println(e);} Delphi 6. Praktyka programowania - tom 1,2
PL/SQL: prosta nawigacja w drzewie DOM DOMDocument d e=getdocumentelement(d) c=getchildnodes(makenode(e)) f=item(c,i) getnodename(f), getnodevalue(f), getnodetype(f) Odczytaj węzeł reprezentujący znacznik najwyższego poziomu (np. <katalog>) Pobierz listę elementów potomnych W pętli odczytuj kolejne węzły z listy (np. <ksiazka>) Przetwarzaj węzeł g=getchildnodes(f) Pobierz listę elementów potomnych h=item(g,j)... Odczytaj kolejny węzeł z listy (np. <tytul>,<autorzy>,<cena>,<rok>, <wydawnictwo>)
PL/SQL: nawigacja w drzewie DOM getchildnodes() Wyświetl tytuły wszystkich książek opisanych w dokumencie XML declare xmldoc xmldom.domdocument; xmlelem xmldom.domelement; booknode xmldom.domnode; booknodelist xmldom.domnodelist; innernode xmldom.domnode; innernodelist xmldom.domnodelist; begin Access 2002. Projektowanie baz danych.... Księga eksperta xmlelem := xmldom.getdocumentelement(xmldoc); Access 2002/XP PL dla każdego booknodelist := xmldom.getchildnodes(xmldom.makenode(xmlelem)); ASP.NET. Vademecum profesjonalisty C++ XML for i in 0..xmldom.getLength(bookNodeList) - 1 loop Dane w sieci WWW booknode := xmldom.item(booknodelist, i); Delphi 6. Praktyka programowania - tom innernodelist := xmldom.getchildnodes(booknode); 1,2 Delphi. Almanach for j in 0..xmldom.getLength(innerNodeList) - 1 loop... innernode := xmldom.item(innernodelist, j); if (xmldom.getnodename(innernode) = 'tytul') then dbms_output.put_line(xmldom.getnodevalue(xmldom.getfirstchild(innernode))); end if; end loop; end loop; xmldom.freedocument(xmldoc);... end;
PL/SQL: nawigacja w drzewie DOM getattributes() Wyświetl wartość pierwszego atrybutu każdego znacznika <ksiazka> w dokumencie XML declare xmldoc xmldom.domdocument; xmlelem xmldom.domelement; booknode xmldom.domnode; booknodelist xmldom.domnodelist; attrnode xmldom.domnode; begin... xmlelem := xmldom.getdocumentelement(xmldoc); booknodelist := xmldom.getchildnodes(xmldom.makenode(xmlelem)); for i in 0..xmldom.getLength(bookNodeList) - 1 loop booknode := xmldom.item(booknodelist, i); attrnode := xmldom.item(xmldom.getattributes(booknode),0); dbms_output.put_line(xmldom.getnodevalue(attrnode)); end loop; xmldom.freedocument(xmldoc);... end; 83-7197-669-0 83-7197-786-7 83-7197-691-7 83-7279-215-1 83-7279-149-X 83-7279-214-3 83-7197-469-8 83-7197-377-2...
declare PL/SQL: nawigacja w drzewie DOM getelementsbytagname() Wyświetl tytuły wszystkich książek opisanych w dokumencie XML xmldoc xmldom.domdocument; titlenode xmldom.domnode; titlenodelist xmldom.domnodelist; begin... titlenodelist := xmldom.getelementsbytagname(xmldoc,'tytul'); for i in 0..xmldom.getLength(titleNodeList) - 1 loop titlenode := xmldom.item(titlenodelist, i); dbms_output.put_line(xmldom.getnodevalue(xmldom.getfirstchild(titlenode))); end loop; xmldom.freedocument(xmldoc);... end; Access 2002. Projektowanie baz danych. Księga eksperta Access 2002/XP PL dla każdego ASP.NET. Vademecum profesjonalisty C++ XML Dane w sieci WWW Delphi 6. Praktyka programowania - tom 1,2 Delphi. Almanach...
Java: konwersja drzewa DOM do pliku XML... try { xmldoc.print(new FileOutputStream("C:\\katalog.xml")); } catch (Exception e) {System.out.println(e);}... <?xml version = '1.0' encoding = 'WINDOWS-1250'?> <katalog> <ksiazka url="http://dot.com/19821.html"> <tytul>c++ XML</tytul> <autorzy> <autor>fabio Arciniegas</autor> </autorzy> <rokwydania>2002</rokwydania> <wydawnictwo>mikom</wydawnictwo> <cena>36</cena> </ksiazka> <ksiazka url="http://dot.com/19854.html">...
PL/SQL: konwersja drzewa DOM do pliku XML... xmldom.writetofile(xmldoc,/mydir/a.xml');... <?xml version = '1.0' encoding = 'WINDOWS-1250'?> <katalog> <ksiazka url="http://dot.com/19821.html"> <tytul>c++ XML</tytul> <autorzy> <autor>fabio Arciniegas</autor> </autorzy> <rokwydania>2002</rokwydania> <wydawnictwo>mikom</wydawnictwo> <cena>36</cena> </ksiazka> <ksiazka url="http://dot.com/19854.html">...
Język XPath Maciej Zakrzewicz mzakrz@cs.put.poznan.pl http://www.cs.put.poznan.pl/~mzakrz/
Język XPath XPath to specyfikacja języka służącego do adresowania, odczytywania i przeszukiwania drzew DOM dokumentów XML XPath odgrywa podobną rolę w stosunku do drzew DOM, jak język SQL w stosunku do relacyjnych baz danych XPath stosuje notację przypominającą ścieżki dostępu w systemach plików Wynikiem ewaluacji wyrażenia XPath jest zbiór węzłów spełniających warunki selekcji XPath pozwala stosować dwa rodzaje zapisu wyrażeń: skrócony i pełny; rodzaje te mogą być mieszane
Przetwarzanie wyrażeń XPath Wyrażenie XPath
Skrócone wyrażenia XPath (1/3) Wybór węzłów w drzewie DOM: wybierz autorów wszystkich książek /katalog/ksiazka/autorzy wybierz wszystkie wydawnictwa dowolnie zagłębione w drzewie //wydawnictwo wybierz wszystkie węzły potomne (dzieci) każdego węzła książka //ksiazka/* Wybór n-tego węzła danego rodzaju: wybierz pierwszego autora każdej książki //autorzy/autor[1] wybierz drugiego autora pierwszej książki //ksiazka[1]//autor[2] wybierz ostatnią książke //ksiazka[last()]
Skrócone wyrażenia XPath (2/3) Wybór węzłów, które posiadają podany węzeł potomny: wybierz książki, które posiadają autorów //ksiazka[autorzy] wybierz książki, które napisał Serge Abiteboul //ksiazka[autorzy/autor="serge Abiteboul"] Alternatywa ścieżek: wybierz tytuły książek i wydawnictwa //tytul //wydawnictwo wybierz tytuły książek napisanych przez Serge'a Abiteboula lub Kurta Walla //tytul[..//autor="serge Abiteboul"] //tytul[..//autor="kurt Wall"]
Skrócone wyrażenia XPath (3/3) Wybór węzłów zawierających atrybuty: wybierz książkę o numerze ISBN "83-7279-149-X" //ksiazka[@isbn="83-7279-149-x"] wybierz wszystkie numery ISBN //@isbn wybierz książki, które posiadają numer ISBN //ksiazka[@isbn] Odczyt treści węzła: odczytaj treści wszystkich tytułów książek //ksiazka/tytul/text()
Pełne wyrażenia XPath Wyrażenie ścieżkowe XPath składa się z tzw. kroków rozdzielonych ukośnikami W pełnym zapisie, każdy z kroków może składać się z: specyfikatora współrzędnych (axis), służącego do określenia miejsca w drzewie, począwszy od którego wyszukiwane będą węzły testu węzła (node test), służącego do określenia, które węzły są wyszukiwane w obszarze drzewa określonym przez specyfikator współrzędnych predykatów, dodatkowo zawężających test węzła, powodujących wybór tylko tych węzłów, które spełniają podany warunek Każdy krok pełnego wyrażenia XPath zapisywany jest przy użyciu następującej notacji: spec_współrzędnych::test_węzła[predykaty]
Specyfikatory współrzędnych ancestor ancestor-or-self attribute child descendant descendant-or-self following following-sibling parent preceding preceding-sibling self obejmuje wszystkie węzły nadrzędne (ojciec, dziadek, itd.) bieżącego węzła obejmuje bieżący węzeł plus wszystkie węzły nadrzędne obejmuje wszystkie atrybuty bieżącego węzła obejmuje wszystkie węzły bezpośrednio podrzędne bieżącego węzła (dzieci) obejmuje wszystkie węzły podrzędne (syn, wnuk, itd.) bieżącego węzła obejmuje bieżący węzeł plus wszystkie węzły podrzędne obejmuje wszystkie węzły, które w dokumencie następują za węzłem bieżącym obejmuje wszystkie węzły sąsiednie, które w dokumencie następują za węzłem bieżącym obejmuje węzeł bezpośrednio nadrzędny bieżącego węzła (ojciec) obejmuje wszystkie węzły, które w dokumencie następują przed węzłem bieżącym obejmuje wszystkie węzły sąsiednie, które w dokumencie następują przed węzłem bieżącym obejmuje bieżący węzeł
Testy węzłów, operatory i funkcje node() text() * @* nazwa dowolny węzeł węzeł tekstowy dowolny element dowolny atrybut węzeł o podanej nazwie =,!=, <, >, <=, >= or, and +, -, *, div, mod count() last() name() position() not() true() false() porównania operatory logiczne operatory arytmetyczne liczba węzłów wybieranych przez wyrażenie liczba porządkowa ostatniego węzła wybieranego przez wyrażenie nazwa węzła wybieranego przez wyrażenie liczba porządkowa węzła wybieranego przez wyrażenie negacja logiczna zwraca prawdę logiczną zwraca fałsz logiczny
Funkcje operujące na tekstach concat() konkatenacja tekstów Funkcje - ciąg dalszy contains() starts-with() string() string-length() substring() substring-after() substring-before() translate() test zawierania tekstów sprawdzenie, czy tekst rozpoczyna się od podanego ciągu konwersja do tekstu długość tekstu ekstrakcja podciągu znaków zwraca ciąg znaków znajdujący się za wycinanym podciągiem zwraca ciąg znaków znajdujący się przed wycinanym podciągiem dokonuje zamiany wszystkich wystąpień podanego podciągu Funkcje operujące na liczbach ceiling() floor() number() round() sum() górne domknięcie całkowite dolne domknięcie całkowite konwersja do liczby zaokrąglenie suma zbioru wartości liczbowych
Przykłady wyrażeń XPath (1/2) Wybierz książki, których cena nie przekracza 20 zł //ksiazka[cena<=20] Wybierz tytuły książek o cenach w przedziale 30-40 zł //ksiazka/tytul[../cena>30 and../cena<40] Wybierz książki napisane przez więcej niż dwóch autorów //ksiazka[count(autorzy/autor)>2] Wybierz co drugą książkę //ksiazka[position() mod 2 = 1] Wybierz książki zawierające w tytule słowo XML //ksiazka[contains(tytul,"xml")] Wybierz autorów o imieniu "Stephen" //autor[starts-with(.,"stephen")] Wybierz tytuły złożone z ponad 20 znaków //tytul[string-length(.)>20]
Przykłady wyrażeń XPath (2/2) Wybierz książki, których numer ISBN spełnia wzorzec ***7197****** //ksiazka[substring(@isbn,4,4) = "7197"] Wybierz wszystkie węzły autorzy oraz wszystkie ich węzły potomne //autorzy/descendant-or-self::* Wybierz wszystkie książki, które w dokumencie znajdują się za książką o numerze ISBN "83-7197-786-7" //ksiazka[@isbn="83-7197-786-7"]/following::ksiazka Wybierz wszystkie atrybuty pierwszej książki //ksiazka[1]/attribute::* Wybierz cenę książki pt. "XML dla każdego" //ksiazka[tytul="xml dla każdego"]/child::cena
Transformacja wyrażeń skróconych do pełnych skrócone brak @... // pełne child:: attribute:: self::node() parent::node() /descendant-orself::node() przykład //ksiazka/cena => //ksiazka/child::cena //katalog/ksiazka[@isbn= "83-7197-786-7"] => //katalog/child::ksiazka[attribute::isbn= "83-7197-786-7"] //tytul[string-length(.)>10] => //tytul[string-length(self::node())>10] //autor/.. => //autor/parent::node() //tytul => /descendant-or-self::node()
Funkcje XPath w DOM API Java selectnodes(string) [interfejs Node] zwraca tablicę obiektów węzłów spełniających podaną ścieżkę XPath selectsinglenode(string) [interfejs Node] zwraca pierwszy znaleziony obiekt węzła spełniającego podaną ścieżkę XPath valueof(string) [interfejs Node] zwraca treść pierwszego znalezionego obiektu węzła spełniającego podaną ścieżkę XPath PL/SQL xslprocessor.selectnodes(domnode, Varchar2) zwraca tablicę obiektów węzłów spełniających podaną ścieżkę XPath xslprocessor.selectsinglenode(domnode, Varchar2) zwraca pierwszy znaleziony obiekt węzła spełniającego podaną ścieżkę XPath xslprocessor.valueof(domnode, Varchar2) zwraca treść pierwszego znalezionego obiektu węzła spełniającego podaną ścieżkę XPath
Java: zapytania XPath Wyświetl tytuły wszystkich książek wydanych w roku 2002 XMLDocument xmldoc;... Node titlenode = null; NodeList querynodelist = null; C++ XML Flash i XML. Techniki zaawansowane HTML and XML dla początkujących Programowanie Microsoft SQL Server 2000 z XML Vademecum XML XML Kompendium programisty try { querynodelist = xmldoc.selectnodes("//ksiazka[rokwydania='2002']/tytul"); for (int i=0; i<querynodelist.getlength(); i++) { titlenode = querynodelist.item(i); System.out.println(titleNode.getFirstChild().getNodeValue()); } } catch (Exception e) {System.out.println(e);}
Java: zapytania XPath Wyświetl tytuły wszystkich książek, których jeden z autorów ma imię "Fabio" XMLDocument xmldoc;... Node titlenode = null; NodeList querynodelist = null; C++ XML XML Kompendium programisty try { querynodelist = xmldoc.selectnodes("//tytul[../autorzy[contains(autor,'fabio')]]"); for (int i=0; i<querynodelist.getlength(); i++) { titlenode = querynodelist.item(i); System.out.println(titleNode.getFirstChild().getNodeValue()); } } catch (Exception e) {System.out.println(e);}
Java: zapytania XPath Wyświetl nazwisko pierwszego autora książki pt. "Java i XML" Brett McLaughlin try { System.out.println(xmlDoc.valueOf("//ksiazka[tytul='Java i XML']//autor")); } catch (Exception e) {System.out.println(e);}
PL/SQL: zapytania XPath Wyświetl tytuły wszystkich książek wydanych w roku 2002 declare xmldoc xmldom.domdocument; titlenode xmldom.domnode; querynodelist xmldom.domnodelist; begin... querynodelist := xslprocessor.selectnodes(xmldom.makenode(xmldoc), '//ksiazka[rokwydania=''2002'']/tytul'); for i in 0..xmldom.getLength(queryNodeList) - 1 loop titlenode := xmldom.item(querynodelist, i); dbms_output.put_line(xmldom.getnodevalue(xmldom.getfirstchild(titlenode))); end loop; xmldom.freedocument(xmldoc);... end; C++ XML Flash i XML. Techniki zaawansowane HTML and XML dla początkujących Programowanie Microsoft SQL Server 2000 z XML Vademecum XML XML Kompendium programisty
PL/SQL: zapytania XPath Wyświetl tytuły wszystkich książek, których jeden z autorów ma imię "Fabio" declare C++ XML xmldoc xmldom.domdocument; XML Kompendium programisty titlenode xmldom.domnode; querynodelist xmldom.domnodelist; begin... querynodelist := xslprocessor.selectnodes(xmldom.makenode(xmldoc), '//tytul[../autorzy[contains(autor,''fabio'')]]'); for i in 0..xmldom.getLength(queryNodeList) - 1 loop titlenode := xmldom.item(querynodelist, i); dbms_output.put_line(xmldom.getnodevalue(xmldom.getfirstchild(titlenode))); end loop; xmldom.freedocument(xmldoc);... end;
PL/SQL: zapytania XPath Wyświetl nazwisko pierwszego autora książki pt. "Java i XML" Brett McLaughlin declare xmldoc xmldom.domdocument; begin... dbms_output.put_line( xslprocessor.valueof(xmldom.makenode(xmldoc), '//ksiazka[tytul=''java i XML'']//autor'));... end;
Schematy XML Tomasz Traczyk ttraczyk@ia.pw.edu.pl http://www.ia.pw.edu.pl/~ttraczyk/
Plan prezentacji Dlaczego schematy? Przykład schematu XML Schema nieco szczegółów Rola schematów XML
Problemy z DTD Zalety DTD Prostota Zgodność z SGML DTD a przetwarzanie danych Do wyświetlania zwykle wystarczy poprawność well formed Do przetwarzania postuluje się poprawność valid DTD wystarcza do definiowania dokumentów tekstowych DTD nie wystarcza do definiowania złożonych struktur danych, np. w EDI handlu elektronicznym B2B i B2C DTD nie daje możliwości sprawdzania poprawności typów danych za pomocą standardowych narzędzi Niedostatki DTD Brak definicji typów danych dla zawartości elementów i dla atrybutów możliwe ograniczenia to tylko: wyliczanie dopuszczalnych wartości atrybutu zasady tworzenia nazw i identyfikatorów zawartość elementu: zawsze tekst Ograniczone możliwości sformalizowanej rozbudowy encje parametryczne Brak możliwości efektywnego wyrażenia identyczności kilku części dokumentu encje w DTD rozwijane przed analizą dokumentu Brak dobrego wykorzystania przestrzeni nazw przedrostki wpisane na sztywno do DTD Język zapisu DTD zupełnie różny od XML nie daje możliwości przetwarzania narzędziami XML-owymi
Idea schematów Co to jest schemat? Definicja składni dokumentu XML Stosowana zamiast (lub obok) DTD Zapisana w XML, z użyciem przestrzeni nazw XML Schema Definicja składni dokumentu nie mająca w/w wad spełniająca dodatkowe n/w postulaty Standard W3C (rekomendacja) Sposób definiowania dokumentów, który prawdopodobnie zastąpi DTD
Cechy schematów Postulowane cechy schematu Precyzyjne deklarowanie typów danych z wykorzystaniem rozbudowanego słownika typów elementarnych z możliwością definiowania własnych typów Mechanizmy jednokrotnego definiowania powtarzających się fragmentów modelu (np. typów, grup elementów i atrybutów) i wielokrotnego odwoływania się do takich definicji Możliwość definiowania zbiorów elementów, w których liczba wystąpień każdego elementu jest kontrolowana, ale kolejność jest dowolna Możliwość deklarowania niepowtarzalności wybranych wartości w określonej części dokumentu, np. definiowanie kluczy i odwołań do nich Możliwość deklarowania wielu elementów o takiej samej nazwie, ale innym położeniu w dokumencie i innej budowie Mechanizmy pozwalające na kontrolowane rozszerzanie i uszczegóławianie modeli dokumentów; korzystanie z wielu schematów w jednym dokumencie Uwzględnienie przestrzenie nazw; komponowanie nowych modeli z kilku przestrzeni nazw
Wady schematów Stałe Większa długość od odpowiadającego DTD Znacznie bardziej skomplikowana składnia Brak możliwości definiowania encji Przejściowe Niewielka popularność Niewielu ekspertów umiejących wykorzystywać schematy Narzędzia nie zawierające wsparcia dla schematów
Plan prezentacji Dlaczego schematy? Przykład schematu XML Schema nieco szczegółów Rola schematów XML
Przykład dokumentu <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty xmlns="http://www.elka.pw.edu.pl/eres" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.elka.pw.edu.pl/eres konspekty.xsd"> <przedmiot id="kbd2" wersja="1"> <slowo_kluczowe>bazy danych</slowo_kluczowe> <slowo_kluczowe>oracle</slowo_kluczowe> <konspekt> <czesc_konspektu id="streszczenie"> <P>Monograficzny przedmiot poświęcony bazie danych i narzędziom Oracle.</P> </czesc_konspektu> <czesc_konspektu id="treść"> <P>Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle8 i Oracle8<I>i</I>, w tym możliwości wykorzystania języka XML.</P> <P>Przedstawiane są także narzędzia Oracle:</P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports, </LI> <LI> Oracle XDK. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Przykład dokumentu, c.d. <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty xmlns="http://www.elka.pw.edu.pl/eres" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.elka.pw.edu.pl/eres Domyślna przestrzeń nazw konspekty.xsd"> <przedmiot id="kbd2" wersja="1"> Nie wymaga prefiksów w dokumencie <slowo_kluczowe>bazy danych</slowo_kluczowe> <slowo_kluczowe>oracle</slowo_kluczowe> Jest zgodna z przestrzenią docelową schematu <konspekt> <czesc_konspektu id="streszczenie"> <P>Monograficzny przedmiot poświęcony bazie danych i narzędziom Oracle.</P> </czesc_konspektu> <czesc_konspektu id="treść"> <P>Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle8 i Oracle8<I>i</I>, w tym możliwości wykorzystania języka XML.</P> <P>Przedstawiane są także narzędzia Oracle:</P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports, </LI> <LI> Oracle XDK. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Przykład dokumentu, c.d. <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty xmlns="http://www.elka.pw.edu.pl/eres" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.elka.pw.edu.pl/eres konspekty.xsd"> <przedmiot id="kbd2" wersja="1"> Przestrzeń nazw XML Schema <slowo_kluczowe>bazy danych</slowo_kluczowe> <slowo_kluczowe>oracle</slowo_kluczowe> Definiuje atrybut xsi:schemalocation <konspekt> <czesc_konspektu id="streszczenie"> <P>Monograficzny przedmiot poświęcony bazie danych i narzędziom Oracle.</P> </czesc_konspektu> <czesc_konspektu id="treść"> <P>Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle8 i Oracle8<I>i</I>, w tym możliwości wykorzystania języka XML.</P> <P>Przedstawiane są także narzędzia Oracle:</P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports, </LI> <LI> Oracle XDK. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Przykład dokumentu, c.d. <?xml version="1.0" encoding="iso-8859-2"?> <?xml-stylesheet type="text/xsl" href="konspekty.xsl"?> <eres_konspekty xmlns="http://www.elka.pw.edu.pl/eres" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance xsi:schemalocation="http://www.elka.pw.edu.pl/eres konspekty.xsd"> <przedmiot id="kbd2" wersja="1"> <slowo_kluczowe>bazy danych</slowo_kluczowe> Określenie schematu <slowo_kluczowe>oracle</slowo_kluczowe> Dwa parametry: <konspekt> <czesc_konspektu id="streszczenie"> - nazwa URI przestrzeni nazw <P>Monograficzny przedmiot poświęcony - URL bazie lub nazwa danych pliku i ze narzędziom schematemoracle.</p> </czesc_konspektu> <czesc_konspektu id="treść"> <P>Omawiane są podstawowe zagadnienia związane z wykorzystaniem RDBMS Oracle8 i Oracle8<I>i</I>, w tym możliwości wykorzystania języka XML.</P> <P>Przedstawiane są także narzędzia Oracle:</P> <UL> <LI> Oracle Forms, </LI> <LI> Oracle Reports, </LI> <LI> Oracle XDK. </LI> </UL> </czesc_konspektu> </konspekt> </przedmiot> </eres_konspekty>
Przykład schematu <?xml version="1.0" encoding="iso-8859-2"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.elka.pw.edu.pl/eres" xmlns="http://www.elka.pw.edu.pl/eres" elementformdefault="qualified" version="1.1"> <xsd:include schemalocation="teksty.xsd"/> <xsd:element name="eres_konspekty">... </xsd:element> <xsd:element name="przedmiot">... </xsd:element> <xsd:element name="czesc_konspektu">... </xsd:element> <xsd:attributegroup name="identyfikatory">... </xsd:attributegroup> </xsd:schema>
<?xml version="1.0" encoding="iso-8859-2"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.elka.pw.edu.pl/eres" xmlns="http://www.elka.pw.edu.pl/eres" elementformdefault="qualified" version="1.1"> <xsd:include schemalocation="teksty.xsd"/> <xsd:element name="eres_konspekty">... </xsd:element> <xsd:element name="przedmiot">... </xsd:element> Przykład schematu, c.d. Element główny schematu Odwołanie do przestrzeni nazw xsd Określenie docelowej przestrzeni nazw dla dokumentu <xsd:element name="czesc_konspektu"> prefiksem przestrzeni nazw... </xsd:element> <xsd:attributegroup name="identyfikatory">... </xsd:attributegroup> </xsd:schema> Określenie domyślnej przestrzeni nazw dla schematu Żądanie kwalifikowania wszystkich elementów dokumentu
Przykład schematu, c.d. <?xml version="1.0" encoding="iso-8859-2"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.elka.pw.edu.pl/eres" xmlns="http://www.elka.pw.edu.pl/eres" elementformdefault="qualified" version="1.1"> <xsd:include schemalocation="teksty.xsd"/> <xsd:element name="eres_konspekty">... </xsd:element> <xsd:element name="przedmiot"> Włączenie schematu Włącza schemat zawierający typowe deklaracje i definicje, powtarzające się w innych schematach Tak włączany schemat musi nie określać docelowej... </xsd:element> przestrzeni nazw lub określać ją tak samo jak <xsd:element name="czesc_konspektu"> schemat włączający... </xsd:element> <xsd:attributegroup name="identyfikatory">... </xsd:attributegroup> </xsd:schema>
Przykład schematu, c.d. <?xml version="1.0" encoding="iso-8859-2"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.elka.pw.edu.pl/eres" xmlns="http://www.elka.pw.edu.pl/eres" elementformdefault="qualified" version="1.1"> <xsd:include schemalocation="teksty.xsd"/> <xsd:element name="eres_konspekty">... </xsd:element> Deklaracje i definicje zawartości <xsd:element name="przedmiot"> Deklaracje określają budowę dokumentu... Definicje określają obiekty pomocnicze, np. typy, </xsd:element> powtarzalne grupy itp. wykorzystywane w <xsd:element name="czesc_konspektu"> deklaracjach... </xsd:element> <xsd:attributegroup name="identyfikatory">... </xsd:attributegroup> </xsd:schema>
<xsd:element name="eres_konspekty"> <xsd:annotation> <xsd:documentation>przykład</xsd:documentation> </xsd:annotation> <xsd:complextype> Dokumentacja <xsd:sequence> <xsd:element ref="przedmiot" Opisy w specjalnej strukturze </xsd:sequence> </xsd:complextype> Deklarowanie elementów <xsd:key name="id_wersji"> <xsd:selector xpath="przedmiot"/> <xsd:field xpath="@id"/> <xsd:field xpath="@wersja"/> </xsd:key> </xsd:element> <xsd:element name="przedmiot"> <!-- Definicja wywoływana po nazwie -->... </xsd:element> minoccurs="1" Zwykłe komentarze maxoccurs="unbounded"/> XML (trudniejsze do przetwarzania!)
Deklarowanie elementów, c.d. <xsd:element name="eres_konspekty"> <xsd:annotation> <xsd:documentation>przykład</xsd:documentation> </xsd:annotation> <xsd:complextype> <xsd:sequence> <xsd:element ref="przedmiot" minoccurs="1" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> Definicje struktur <xsd:key name="id_wersji"> Typy złożone służą do definiowania struktur <xsd:selector xpath="przedmiot"/> <xsd:field xpath="@id"/> zagnieżdżonych <xsd:field xpath="@wersja"/> Element sequence pozwala definiować następstwo </xsd:key> Można ściśle określić krotności </xsd:element> <xsd:element name="przedmiot"> <!-- Definicja wywoływana po nazwie -->... </xsd:element>
<xsd:element name="przedmiot"> <xsd:complextype> <xsd:sequence> <xsd:element name="slowo_kluczowe" type="xsd:string" minoccurs="0" maxoccurs="unbounded"/> <xsd:element name="konspekt"> <xsd:complextype> <xsd:sequence> <xsd:element ref="czesc_konspektu minoccurs="1" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence> <xsd:attributegroup ref="identyfikatory"/> <xsd:attribute name="wersja"> Metody deklarowania <xsd:simpletype> <xsd:restriction base="xsd:unsignedbyte"> Bezpośrednia (inline) <xsd:maxexclusive value="10"/> Z użyciem definicji i odwołań przez nazwę </xsd:restriction> </xsd:simpletype> </xsd:attribute> </xsd:complextype>... </xsd:element> Deklarowanie elementów, c.d. <xsd:element name="czesc_konspektu">... </xsd:element>
<xsd:element name="przedmiot"> <xsd:complextype> <xsd:sequence> <xsd:element name="slowo_kluczowe" type="xsd:string" minoccurs="0" maxoccurs="unbounded"/> <xsd:element name="konspekt"> <xsd:complextype> <xsd:sequence> <xsd:element Definicje ref="czesc_konspektu" typów Do określania typów/atrybutów minoccurs="1" należy maxoccurs="unbounded"/> użyć typów prostych </xsd:sequence> </xsd:complextype> Typ prosty bazuje na jednym z typów wbudowanych </xsd:element> Typ może być uściślony przez różne ograniczenia (aspekty) </xsd:sequence> <xsd:attributegroup ref="identyfikatory"/> <xsd:attribute name="wersja"> <xsd:simpletype> <xsd:restriction base="xsd:unsignedbyte"> <xsd:maxexclusive value="10"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> </xsd:complextype>... </xsd:element> <xsd:element name="czesc_konspektu">... </xsd:element> Deklarowanie atrybutów
<xsd:element name="przedmiot"> <xsd:complextype> <xsd:sequence>... </xsd:sequence> <xsd:attributegroup ref="identyfikatory"/> <xsd:attribute name="wersja"> <xsd:simpletype> <xsd:restriction base="xsd:unsignedbyte"> <xsd:maxexclusive value="10"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> </xsd:complextype>... </xsd:element> Deklarowanie atrybutów, c.d. Metody deklarowania Bezpośrednio Z użyciem definicji i odwołania przez nazwę - grupa atrybutów definiuje powtarzalne atrybuty <xsd:element name="czesc_konspektu"> <xsd:complextype> <xsd:group ref="tekst" minoccurs="1" maxoccurs="unbounded"/> <xsd:attributegroup ref="identyfikatory"/> </xsd:complextype> </xsd:element> <xsd:attributegroup name="identyfikatory"> <xsd:attribute name="id" type="xsd:name" use="required"/> </xsd:attributegroup>
Klucze <xsd:element name="przedmiot"> <xsd:complextype> Definicja klucza <xsd:sequence> <xsd:element name="slowo_kluczowe" type="xsd:string" Nazwa klucza (może służyć do <xsd:element name="konspekt"> <xsd:complextype> <xsd:sequence> <xsd:element ref="czesc_konspektu" </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence> <xsd:attributegroup ref="identyfikatory"/> <xsd:attribute name="wersja">... </xsd:attribute> </xsd:complextype> <xsd:key name="id_czesci"> <xsd:selector xpath="konspekt/czesc_konspektu"/> <xsd:field xpath="@id"/> </xsd:key> </xsd:element> <xsd:attributegroup name="identyfikatory"> <xsd:attribute name="id" type="xsd:name" use="required"/> </xsd:attributegroup> minoccurs="0" budowy maxoccurs="unbounded"/> odwołań) Selektor: które elementy są unikalnie identyfikowane przez minoccurs="1 klucz maxoccurs="unbounded"/> Pole: składnik klucza (może być kilka) Używa się wyrażeń XPath Zakres unikalności: element nadrzędny w stosunku do deklaracji
Plan prezentacji Dlaczego schematy? Przykład schematu XML Schema nieco szczegółów Rola schematów XML
Budowa schematu XML Schema Rodzaje elementów schematu Deklaracje: określają elementy i atrybuty dokumentu Definicje: określają elementy pomocnicze, używane w deklaracjach: typy, grupy itp. Elementy globalne Elementy schematu bezpośrednio należące do elementu głównego schema Tworzą nazwane definicje, do których można odwoływać się w definicjach i deklaracjach Typy Służą do określania nazw elementów i atrybutów, następstwa, zawierania typów danych i zakresów wartości dla atrybutów i zawartości elementów Rodzaje proste: bez zagnieżdżeń (np. dla atrybutów) złożone: zawierają zagnieżdżone elementy Dokumentacja Elementy annotation służą do umieszczania dodatkowych informacji element documentation może zawierać dokumentację w języku naturalnym element appinfo może zawierać informacje dla aplikacji przetwarzających
Złożone typy danych Budowanie złożonych typów danych Element complextype służy do definiowania typów złożonych Grupowanie elementów w ramach typu sequence wyznacza ścisłe następstwo choice wyznacza wybór z kilu możliwości all wyznacza zbiór elementów i liczbę powtórzeń, ale bez określenia kolejności grupowania te można zagnieżdżać Liczba powtórzeń elementu lub grupy ściśle określana za pomocą atrybutów minoccurs i maxoccurs Atrybuty Deklaracje atrybutów podaje się na końcu definicji złożonego typu danych Atrybut use="required" deklaracji wymusza obowiązkowość Atrybut default deklaracji określa wartość domyślną Atrybut fixed deklaracji narzuca wartość stałą Elementy mieszane (tekst + znaczniki) definiuje się jak zwykłe typy złożone atrybut mixed określa, że znaczniki mogą być przeplecione tekstem
Proste typy danych Typy wbudowane Typy elementarne Podtypy typy pochodne Budowanie nowych typów prostych Ograniczenie (restriction) wzorce (wyrażenia regularne) ograniczenia długości określenie liczby cyfr dziesiętnych ograniczenia wartości Wyliczenie (enumeration) Listy Wartość atrybutu lub elementu może być listą wartości prostego typu, rozdzielonych białymi znakami Do deklarowania typu lista służy konstrukcja <xsd:list itemtype="typprosty"/> Połączenie (union)
Proste typy danych, c.d. Typy wbudowane (wybór) Nazwa typu Opis Przykładowe podtypy string Napis normalizedstring, language, Name boolean Wartości true i false decimal Liczba stałoprzecinkowa integer, negativeinteger, nonpositiveinteger, int, short, byte, unsignedint float, double Liczba zmiennoprzecinkowa duration Długość okresu czasu datetime Data i czas date, time Data, czas
Unikalność i klucze Unikalność Element unique deklaruje niepowtarzalność Klucze Element key: podobny do unique, definiuje klucz złożony z niepustych składników Odwołania można deklarować za pomocą elementu keyref Budowa klucza Element selector podaje jaki zbiór elementów ma zawierać niepowtarzalne klucze Element(y) field określa(ją) składnik(i) klucza Zakres niepowtarzalności określa się przez umieszczenie deklaracji unique lub key na końcu definicji odpowiedniego elementu
Schematy a przestrzenie nazw Przestrzenie nazw w schematach Schematy w pełni wykorzystują możliwości przestrzeni nazw (namespaces) Schemat określa znaczniki w konkretnej przestrzeni nazw Docelowa przestrzeń nazw Znaczniki znajdą się w docelowej przestrzeni nazw podanej w atrybucie targetnamespace Znaczniki w dokumencie muszą być w tej samej docelowej przestrzeni nazw Kwalifikowanie znaczników Atrybut elementformdefault: reguły kwalifikowania prefiksem przestrzeni nazw wartość qualified kwalifikować wszystkie znaczniki wartość unqualified kwalifikować tylko elementy globalne w przestrzeni nazw znajdują się tylko elementy globalne ich elementy podrzędne (lokalne) przynależą do przestrzeni pośrednio można tworzyć różne elementy lokalne o tych samych nazwach w różnych miejscach schematu bez konfliktu w przestrzeni nazw Kilka przestrzeni nazw Dokument może korzystać z kilku przestrzeni nazw każdej powiązanej z innym schematem Rozszerzanie XML Schema Zapis schematu można rozszerzyć o własne elementy Umieścić je trzeba w innej przestrzeni nazw
Wielokrotne użycie Grupowanie Definicja powtarzalnej grupy elementów: group atrybutów: attributegroup Odwołanie: po nazwie grupy Włączanie schematów include włącza schemat do schematu redefine włącza schemat, umożliwiając przedefiniowanie wybranych elementów, atrybutów i typów włączanego schematu Włączanie a przestrzenie nazw include działa jeśli włączany schemat nie określa przestrzeni nazw znaczniki włączane przypisywane są do przestrzeni docelowej schematu włączającego włączany schemat określa tę samą przestrzeń nazw co włączający import włącza schemat z pozostawieniem jego przestrzeni nazw stosowane w przypadku, gdy włączany schemat określa inną przestrzeń nazw w definiowanym dokumencie pozostają dwie różne przestrzenie nazw
Rozszerzanie schematów Zastępowanie (substitution) Można określić zbiór elementów mogących zastąpić dany element Definiowanie atrybut substitutiongroup wskazuje element zastępowany (bazowy) typ elementów ten sam albo pochodny od typu elementu bazowego Wykorzystanie w dokumencie element typu bazowego może być zastąpiony elementem typu zastępującego przykład: nazwy w kilku językach Typy pochodne (derived types) Dla typów prostych: ograniczenie, wyliczenie, połączenie Dla typów złożonych ograniczenie zawężenie zakresu wartości ograniczenie liczności elementów rozszerzenie: dodanie nowych elementów lub atrybutów do typu bazowego Ograniczanie rozszerzalności Specjalne atrybuty pozwalają określić dopuszczone mechanizmy wyprowadzania typów Definicje elementów i typów abstrakcyjnych nie mogą być bezpośrednio wykorzystane w deklaracjach służą do zastępowania lub wyprowadzania nowych definicji Zezwolenie na rozszerzenia użytkownika any, anyattribute i anytype pozwalają użyć elementów/atrybutów/typów nie zdefiniowanych w schemacie
XML Schema w narzędziach Narzędzia firmy Microsoft MS XML SDK 4.0 wspiera specyfikację XML Schema (XSD) parser DOM waliduje dokumenty z użyciem XSD obiekt XMLSchemaCache służy do ładowania schematów Narzędzia Microsoft zawierają także wsparcie dla firmowych specyfikacji XML- Data i XML-Data Reduced Narzędzia firmy Oracle Najnowsze wersje XDK (XML Developer Kit) zawierają Oracle XML Schema Processor for Java Procesor ten jest wykorzystywany przez parser typu DOM Walidacja na podstawie schematu ładowanego automatycznie na podstawie zawartości dokumentu ładowanego programowo Walidacja z linii komendy oraxml schema nazwa_pliku_xml
Plan prezentacji Dlaczego schematy? Przykład schematu XML Schema nieco szczegółów Rola schematów XML
Rola schematów XML Zastosowania schematów XML W przetwarzaniu walidacja na podstawie schematu pozwala uniknąć sprawdzeń poprawności struktury w czasie przetwarzania W wymianie danych walidacja na podstawie schematu pozwala pod razu odrzucać błędne komunikaty, bez ich szczegółowej analizy W ładowaniu do baz danych schemat może być użyty do automatycznego utworzenia odpowiedniej struktury danych i sterowania wczytywaniem informacji do tej struktury W tworzeniu dokumentacji schemat można uzupełnić o elementy opisowe i automatycznie generować dokumentację struktur XML (za pomocą XSL) Przyszłość schematów XML Wszystko wskazuje na to, że schematy całkowicie wyprą DTD w zastosowaniu do definiowania struktur dokumentów i walidacji Zastosowaniem DTD pozostanie definiowanie encji
Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT Marek Wojciechowski marek@cs.put.poznan.pl http://www.cs.put.poznan.pl/~marek/
Formatowanie dokumentów XML Język XML opisuje strukturę i semantykę, nie opisuje formatowania Nie ma w XML znaczników opisujących formatowanie Ze znacznikami XML nie jest związany domyślny sposób prezentacji Sposób prezentacji dokumentu XML (formatowanie) dodaje się poprzez dołączenie arkuszu stylów CSS Cascading Style Sheets (Level 1 i Level 2) Opracowany z myślą o HTML XSL Extensible Stylesheet Language Opracowany dla dokumentów XML Bardziej złożony, oferujący więcej możliwości niż CSS
Formatowanie XML za pomocą CSS produkty.xml <?xml version="1.0" encoding="windows-1250"?> <?xml-stylesheet type="text/css" href="produkty.css"?> <cennik> <produkt kod="67653829370"> <nazwa>antena dachowa</nazwa> <symbol>1709765</symbol> <cena>85</cena> </produkt> <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena> </produkt> <produkt kod="78488297102"> <nazwa>zestaw głośnomówiący LOUD 2</nazwa> <symbol>4409724</symbol> <cena>330</cena> </produkt> </cennik> produkty.css produkt {display: block} nazwa {display: inline; font-weight: bold} symbol {display: none} cena {display: inline; font-style: italic} CSS umożliwia formatowanie elementów, ale nie pozwala na modyfikację struktury drzewa dokumentu
XSL Extensible Stylesheet Language Język do definiowania arkuszy stylów Obejmuje 2 części: XSL Transformations (XSLT) język przekształceń Wykorzystuje XPath XSL Formatting Objects (XSL-FO) język opisu formatu W porównaniu z CSS: XSL oferuje bardziej rozbudowane mechanizmy formatowania Umożliwia transformację struktury drzewa dokumentu (!) Arkusze XSL są dokumentami XML (!) XSLT może być wykorzystywany w połączeniu z XSL-FO do formatowania dokumentów XML, ale może również być wykorzystywany niezależnie jako uniwersalny język transformacji dokumentów XML
XSLT Język przekształceń Zawiera elementy służące do definiowania reguł opisujących sposób przekształcania jednego dokumentu XML na inny dokument Wykorzystuje język wyrażeń XPath do wyboru przetwarzanych elementów Przekształcony dokument może mieć znaczniki (i DTD) dokumentu oryginalnego lub używać innego zestawu znaczników Przykłady typów konwersji dokumentów XML: Konwersja do dokumentu XML zawierającego obiekty formatujące XSL Konwersja do dokumentu HTML (np. korzystającego z arkusza stylów CSS)
Transformacja XSLT Dokument XML XSLT Dokument XML (lub HTML, WML, itp.) Arkusz stylistyczny XSL Automatyczna konwersja dokumentu XML do formatu HTML, WML, itp. lub innego dokumentu XML
produkty.xml Przykład transformacji XSLT <?xml version="1.0" encoding="windows-1250"?> <?xml-stylesheet type="text/xsl" href="produkty.xsl"?> <cennik> <produkt kod="67653829370"> <nazwa>antena dachowa</nazwa> <symbol>1709765</symbol> <cena>85</cena> </produkt> <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena> </produkt> <produkt kod="78488297102"> <nazwa>zestaw głośnomówiący LOUD 2 </nazwa> <symbol>4409724</symbol> <cena>330</cena> </produkt> </cennik> <?xml version="1.0" encoding="windows-1250"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="cennik"> <HTML><BODY><H1>Cennik akcesoriów</h1> <xsl:for-each select="produkt"> <B><xsl:value-of select="nazwa"/></b> - <I><xsl:value-of select="cena"/></i> PLN <BR/> </xsl:for-each> </BODY></HTML> </xsl:template> </xsl:stylesheet> produkty.xsl Wyrażenia XPath wybierające przetwarzane elementy Efekt transformacji do HTML wykonanej po stronie przeglądarki
Metody transformacji XSLT Programista przygotowuje arkusz stylistyczny XSL, opisujący sposób transformacji oryginalnego dokumentu XML Transformacja może być opisana w sposób rekurencyjny, proceduralny lub mieszany Za transformację dokumentu XML odpowiada procesor XSLT Procesory XSLT mogą być dostępne w postaci: Samodzielnych produktów Modułów wchodzących w skład większych produktów Przeglądarek internetowych (np. Microsoft Internet Explorer) Serwerów WWW Modułów bibliotecznych np. bibliotek Java
Co widzi procesor XSLT? Procesor XSLT widzi drzewo dokumentu XML XSLT zakłada, że drzewo składa się z 7 rodzajów węzłów: Korzeń Elementy Tekst Atrybuty Przestrzenie nazw Instrukcje przetwarzania Komentarze DTD i deklaracja typu dokumentu nie są włączane do drzewa (ale mogą powodować dodanie do niektórych elementów atrybutów domyślnych i stałych)
Domyślne reguły transformacji XSL zawiera definicje kilku domyślnych reguł niejawnie dołączonych do wszystkich arkuszy stylów Domyślna reguła elementów Zapewnia, że wszystkie węzły będą przetworzone gdy nie ma jawnych reguł Domyślna reguła węzłów tekstowych i atrybutów Kopiuje tekst i atrybuty na wyjście Domyślna reguła instrukcji przetwarzania i komentarzy Pomija instrukcje przetwarzania i komentarze Domyślne reguły mają niższy priorytet niż wyspecyfikowane jawnie (tzn. obowiązują jeśli nie zostaną przesłonięte) Dzięki powyższym regułom "pusty" arkusz stylów spowoduje przekopiowanie danych tekstowych na wyjście <?xml version="1.0" encoding="windows-1250"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> </xsl:stylesheet>
Transformacja rekurencyjna (1/2) Przykład: Reguły transformacji 1) Każde wystąpienie znacznika <cennik>*</cennik> zamień na: <HTML><BODY><H1>Cennik akcesoriów</h1>*</body></html> a następnie spróbuj dopasować reguły do zawartości znacznika 2) Każde wystąpienie znacznika <produkt>*</produkt> zamień na: *<BR/> a następnie spróbuj dopasować reguły do zawartości znacznika 3) Każde wystąpienie znacznika <nazwa>*</nazwa> zamień na: <B>*</B> - 4) Każde wystąpienie znacznika <cena>*</cena> zamień na: <I>*</I> PLN 5) Pomiń znacznik <symbol>*</symbol>
Transformacja rekurencyjna (2/2) Przykład: Arkusz stylistyczny XSL <?xml version="1.0" encoding="windows-1250"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="cennik"> <HTML><BODY><H1>Cennik akcesoriów</h1><xsl:apply-templates/></body></html> </xsl:template> <xsl:template match="produkt"> <xsl:apply-templates/><br/> </xsl:template> <xsl:template match="nazwa"> <B><xsl:value-of select="text()"/></b> - </xsl:template> <xsl:template match="symbol"> </xsl:template> <xsl:template match="cena"> <I><xsl:value-of select="text()"/></i> PLN </xsl:template> </xsl:stylesheet> Wybiera węzeł tekstowy
Transformacja proceduralna (1/2) Przykład: Pseudokod transformacji wyświetl "<HTML><BODY><H1>Cennik akcesoriów</h1>"; dla każdego znacznika <produkt> { wyświetl "<B>"; wyświetl zawartość znacznika <nazwa>; wyświetl "</B> -"; wyświetl "<I>"; wyświetl zawartość znacznika <cena>; wyświetl "</I> PLN<BR/>"; } wyświetl "</BODY></HTML>";
Transformacja proceduralna (2/2) Przykład: Arkusz stylistyczny XSL <?xml version="1.0" encoding="windows-1250"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="cennik"> <HTML><BODY><H1>Cennik akcesoriów</h1> <xsl:for-each select="produkt"> <B><xsl:value-of select="nazwa"/></b> - <I><xsl:value-of select="cena"/></i> PLN <BR/> </xsl:for-each> </BODY></HTML> </xsl:template> </xsl:stylesheet>
Dostęp do atrybutów, dodawanie atrybutów <?xml version="1.0" encoding="windows-1250"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="/"> <HTML> <HEAD><TITLE>Cennik</TITLE></HEAD> <BODY> <H1>Cennik akcesoriów</h1> <TABLE> <xsl:attribute name="border">4</xsl:attribute> <TR> <TH>Kod</TH><TH>Symbol</TH> <TH>Nazwa</TH><TH>Cena</TH> </TR> <xsl:for-each select="cennik/produkt"> <TR> <TH><xsl:value-of select="@kod"/></th> <TD><xsl:value-of select="symbol"/></td> <TD><xsl:value-of select="nazwa"/></td> <TD><xsl:value-of select="cena"/></td> </TR> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template> </xsl:stylesheet> Dodanie atrybutu BORDER z wartością 4 do elementu<table> (<TABLE BORDER="4"> też OK.) Dostęp do atrybutu KOD elementu cennik/produkt