wprowadzenie do xml - ploug · co to jest xml? • extensible markup language – metajęzyk •...
Post on 01-Dec-2018
241 Views
Preview:
TRANSCRIPT
Wprowadzenie do XML
Tomasz Traczyk
ttraczyk@ia.pw.edu.pl
http://www.ia.pw.edu.pl/~ttraczyk/
� 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
Plan prezentacji
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
– 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
• 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)
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 (style-
sheet)
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 inarzędziom Oracle. </P>
</czesc_konspektu><czesc_konspektu id="Treść przedmiotu"><P> Omawiane są podstawowe zagadnienia związane z wykorzystaniemRDBMS 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>
<?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 inarzędziom Oracle. </P>
</czesc_konspektu><czesc_konspektu id="Treść przedmiotu"><P> Omawiane są podstawowe zagadnienia związane z wykorzystaniemRDBMS 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>
Prolog
- Wersja XML (obowiązkowa) i strona kodowa (opcjonalna)*
- Odwołanie do DTD (opcjonalne)
- Odwołanie do arkusza stylistycznego (opcjonalne) *
_________________
* Instrukcje przetwarzania
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 inarzędziom Oracle. </P>
</czesc_konspektu><czesc_konspektu id="Treść przedmiotu"><P> Omawiane są podstawowe zagadnienia związane z wykorzystaniemRDBMS 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>
Elementy
- Element główny — dokładnie jeden
- Elementy podrzędne
- Jawne zamykanie znaczników
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 inarzędziom Oracle. </P>
</czesc_konspektu><czesc_konspektu id="Treść przedmiotu"><P> Omawiane są podstawowe zagadnienia związane z wykorzystaniemRDBMS 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>
Atrybuty
- Uzupełniają elementy
- Wartości ujęte w cudzysłów
Dokument w XML – przykład
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
– 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)
– Języki• DTD (Document Type Definition)
• schematy (XML Schema)
• Arkusze stylistyczne (style-sheets)
– 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 • 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!
• 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
• Składnia
– Pochodzi wprost z SGML
– Nie jest w XML
• nie można użyć narzędzi XML-owych
– 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 >
<!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 czesc_konspektu id ID #REQUIRED >
<!ATTLIST przedmiot id ID #REQUIRED
wersja CDATA #IMPLIED >
Definicje elementów
- Definiują nazwy elementów
- Określają zawieranie i następstwo:
? — element opcjonalny
+ * — powtórzenia (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.
<!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 czesc_konspektu id ID #REQUIRED ><!ATTLIST przedmiot id ID #REQUIRED
wersja CDATA #IMPLIED >
Definicje atrybutów- Definiują nazwy atrybutów- Określają typ atrybutu:
CDATA — tekstowy (Character Data)ID — identyfikator (unikalny w ramach dokumentu)IDREF — referencja
- Określają obowiązkowość atrybutów:#REQUIRED — obowiązkowy#IMPLIED — opcjonalny bez wartości domyślnej#FIXED — ustalony (niezmienny)
- Podają - wartości domyślne atrybutów opcjonalnych- listy dopuszczalnych wartości (typy wyliczeniowe)
Przykład DTD, c.d.
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 definiowane w DTD:<!ENTITY nazwa "tekst">
lub<!ENTITY nazwa SYSTEM "URL">
• 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">
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 ... >
<!ELEMENT przedmiot ... >
...
]>
• 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 ... >
]>
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?>
– 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
– Składnia
<![CDATA[ tekst ]]>
• Komentarze
– Składnia
<!-- tekst komentarza -->
– Zawartość: cokolwiek oprócz ‘--’
• Przetwarzanie białych znaków
– Atrybut predefiniowany xml:space
• wartość "preserve" powoduje
zachowywanie nadmiarowych białych
znaków przez programy
przetwarzające
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
Przestrzenie nazw
• 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
• 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 nazwPrzykład<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">
� 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
– Elastyczność
– Możliwość zróżnicowanej prezentacji
– Łatwość przetwarzania
– Czytelność
– Dostosowanie do specyfiki przetwarzania w sieci Web
– Internacjonalizacja
– Niewygórowane koszty
– Względna prostota
Reprezentacja informacji – choć tekstowa –umożliwia „bezstratne” odczytanie informacji, dokładną weryfikację poprawności i łatwe dalsze przetwarzanie.
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
XML pozwala zapisać wszelkie informacje, które mogą być wyrażonetekstowo, w sposób całkowicie niezależny od platformy sprzętowej i programowej.
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
Za pomocą XML można zapisać nawet bardzo złożone struktury informacji.
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
Struktura informacji jest łatwa do rozszerzania i dostosowywania, z możliwością wykorzystania struktur wcześniej zdefiniowanych.
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
Dzięki zastosowaniu arkuszy stylistycznych ten sam dokument może być różnorodnie prezentowany w zależności od potrzeb i możliwości.
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
Osiągnięta dzięki prostej i regularnej składni oraz ustandaryzowanym narzędziom.
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
Dokumenty XML są zrozumiałe dla człowieka, każdy dokument niesie bowiem metainformację w postaci znaczników – sam się opisuje. Ułatwia to posługiwanie się dokumentami, uruchamianie oprogramowania itd.
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 prostotaJest 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 prostotaIdea 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
• Główne wady XML
– Rozwlekłość zapisu
– Ograniczona wydajność przetwarzania
– Niedostatki implementacji standardów XML-owych
Decyduje o niej znaczny „narzut” na znaczniki niosące metainformację. Nie jest to na ogół wadą istotną, np. przy przesyłaniu informacji stosować można kompresję, która jest zwykle bardzo efektywna.
Cechy XML
• Główne wady XML
– Rozwlekłość zapisu
– Ograniczona wydajność przetwarzania
– Niedostatki implementacji standardów XML-owychWynika 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
– Deskryptory zasobów sieciowych,
oprogramowania itp.
– Decydujące zalety: sformalizowany zapis,
elastyczność, łatwość przetwarzania
– Przykłady: RDF, WSDL
• 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
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
• zautomatyzowane tworzenie rankingów
– 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 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 → TEX 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 wdwó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 -- doprezentowania danych strukturalnych powinien przede wszystkim stosowany językXML, a nie HTML.<P/> Należy także skłonić dostawców danych, by w przyszłości dostarczaliswoje dane w XML.
</wersja></postulat>
XML w analizie s.i. – przykłady, c.d.
Wymiana danych między bazami
Użycie XML do integracji baz• heterogenicznych
• rozproszonych
– Przykład 1: Dealer – dystrybutor
• 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– w licznych laboratoriach
na całym świecie
– bazy satelickie na oprogramowaniu open source
– baza centralna na Oracle
Centralna
b.d.
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 wymianyinformacji (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
<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>
Przykład struktury drzewa DOM
<katalog>
<ksiazka>
<tytul> <cena> <autorzy>
<autor> <autor>
<wydawnictwo> <rok>
XML krok po kroku
43
Michael J. Young
Katarzyna Tryc
Read Me 2000
isbn="83-7243-134-5"
korzeń
węzeł elementu
węzeł tekstowy
węzeł atrybutu
W3C DOM API: obiekt Node
• Obiekt klasy/typu Node reprezentuje węzeł w drzewie DOM (węzeł elementu, węzeł tekstowy, itd.)
lewy węzeł sąsiednipreviousSibling
węzeł nadrzędnyparentNode
wartość węzłanodeValue
identyfikator typu węzłanodeType
nazwa węzłanodeName
prawy węzeł sąsiedninextSibling
ostatni węzeł potomnylastChild
pierwszy węzeł potomnyfirstChild
tablica węzłów potomnychchildNodes
tablica atrybutów węzłaattributes
zamienia istniejący węzeł potomny z podanym węzłem
replaceChild(n,n)
usuwa wskazany węzeł potomnyremoveChild(n)
dołącza nowy węzeł jako węzeł potomny przed wskazanym węzłem
insertBefore(n,n)
zwraca prawdę, jeżeli węzeł zawiera węzły potomne
hasChildNodes()
zwraca kopię węzła z/bez węzłami potomnymi
cloneNode(b)
dołącza nowy węzeł jako ostatni węzeł potomny
appendChild(n)
Atrybuty (W3C) Metody (W3C)
W3C DOM API: obiekt NodeList
• Obiekt klasy/typu NodeList reprezentuje zbiór obiektów typu Node
liczba elementów w zbiorzelength zwraca element i-ty element zbioruitem(i)
Atrybuty (W3C) Metody (W3C)
W3C DOM API: obiekt Document
• Obiekt klasy/typu Document modeluje całe drzewo DOM; wszystkie węzły drzewa są jego potomkami
DTD lub XML Schema dla dokumentu
doctype
element najwyższego poziomu w dokumencie
documentElement
zwraca zbiór węzłów o podanej nazwie
getElementsByTagName(s)
tworzy nowy węzeł tekstowycreateTextNode(s)
tworzy nowy elementcreateElement(s)
tworzy nowy węzeł komentarzacreateComment(s)
tworzy nowy węzeł atrybutucreateAttribute(s)
Atrybuty (W3C) Metody (W3C)
W3C DOM API: obiekt Element
• Obiekt klasy/typu Element modeluje węzeł reprezentujący znacznik XML
nazwa węzłatagName
wstawia nowy węzeł atrybutusetAttributeNode(n)
ustawia nową wartość atrybutusetAttribute(s,s)
usuwa podany węzeł atrybuturemoveAttributeNode(n)
usuwa wartość podanego atrybuturemoveAttribute(s)
zwraca zbiór węzłów o podanej nazwiegetElementsByTagName(s)
zwraca węzeł podanego atrybutugetAttributeNode(s)
zwraca wartość podanego atrybutugetAttribute(s)
Atrybuty (W3C) Metody (W3C)
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:
wartość atrybutuvalue
prawda oznacza, że wartość atrybutu jest ustawiona w dokumencie
specified
nazwa atrybutuname
Atrybuty (W3C)
• 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 JavaXMLDocument 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);
Node tytulText = xmlDoc.createTextNode("Zaawansowany XML");
tytulNode.appendChild(tytulText);
Node cenaText = xmlDoc.createTextNode("85");
tytulNode.appendChild(tytulText);
<katalog>
<ksiazka>
<tytul> <cena>
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/SQLdeclare
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));
tytulElement := xmldom.createElement(xmlDoc, 'tytul');
tytulNode := xmldom.appendChild(tmpNode, xmldom.makeNode(tytulElement));
cenaElement := xmldom.createElement(xmlDoc, 'cena');
cenaNode := xmldom.appendChild(tmpNode, xmldom.makeNode(cenaElement));
tytulText := xmldom.createTextNode(xmlDoc, 'Zaawansowany XML');
tmpnode := xmldom.appendChild(tytulNode, xmldom.makeNode(tytulText));
cenaText := xmldom.createTextNode(xmlDoc, '85');
tmpnode := xmldom.appendChild(cenaNode, xmldom.makeNode(cenaText));
end;
<katalog>
<ksiazka>
<tytul> <cena>
Zaawansowany XML
85
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 E
książka E
isbn A
14-2887-...
tytul E
#text T
C++ XML
autorzy E
autor E
#text T
Fabio Arc...
rokwydania E
#text T
2002
wydawnictwo E
#text T
Mikom
cena E
#text T
36
...
getDocumentElement()
getChildNodes()
getChildNodes()getAttributes()
getChildNodes()
D – DOCUMENT_NODE (9)E – ELEMENT_NODE (1)A – ATTRIBUTE_NODE (2)T – TEXT_NODE (3)
getNodeValue()
getNodeName()
Java: prosta nawigacja w drzewie DOM
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
XMLDocument d
W pętli odczytuj kolejne węzły z listy (np. <ksiazka>)
g=f.getChildNodes() Pobierz listę elementów potomnych
h=g.item(j) Odczytaj kolejny węzeł z listy (np. <tytul>,<autorzy>,<cena>,<rok>, <wydawnictwo>)
Przetwarzaj węzeł
...
Java: nawigacja w drzewie DOM getChildNodes()
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
...
Wyświetl tytuły wszystkich książek opisanych w dokumencie XML
Java: nawigacja w drzewie DOM getAttributes()
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
...
Wyświetl wartość pierwszego atrybutu każdego znacznika <ksiazka> w dokumencie XML
Java: nawigacja w drzewie DOM getElementsByTagName()
XMLDocument xmlDoc;
...
Node titleNode = null;
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);}
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
...
Wyświetl tytuły wszystkich książek opisanych w dokumencie XML
PL/SQL: prosta nawigacja w drzewie DOM
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
DOMDocument d
W pętli odczytuj kolejne węzły z listy (np. <ksiazka>)
g=getChildNodes(f) Pobierz listę elementów potomnych
h=item(g,j) Odczytaj kolejny węzeł z listy (np. <tytul>,<autorzy>,<cena>,<rok>, <wydawnictwo>)
Przetwarzaj węzeł
...
PL/SQL: nawigacja w drzewie DOM getChildNodes()
declare
xmlDoc xmldom.DOMDocument; xmlElem xmldom.DOMElement; bookNode xmldom.DOMNode;
bookNodeList xmldom.DOMNodeList; innerNode xmldom.DOMNode; innerNodeList xmldom.DOMNodeList;
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);
innerNodeList := xmldom.getChildNodes(bookNode);
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;
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
...
Wyświetl tytuły wszystkich książek opisanych w dokumencie XML
PL/SQL: nawigacja w drzewie DOM getAttributes()
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
...
Wyświetl wartość pierwszego atrybutu każdego znacznika <ksiazka> w dokumencie XML
PL/SQL: nawigacja w drzewie DOM getElementsByTagName()
declare
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
...
Wyświetl tytuły wszystkich książek opisanych w dokumencie XML
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
obejmuje bieżący węzełself
obejmuje wszystkie węzły sąsiednie, które w dokumencie następująprzed węzłem bieżącym
preceding-sibling
obejmuje wszystkie węzły, które w dokumencie następują przed węzłem bieżącym
preceding
obejmuje węzeł bezpośrednio nadrzędny bieżącego węzła (ojciec)parent
obejmuje wszystkie węzły sąsiednie, które w dokumencie następują za węzłem bieżącym
following-sibling
obejmuje wszystkie węzły, które w dokumencie następują za węzłembieżącym
following
obejmuje bieżący węzeł plus wszystkie węzły podrzędnedescendant-or-self
obejmuje wszystkie węzły podrzędne (syn, wnuk, itd.) bieżącego węzładescendant
obejmuje wszystkie węzły bezpośrednio podrzędne bieżącego węzła (dzieci)
child
obejmuje wszystkie atrybuty bieżącego węzłaattribute
obejmuje bieżący węzeł plus wszystkie węzły nadrzędneancestor-or-self
obejmuje wszystkie węzły nadrzędne (ojciec, dziadek, itd.) bieżącego węzła
ancestor
Testy węzłów, operatory i funkcje
węzeł o podanej nazwienazwa
dowolny atrybut@*
dowolny element*
węzeł tekstowytext()
dowolny węzełnode()
zwraca fałsz logicznyfalse()
zwraca prawdę logicznątrue()
negacja logicznanot()
liczba porządkowa węzła wybieranego przez wyrażenieposition()
nazwa węzła wybieranego przez wyrażeniename()
liczba porządkowa ostatniego węzła wybieranego przez wyrażenielast()
liczba węzłów wybieranych przez wyrażeniecount()
operatory arytmetyczne+, -, *, div, mod
operatory logiczneor, and
porównania=, !=, <, >, <=, >=
Funkcje - ciąg dalszy
dokonuje zamiany wszystkich wystąpień podanego podciągutranslate()
zwraca ciąg znaków znajdujący się przed wycinanym podciągiemsubstring-before()
zwraca ciąg znaków znajdujący się za wycinanym podciągiemsubstring-after()
ekstrakcja podciągu znakówsubstring()
długość tekstustring-length()
konwersja do tekstustring()
sprawdzenie, czy tekst rozpoczyna się od podanego ciągustarts-with()
test zawierania tekstówcontains()
konkatenacja tekstówconcat()
Funkcje operujące na tekstach
suma zbioru wartości liczbowychsum()
zaokrąglenieround()
konwersja do liczbynumber()
dolne domknięcie całkowitefloor()
górne domknięcie całkowiteceiling()
Funkcje operujące na liczbach
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
//tytul =>
/descendant-or-self::node()
/descendant-or-self::node()
//
//autor/.. =>
//autor/parent::node()
parent::node()..
//tytul[string-length(.)>10] => //tytul[string-length(self::node())>10]
self::node().
//katalog/ksiazka[@isbn= "83-7197-786-7"] => //katalog/child::ksiazka[attribute::isbn= "83-7197-786-7"]
attribute::@
//ksiazka/cena => //ksiazka/child::cena
child::brak
przykładpełneskrócone
Funkcje XPath w DOM API
• 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
Java
• 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
PL/SQL
Java: zapytania XPath
XMLDocument xmlDoc;
...
Node titleNode = null;
NodeList queryNodeList = null;
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);}
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
Wyświetl tytuły wszystkich książek wydanych w roku 2002
Java: zapytania XPath
XMLDocument xmlDoc;
...
Node titleNode = null;
NodeList queryNodeList = null;
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);}
C++ XML
XML Kompendium programisty
Wyświetl tytuły wszystkich książek, których jeden z autorów ma imię "Fabio"
Java: zapytania XPath
try {
System.out.println(xmlDoc.valueOf("//ksiazka[tytul='Java i XML']//autor"));
} catch (Exception e) {System.out.println(e);}
Brett McLaughlin
Wyświetl nazwisko pierwszego autora książki pt. "Java i XML"
PL/SQL: zapytania XPath
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;
Wyświetl tytuły wszystkich książek wydanych w roku 2002
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
declare
xmlDoc xmldom.DOMDocument;
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;
Wyświetl tytuły wszystkich książek, których jeden z autorów ma imię "Fabio"
C++ XML
XML Kompendium programisty
PL/SQL: zapytania XPath
declare
xmlDoc xmldom.DOMDocument;
begin
...
dbms_output.put_line( xslprocessor.valueOf(xmldom.makeNode(xmlDoc),
'//ksiazka[tytul=''Java i XML'']//autor'));
...
end;
Brett McLaughlin
Wyświetl nazwisko pierwszego autora książki pt. "Java i XML"
Schematy XML
Tomasz Traczyk
ttraczyk@ia.pw.edu.plhttp://www.ia.pw.edu.pl/~ttraczyk/
� Dlaczego schematy?
� Przykład schematu
� XML Schema – nieco szczegółów
� Rola schematów XML
Plan prezentacji
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
<?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 RDBMSOracle8 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
<?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>
Domyślna przestrzeń nazw
• Nie wymaga prefiksów w dokumencie
• Jest zgodna z przestrzenią docelową schematu
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>
<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>
Przestrzeń nazw XML Schema
• Definiuje atrybut xsi:schemaLocation
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>
<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>
Określenie schematu
• Dwa parametry:
- nazwa URI przestrzeni nazw
- URL lub nazwa pliku ze schematem
Przykład dokumentu, 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">
...
</xsd:element>
<xsd:element name="czesc_konspektu">
...
</xsd:element>
<xsd:attributeGroup name="identyfikatory">
...
</xsd:attributeGroup>
</xsd:schema>
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>
Element główny schematu
• Odwołanie do przestrzeni nazw xsd
• Określenie docelowej przestrzeni nazw dla dokumentu
• Określenie domyślnej przestrzeni nazw dla schematu
• Żądanie kwalifikowania wszystkich elementów dokumentu
prefiksem przestrzeni nazw
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">
...
</xsd:element>
<xsd:element name="czesc_konspektu">
...
</xsd:element>
<xsd:attributeGroup name="identyfikatory">
...
</xsd:attributeGroup>
</xsd:schema>
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
przestrzeni nazw lub określać ją tak samo jak
schemat włączający
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">
...
</xsd:element>
<xsd:element name="czesc_konspektu">
...
</xsd:element>
<xsd:attributeGroup name="identyfikatory">
...
</xsd:attributeGroup>
</xsd:schema>
Deklaracje i definicje zawartości
• Deklaracje określają budowę dokumentu
• Definicje określają obiekty pomocnicze, np. typy,
powtarzalne grupy itp. – wykorzystywane w
deklaracjach
Przykład schematu, 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>
<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>
Dokumentacja
• Opisy w specjalnej strukturze
• Zwykłe komentarze XML (trudniejsze do przetwarzania!)
Deklarowanie elementów
<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>
<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>
Definicje struktur
• Typy złożone służą do definiowania struktur
zagnieżdżonych
• Element sequence pozwala definiować następstwo
• Można ściśle określić krotności
Deklarowanie elementów, c.d.
<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"><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>
Metody deklarowania
• Bezpośrednia (inline)
• Z użyciem definicji i odwołań przez nazwę
Deklarowanie elementów, c.d.
<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"><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>
Definicje typów
• Do określania typów/atrybutów należy użyć typów prostych
• Typ prosty bazuje na jednym z typów wbudowanych
• Typ może być uściślony przez różne ograniczenia (aspekty)
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>
<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>
Metody deklarowania
• Bezpośrednio
• Z użyciem definicji i odwołania przez nazwę
- grupa atrybutów definiuje powtarzalne
atrybuty
Deklarowanie atrybutów, c.d.
<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">...
</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>
Definicja klucza
• Nazwa klucza (może służyć do
budowy odwołań)
• Selektor: które elementy są
unikalnie identyfikowane przez
klucz
• Pole: składnik klucza (może być
kilka)
• Używa się wyrażeń XPath
• Zakres unikalności: element
nadrzędny w stosunku do
deklaracji
Klucze
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
– Elementy mieszane (tekst + znaczniki)
• definiuje się jak zwykłe typy złożone
• atrybut mixed określa, że znaczniki mogą
być przeplecione tekstem
• 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łą
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)
– Połączenie (union)
• 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="typ-
prosty"/>
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
• Kilka przestrzeni nazw– Dokument może korzystać z kilku
przestrzeni nazw – każdej powiązanej z innym schematem
• 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
• 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 substitutionGroupwskazuje 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
• CSS umożliwia formatowanie elementów, ale nie pozwala na modyfikację struktury drzewa dokumentu
produkt {display: block}
nazwa {display: inline;
font-weight: bold}
symbol {display: none}
cena {display: inline;
font-style: italic}
<?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.xml produkty.css
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
Arkusz stylistyczny XSL
XSLTDokument XML
(lub HTML, WML, itp.)
Automatyczna konwersja dokumentu XML do formatu HTML, WML, itp. lub innego dokumentu XML
<?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>
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>
produkty.xml produkty.xsl
Efekt transformacji do HTML wykonanej po stronie przeglądarki
Wyrażenia XPath wybierająceprzetwarzane elementy
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>
Dostęp do atrybutu KODelementu cennik/produkt
Dodanie atrybutu BORDER z wartością 4do elementu<TABLE>(<TABLE BORDER="4"> też OK.)
Transformacja warunkowa w XSLT
<xsl:for-each select="cennik/produkt"><xsl:if test="symbol='1709765'"><TR>
<TD><xsl:value-of select="symbol"/></TD>
<TD><xsl:value-of select="nazwa"/></TD>
<TD><xsl:value-of select="cena"/></TD>
</TR>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="cennik/produkt">
<TR>
<xsl:attribute name="BGCOLOR"><xsl:choose><xsl:when test="symbol='1709765'">green</xsl:when><xsl:when test="symbol='4409724'">yellow</xsl:when><xsl:otherwise>red</xsl:otherwise>
</xsl:choose></xsl:attribute>
<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>
Sortowanie w XSLT<xsl:for-each select="cennik/produkt"><xsl:sort select="cena" data-type="number" order="descending"/><TR>
<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>
<xsl:for-each select="cennik/produkt"><xsl:sort select="nazwa" lang="pl" data-type="text" order="ascending"/><xsl:sort select="symbol" data-type="number" order="ascending"/><TR>
<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>
Automatyczne numerowanie w XSLT
• Domyślnie xsl:number zlicza sąsiadujące węzły węzła źródłowego
• Możliwości zmiany domyślnego zachowania:– <xsl:number value="4"/>: wartość wyrażenia
– <xsl:number level="any"/>: numeracja elementów danego typu w dokumencie
– <xsl:number ... format="I"/>: I-rzymskie, i-rzymskie małe, a/A - litery
– ...
<xsl:for-each select="cennik/produkt">
<TR><TD><xsl:number/></TD><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>
Metody wyprowadzania wyniku• Dostępne metody: xml, html, text
• Metodę określa element xsl:output np. <xsl:output method=”xml”>
• Domyślnie xml, chyba że element główny dokumentu wynikowego to <HTML></HTML>
• Przy generacji HTML metodą xml dokument musi być well-formed:– Znaczniki muszą być zamykane; np. <P>...</P>; znaczniki puste w notacji
XML; np. <BR/>
– Znaczniki nie mogą się nakładać; np. <B> raz <I> dwa </B> trzy </I>
jest błędem
– Wielkość liter istotna; np. <B><i> raz </I></B> jest błędem
– Wartości atrybutów w cudzysłowach
– Cały dokument zawarty w <HTML>..</HTML>
<?xml version="1.0" encoding="windows-1250"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="windows-1250"/>
<xsl:template match="cennik">
<HTML> ... </HTML>
</xsl:template>
</xsl:stylesheet>
Łączenie kilku arkuszy stylów
• Importowanie – xml:import– Może wystąpić tylko w elemencie głównym – xsl:stylesheet –
przed innymi elementami
– Reguły z importowanego arkusza mają niższy priorytet niż reguły zdefiniowane lokalnie
• Włączanie – xml:include– Może wystąpić gdziekolwiek w elemencie głównym po ostatnim
elemencie xsl:import
– Reguły z włączanego arkusza mają taki sam priorytet jak reguły zdefiniowane lokalnie – są traktowane tak jak gdyby były zdefiniowane w miejscu włączenia
<?xml version="1.0" encoding="windows-1250"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="importowany1.xsl"/>
<xsl:import href="importowany2.xsl"/>
...
<xsl:include href="wlaczany.xsl"/>
...
</xsl:stylesheet>
Obiekty formatujące w języku XSL
Tomasz Traczyk
ttraczyk@ia.pw.edu.plhttp://www.ia.pw.edu.pl/~ttraczyk/
� Czym są obiekty formatujące?
� Podstawy XSL-FO
� Elementy XSL-FO
� Narzędzia
� Wykorzystanie XSL-FO w systemach z bazami danych
� Pozycja XSL-FO
Plan prezentacji
Czym są obiekty formatujące?
• XSL (Extensible Stylesheet Language)– Służy do prezentacji zawartości
dokumentów XML
– Części XSL• język transformacji (XSLT)
• język obiektów formatujących (XSL-FO)
• XSL-FO– Zbiór elementów XML pozwalających opisać wygląd (prezentację) dokumentu
– Zawiera cechy niezbędne do składania profesjonalnych publikacji
– Wiele rozwiązań wspólnych z CSS 2
• Standard XSL-FO (W3C)– Pełna rekomendacja XSL, zawierająca FO, ukazała się dopiero w październiku 2001
– Pojawiają się pierwsze implementacje
Po co obiekty formatujące?
• Obecna praktyka– Transformacja XML → HTML
– Wyświetlenie w przeglądarce
• Wady obecnej praktyki– Brak zaawansowanych możliwości formatowania tekstu
(problem częściowo rozwiązany przez CSS 2)
– Słabo uwzględnione zagadnienia stronicowania
– Brak funkcji typowych dla wydawnictw książkowych, np.• żywa pagina
• spis treści
• odsyłacze
• Rozwiązanie– Transformacja XML → XSL-FO
– Prezentacja albo generowanie pliku, np. PDF
Plan prezentacji
� Czym są obiekty formatujące?
� Podstawy XSL-FO
� Elementy XSL-FO
� Narzędzia
� Wykorzystanie XSL-FO w systemach z bazami danych
� Pozycja XSL-FO
Podstawy XSL-FO
• Formatowanie XSL– Rozbiór dokumentu XML
• drzewo wejściowe odpowiada strukturze
wejściowego dokumentu XML
– Transformacja XSLT
• drzewo wynikowe składa się z
elementów XSL-FO
– Serializacja
• powstaje obraz (prezentacja)
• lub plik
– .fo
– albo PDF, PS itp.
• Dokument XSL-FO
– Odpowiada drzewu wynikowemu FO
– Poprawny dokument XML (w sensie valid)
– Znaczniki w przestrzeni nazw fo
• Budowa dokumentu– Element główny root
• definicja stronicowania
• ciągi stron layout-master-set– strumienie tekstu flow
» bloki block
Dokument XML
Rozbiór gramatyczny
Transformacja
XSLT Serializacja
Drzewo wejściowe
Drzewo wynikowe
FO
Prezentacja
Tekst w XSL-FO
• Strumień tekstu– Formatowany tekst „wlewa się” w kolejne
strony• łamie się automatycznie na linie i strony
– Podział na akapity itp. – wymuszony znakowaniem FO
• Cechy tekstu– Rodzaje
• wizualne– czcionki
– podkreślenia itp.
– kolory
– tło
• inne– język
– automatyczne dzielenie wyrazów
– wcięcia
• itd.
– Wartości• domyślne
• określone przez atrybuty FO
• Dziedziczenie
– Cechy są dziedziczone w hierarchii
obiektów formatujących
• elementy podrzędne (zagnieżdżone)
dziedziczą od nadrzędnych (obejmujących)
– Cechy dziedziczone można lokalnie
przykryć
– Na „czubku” hierarchii są cechy domyślne
– Element wrapper służy jako
„przezroczysty” dodatkowy poziom
hierarchii na którym można przykryć cechy
dziedziczone
Przykład<?xml version="1.0" encoding="windows-1250"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="prosta-strona"
page-height="10cm" page-width="10cm"
margin-top="1cm" margin-bottom="1cm"
margin-left="1cm" margin-right="1cm"
>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="prosta-strona">
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center"
text-decoration="underline" space-after="1cm"
>
Przykład XSL-FO
</fo:block>
<fo:block>
To jest banalny przykład XSL-FO.
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Przykład, c.d.<?xml version="1.0" encoding="windows-1250"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="prosta-strona"
page-height="10cm" page-width="10cm"
margin-top="1cm" margin-bottom="1cm"
margin-left="1cm" margin-right="1cm"
>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="prosta-strona">
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center"
text-decoration="underline" space-after="1cm"
>
Przykład XSL-FO
</fo:block>
<fo:block>
To jest banalny przykład XSL-FO.
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Budowa dokumentu
• Element główny fo:root
• Definicja stronicowania fo:layout-master-set
• Właściwy strumień tekstu fo:flow,
wlewany w ciąg stron fo:page-sequence
¼
Przykład, c.d.<?xml version="1.0" encoding="windows-1250"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="prosta-strona"
page-height="10cm" page-width="10cm"
margin-top="1cm" margin-bottom="1cm"
margin-left="1cm" margin-right="1cm"
>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="prosta-strona">
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center"
text-decoration="underline" space-after="1cm"
>
Przykład XSL-FO
</fo:block>
<fo:block>
To jest banalny przykład XSL-FO.
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Przestrzeń nazw
• Zwyczajowo używany prefiks fo
• Zdefiniowana przez URL do W3C
Przykład, c.d.<?xml version="1.0" encoding="windows-1250"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="prosta-strona"
page-height="10cm" page-width="10cm"
margin-top="1cm" margin-bottom="1cm"
margin-left="1cm" margin-right="1cm"
>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="prosta-strona">
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center"
text-decoration="underline" space-after="1cm"
>
Przykład XSL-FO
</fo:block>
<fo:block>
To jest banalny przykład XSL-FO.
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Bloki
• Tekst podzielony jest na bloki, odpowiadające
np. akapitom
Plan prezentacji
� Czym są obiekty formatujące?
� Podstawy XSL-FO
� Elementy XSL-FO
� Narzędzia
� Wykorzystanie XSL-FO w systemach z bazami danych
� Pozycja XSL-FO
Model strony
• Model strony– Strona „fizyczna”
• z marginesami niezapisywalnymi
– Strona „logiczna”• ciało
• marginesy zapisywalne
• obszary na zapisywalnych marginesach(na nagłówki, stopki itp.)
• Kierunki
– Bezwzględne – związane z nośnikiem
• left – right, top – bottom
– Względne – związane z kierunkiem pisania
(zależnym np. od języka)
• start – end, before – after
margin-top
region-before
region-after
region-start re
gion-end
top related