Mariusz Chmielewski - ISI WAT
1
por. mgr inż. Mariusz Chmielewski
Instytut Systemów Informatycznych
Wydział Cybernetyki
Wojskowa Akademia Techniczna
Techniki Internetowe
Mariusz Chmielewski - ISI WAT
2
Plan wykładu
Plan wykładu
• Geneza języka
• Główne cechy XML
• Elementy XML
• Praktyczne uwagi – konstrukcje języka
• Języki oparte na XML
• Parsery XML – strategie, narzędzia,
zasady działania
• DTD – Document Type Definiton
• XML Schema
Mariusz Chmielewski - ISI WAT
3
Języki znaczników
Języki znaczników
• Język znaczników (ang. markup
language) - format dokumentu, który
obok treści zawiera także opisujące ją
informacje. Informacje te dotyczą
danych na temat znaczenia lub wyglądu
dokumentu i są wyrażane poprzez
umieszczone w tekście znaczniki.
• Języki znaczników są także
wykorzystywane w przemyśle publikacji
do wymiany dokumentów pomiędzy
autorami, redaktorami oraz drukarniami.
Mariusz Chmielewski - ISI WAT
4
Języki znacznikowe - SGML
Języki znacznikowe - SGML
• SGML (ang. Standard Generalized Markup Language) -
uogólniony język znaczników ujednolicający struktury
i format różnego typu danych. Pozwala zapisać je w
formie dokumentu tekstowego i w związku z tym jest
łatwo przenoszalny renderowalny w różnych
systemach elektronicznego przekazu danych.
• SGML w przeciwieństwie od języków znaczników
dedykowanych (takich jak np. HTML):
– nie jest określonym zbiorem znaczników i reguł ich
użytkowania,
– nadrzędnym językiem służącym do definiowania dowolnych
znaczników i ustalania zasad ich poprawnego użytkowania.
• Języka SGML używa się praktycznie do dwóch celów:
– precyzyjnego definiowania zbiorów znaczników
przeznaczonych do konkretnych zastosowań – przykładem
jest język HTML;
– ujednolicania zasad pisania i przekazywania dokumentów
tekstowych w obrębie dużych firm lub instytucji.
Mariusz Chmielewski - ISI WAT
5
Języki znacznikowe - SGML
Języki znacznikowe - SGML
• W obydwu przypadkach dokument w języku SGML
składa się z trzech części:
– deklaracji dokumentu, która definiuje ogólne reguły
stosowane w zapisie dokumentu
– np. maksymalna długość nazwy elementu, znak
używany jako początek znacznika (domyślnie jest to
znak < );
– DTD – definicji typu dokumentu, czyli definicji
wszystkich znaczników i reguł ich stosowania;
– właściwego dokumentu – tekst wraz ze znacznikami.
• SGML jest złożonym językiem, co jest powodem bardzo
mało narzędzi implementuje pełen standard. Zwykle
edytory SGML obsługują większość powszechnie
używanych elementów języka i interpretują jedynie część
pliku deklaracyjnego.
Mariusz Chmielewski - ISI WAT
6
Języki znacznikowe - SGML
Języki znacznikowe - SGML
• W związku z trudnościami implementacyjnymi
powstał język i standard XML będący początkowo
podzbiorem reguł SGML (pierwsza wersja powstała
w 2000 roku).
• Standard XML można obsługiwać narzędziami
SGML-owymi modyfikując odpowiednio plik
deklaracyjny.
• Ponieważ w praktyce zarówno deklaracja
dokumentu SGML jak i DTD "zaszyte" są najczęściej
w oprogramowaniu (np. w przypadku języka HTML
w przeglądarkach i programach do pisania stron
WWW), użytkownicy końcowi, nie mają
bezpośredniej styczności z DTD tej odmiany języka
SGML, z której właśnie korzystają.
Mariusz Chmielewski - ISI WAT
7
Definicja języka XML
Definicja języka XML
• www.w3.org/XML
“XML is a simple, very flexible text format
derived from SGML. Originally designed to
meet the challenges of large-scale electronic
publishing, XML is also playing an
increasingly important role in the exchange
of a wide variety of data on the Web and
elsewhere”
• XML definiuje strukturę dokumentu,
pozostawiając interpretację znaczenia
elementów tej struktury programiście;
• XML jest sposobem meta-opisu, dowolnej
innej struktury danych;
Mariusz Chmielewski - ISI WAT
8
Definicja
Definicja
Wikipedia
Wikipedia
• XML (ang. Extensible Markup Language, w
wolnym tłumaczeniu Rozszerzalny Język
Znaczników) to uniwersalny język formalny
przeznaczony do reprezentowania różnych
danych w ustrukturalizowany sposób. XML jest
niezależny od platformy, co umożliwia łatwą
wymianę dokumentów pomiędzy różnymi
systemami i znacząco przyczyniło się do
popularności tego języka w dobie Internetu.
XML jest podzbiorem języka SGML, tj. każdy
dokument XML jest też dokumentem SGML.
XML jest rekomendowany oraz specyfikowany
przez organizację W3C.
Mariusz Chmielewski - ISI WAT
9
Struktura i znaczenie dokumentu
Struktura i znaczenie dokumentu
<?xml version="1.0" encoding="UTF-8" ?>
<person identity-nr=„cc335539">
<birth-date year="1990" month=„3" day=„10" />
<first-name>Harry</first-name>
<surname>Corner</surname>
</person>
<?xml version="1.0" encoding="UTF-8" ?>
<xxxxxx xxxxxxxx-xx="xxxxxxxx">
<xxxxx-xxxx xxxx="xxxx" xxxxx="x" xxx="xx" />
<xxxxx-xxxx>xxxxx</xxxxx-xxxx>
<xxxxxxx>xxxxx</xxxxxxx>
</xxxxxx>
Meaning
Structure only
Mariusz Chmielewski - ISI WAT
10
Struktura i znaczenie dokumentu
Struktura i znaczenie dokumentu
<?xml version="1.0" encoding="UTF-8"?>
<książka-telefoniczna
kategoria="bohaterowie książek">
<!-- komentarz -->
<osoba charakter="dobry">
<imię>Ambroży</imię>
<nazwisko>Kleks</nazwisko>
<telefon>123-456-789</telefon>
</osoba>
<osoba charakter="zły">
<imię>Alojzy</imię>
<nazwisko>Bąbel</nazwisko>
<telefon/>
</osoba>
</książka-telefoniczna>
Mariusz Chmielewski - ISI WAT
11
Struktura i znaczenie dokumentu
Struktura i znaczenie dokumentu
• XML powstał jako „uproszczenie”
standardu SGML
• Standard Generalized Markup Language
(~1960/70), standard ISO
• SGML jest bardzo rozbudowany, kosztowny
w implementacji i długotrwały w
opanowaniu
• XML – podzbiór SGML, 1998 (specyfikacja
tylko ok. 20 stronicowa)
• XML szybko się rozprzestrzenił, powstają
parsery dla wielu języków
Mariusz Chmielewski - ISI WAT
12
Cechy XML
Cechy XML
• jest między-platformowym niezależnym od
oprogramowania i sprzętu narzędziem do
wymiany danych
• jest metajęzykiem - nie zawiera
predefiniowanych znaczników, pozwala na ich
samodzielne zdefiniowanie. Języki zbudowane
na podstawie XML to tzw. aplikacje XML.
• XML używa DTD (Document Type Definition) do
opisu struktury danych (składni języka), wraz z
nim jest samo opisujący się (ang. self-
decriptive)
Celem XML jest przechowywanie, przenoszenie i
wymiana danych. XML nie został
zaprojektowany do wyświetlania danych.
Mariusz Chmielewski - ISI WAT
13
Zalety języka XML
Zalety języka XML
• Konwersja danych
– pozwala redukować koszt i złożoność operacji wymiany
danych
– umożliwia korzystanie z danych przez wiele różnych aplikacji
• XML może być również użyty do składowania
(przechowywania) danych, dzięki czemu mogą one
być przetwarzane przez ogólne (nie specjalizowane)
aplikacje.
• Dostępność z wykorzystaniem technologii
internetowych
– ponieważ XML jest niezależny od platformy (sprzętowej,
systemowej)
– oprogramowanie klienckie może korzystać z XML jak z
źródeł danych, tak jak to jest w przypadku baz danych.
Mariusz Chmielewski - ISI WAT
14
Dokument XML
Dokument XML
<bookstore>
<book category="COOKING">
<title lang="en">Everyday
Italian</title>
<author>Giada De
Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning
XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Mariusz Chmielewski - ISI WAT
15
Odpowiadająca struktura
Odpowiadająca struktura
Mariusz Chmielewski - ISI WAT
16
Elementy języka: prolog
Elementy języka: prolog
• XML jest plikiem tekstowym
rozpoczynającym się od prologu
<?xml version=”1.0” encoding=”UTF-8”?>
• Wszystkie parsery muszą wspierać
przynajmniej dwa standardy
kodowania UTF-8 i UTF-16
• Prolog jest opcjonalny, powinien być
wyspecyfikowany
Mariusz Chmielewski - ISI WAT
17
Elementy języka:
Elementy języka:
tagi
tagi
• Struktura jest zdefiniowana przez
tagi (ang. markup)
– Tag to sekwencja alfanumerycznych
znaków zawartych między '<' i '>'
• Tag otwierający: <person>
• Tag zamykający: </person>
• Tag pusty (bez ciała): <person />
– Przykłady:
• <fee>129</fee>
• <age>79</age>
• <marital-status>married</marital-status>
Mariusz Chmielewski - ISI WAT
18
Elementy języka: atrybuty
Elementy języka: atrybuty
• Atrybuty są częścią struktury i pozwalają na
związanie z tagami par nazwa-wartość
– Jedynie tagi otwierające mogą posiadać
atrybuty
– Nazwa atrybutu jest unikalna w obrębie jednego
tagu
• niepoprawny przykład: <person age=”79” age=”50”
/>
• Przykłady
– <fee currency=”usd”>129</fee>
– <person marital-status=”married” age=”79” />
Mariusz Chmielewski - ISI WAT
19
Elementy języka: instrukcje sterujące
Elementy języka: instrukcje sterujące
• Instrukcje sterujące nie są częścią
dokumentu, ale są wykrywane i
sygnalizowane przez parsery XML
• Instrukcja sterująca wygląda
następująco:
<?my processing instruction is here ?>
• Prolog w XML jest przykładem
instrukcji sterującej
Mariusz Chmielewski - ISI WAT
20
Elementy języka: komentarze
Elementy języka: komentarze
• Komentarze to bloki tekstowe występujące
między sekwencjami znaków: '<!--' i '-->'
• Przykłady:
<person>
<!-- here goes definition of a person -->
<surname>Weiss
<!-- who is this guy? -->
</surname>
</person>
– Komentarze nie mogą być deklarowane w
definicji tagów
– W komentarzach nie może pojawić się sekwencja
„--”
Mariusz Chmielewski - ISI WAT
21
Elementy języka: tekst
Elementy języka: tekst
<poem>
<author>
<surname>
Białoszewski
</surname>
<first-name>
Miron
</first-name>
</author>
<title>
Być to...
</title>
<contents>
być
to źle
a nie?
</contents>
</poem>
<poem>
<author>
<surname>
Białoszewski
</surname>
<first-name>
Miron
</first-name>
</author>
<title>
Być to...
</title>
<contents>
być
to źle
a nie?
</contents>
</poem>
Blok
tekstu
Blok
tekstu
zawierając
y znaki
białe
Mariusz Chmielewski - ISI WAT
22
Elementy języka: tekst
Elementy języka: tekst
• Znaki białe mogą być, na życzenie
programisty, zignorowane przez
parsery XML
• Jeśli zachodzi potrzeba umieszczenia
znaków specjalnych (<>&), należy
posłużyć się albo encjami, albo
blokiem CDATA
– Wszystkie znaki w bloku CDATA są
przekazywane do parsera XML
dokładnie tak, jak zostały zapisane
Mariusz Chmielewski - ISI WAT
23
Blok
Blok
CDAT
CDAT
A
A
<poem>
<author>
<surname>
Białoszewski
</surname>
<first-name>
Miron
</first-name>
</author>
<title>
Namuzowywanie
<title>
<contents>
<![CDATA[
Muzo
Natchniuzo
tak
ci
końcówkuję
z niepisaniowości
natreść
mi
ości
i
uzo
]]>
</contents>
</poem>
Text block within CDATA
CDATA start
CDATA end
Mariusz Chmielewski - ISI WAT
24
Kodowanie znaków w XML
Kodowanie znaków w XML
• Prolog mówi parserowi (narzędziom
przetwarzania) jakiego kodowania należy
użyć w interpretacji dokumentu
– Nazwy stron kodowych: IETF RFC 1766
– Domyślna 'UTF-8' (Unicode)
• Przykład: plik XML zawierający znak
diakrytyczny „ą”
• Kodowanie UTF-16 (ą=0x0105)
<?xml version="1.0" encoding="UTF-16"?>
<tag>
ą
</tag>
Mariusz Chmielewski - ISI WAT
25
Kodowanie znaków w XML
Kodowanie znaków w XML
• Kodowanie ISO8859-2 (ą = 0xB1)
<?xml version="1.0" encoding="iso8859-2"?>
<tag>
ą
</tag>
Mariusz Chmielewski - ISI WAT
26
Encje w treści dokumentu
Encje w treści dokumentu
• Niektóre znaki ('<', '&', '>') mają dla
parsera specjalne znaczenie, trzeba je
albo zakodować, albo umieścić w bloku
CDATA
• Encje: '&' + entity_name + ';'
• Przykład:
<?xml version="1.0" encoding="UTF-8"?>
<tag>
©
Java Verified
&
Java Certified
</tag>
© Java Verified & Java Certified
Numeric entiry (character value)
Predefined entity
Mariusz Chmielewski - ISI WAT
27
Praktyczne uwagi – konstrukcje języka
Praktyczne uwagi – konstrukcje języka
• w XML wszystkie znaczniki muszą być zamknięte
• możliwe jest definiowanie elementów pustych
<element_pusty> </element_pusty>
jest równoznaczne z
<element_pusty/>
• znakiem końca wiersza (nowej linii) jest LF (a nie
Windows'owe CR/LF)
• znaczniki mogą posiadać atrybuty, składające się z
nazwy atrybutu i jego wartości ujętej w cudzysłowy
lub apostrofy
nieprawidłowo
<samochod typ=osobowy>
prawidłowo
<samochod typ="osobowy">
Mariusz Chmielewski - ISI WAT
28
Praktyczne uwagi – konstrukcje języka
Praktyczne uwagi – konstrukcje języka
• w dokumentach XML rozróżnialna jest
wielkość liter:
znaczniki <Name> i <NAME> są rozpoznawane
jako różne
• nazwy znaczników:
– mogą zawierać litery, cyfry i inne znaki
– nie mogą zaczynać się cyfrą lub kropką
– nie mogą zaczynać się ciągiem znaków
"xml"
– nie mogą zawierać spacji
– zaleca się unikanie znaków -, . , :
Mariusz Chmielewski - ISI WAT
29
Praktyczne uwagi – konstrukcje języka
Praktyczne uwagi – konstrukcje języka
• Dokument XML musi posiadać element
będący korzeniem, pozostałe elementy
powinny być zagnieżdżone odwzorowując
strukturę drzewiastą.
<root>
<element>
<podelement>......</podelement>
</element>
</root>
•
XML wspiera standard kodowania znaków narodowych
Unicode (możliwy zapis pojedynczego znaku przy pomocy
dwóch bajtów danych)
•
Dokument spełniający powyższe reguły składniowe
określany jest jako dobrze sformułowany (ang. well-
formed)
Mariusz Chmielewski - ISI WAT
30
Element XML
Element XML
• Elementem XML jest wszystko co znajduje się
pomiędzy znacznikiem początkowym i końcowym.
• Elementy ze względu na przechowywaną zawartość
dzielimy na:
– elementy puste
<samochod typ="sportowy"> </samochod>
– elementy proste
<nazwisko> Kowalski </nazwisko>
– elementy złożone - zawierające inne elementy
<osoba>
<imie> Artur </imie>
<nazwisko> Kowal </nazwisko>
</osoba>
– elementy mieszane - element złożony zawierający
dodatkowo treść
<osoba>
<imie> Artur </imie>
<nazwisko> Kowal </nazwisko>
</osoba>
Mariusz Chmielewski - ISI WAT
31
Rodzina języków XML
Rodzina języków XML
• OpenDocument - OASIS Open Document Format for
Office Applications, dokumenty biurowe
• SMIL - Synchronized Multimedia Integration
Language, opis prezentacji multimedialnych
• SVG - Scalable Vector Graphics, grafika wektorowa
• MathML - Mathematical Markup Language, opis
formuł matematycznych
• XAML - Extensible Application Markup Language,
GUI w .NET począwszy od wersji 3.0
• XHTML - Extensible HyperText Markup Language,
strony WWW
• XSL - Extensible Stylesheet Language,
przekształcanie XML-i
• XSLT - XSL Transformations, Przekształcenia
Rozszerzalnego Języka Arkuszy Stylów
• XUL - XML-based User-interface Language, GUI
Mariusz Chmielewski - ISI WAT
32
OpenDocument
OpenDocument
• OpenDocument (znany również jako ODF oraz
ISO/IEC 26300, pełna nazwa: OASIS Open
Document Format for Office Applications) to
otwarty standard ISO formatu plików pakietów
biurowych. Obejmuje dokumenty tekstowe,
arkusze kalkulacyjne, wykresy i prezentacje
multimedialne.
• Pierwsza wersja formatu bazowała na XML-
owym formacie pakietu OpenOffice.org.
Obecnie OpenDocument jest rozwijany przez
niezależną organizację OASIS (Organization
for the Advancement of Structured
Information Standards).
Mariusz Chmielewski - ISI WAT
33
OpenDocument
OpenDocument
• OpenDocument jest alternatywą dla zamkniętych
formatów dokumentów, kontrolowanych najczęściej
przez firmy, które je opracowały - przede
wszystkim dla formatów DOC, XLS i PPT,
używanych w pakiecie biurowym Microsoft Office.
• Użytkownicy dokumentów zgodnych ze standardem
OpenDocument mają do nich dostęp z programów
różnych producentów, co łamie monopol
dotychczasowych producentów oprogramowania i
dysponentów formatów dokumentów.
• Możliwy staje się wybór bądź zmiana
oprogramowania biurowego bez konieczności
zmiany formatu używanych dokumentów (co
zwiększałoby ryzyko utraty części informacji z
dokumentów).
Mariusz Chmielewski - ISI WAT
34
Synchronized Multimedia Integration Language
Synchronized Multimedia Integration Language
• SMIL ("smail", ang. Synchronized
Multimedia Integration Language) jest
standardem zalecanym przez W3C do
opisu prezentacji multimedialnych z
wykorzystaniem XML.
• SMIL określa m.in. znaczniki
synchronizacji, układu, animacji, przejść
obrazu oraz zagnieżdżania. Pozwala na
wstawianie obrazu, animacji, muzyki
oraz filmów i umożliwia synchronizację
tych elementów multimedialnych.
Mariusz Chmielewski - ISI WAT
35
SVG – Scalable Vector Graphics
SVG – Scalable Vector Graphics
• SVG (ang. Scalable Vector Graphics) – uniwersalny format
dwuwymiarowej, statycznej i animowanej grafiki
wektorowej, nieobwarowany licencjami i patentami,
stworzony w 1999 roku przez W3C z myślą o zastosowaniu
go na stronach WWW.
• Używany również jako niezależny od platformy
systemowej format grafiki. SVG należy do rodziny języków
XML.
• W roku 2001 format SVG uzyskał status rekomendacji
W3C. Jego obsługa jest zaimplementowana w
przeglądarce Amaya, której rozwój wspiera W3C, oraz w
przeglądarkach Mozilla Firefox, od wersji 1.5, Konqueror i
Opera, począwszy od wersji 8 beta 3.
• SVG obsługiwany jest w przeglądarkach internetowych z
reguły po przez rozszerzenie np. firmy Adobe.
• Pliki SVG mogą być przetwarzane w szeregu programów
niezwiązanych z przeglądarkami.
Mariusz Chmielewski - ISI WAT
36
Mathematical Markup Language
Mathematical Markup Language
• MathML (ang. Mathematical Markup Language,
matematyczny język znaczników) to język będący
zastosowaniem XML-a, służący do opisywania wzorów
i symboli matematycznych.
• Specyfikacje języka MathML opracowywane są przez
W3C. Aktualną wersją jest MathML 2.0. W wersji tej
wprowadzono podział na znaczniki prezentacyjne,
opisujące sposób renderowania wzorów, oraz
znaczniki semantyczne, opisujące matematyczne
znaczenie wzorów i mogące być wykorzystywane do
obliczeń.
• MathML jest na coraz szerszą skalę wykorzystywany
do prezentacji wzorów w Internecie na stronach
WWW. Znaczniki MathML można umieścić zarówno w
osobnym dokumencie (z rozszerzeniem .mml), jak i
włączyć do dokumentu XHTML.
Mariusz Chmielewski - ISI WAT
37
Mathematical Markup Language
Mathematical Markup Language
<math>
<mrow>
<msup>
<mfenced>
<mrow>
<mi>x</mi>
<mo>+</mo>
<mi>y</mi>
</mrow>
</mfenced>
<mn>4</mn>
</msup>
</mrow>
</math>
przykład obrazuje
zapis
x + y^4.
Mariusz Chmielewski - ISI WAT
38
eXtensible Application Markup Language
eXtensible Application Markup Language
• XAML (wym. "zammel", ang. eXtensible
Application Markup Language) jest językiem
opisu interfejsu użytkownika wykorzystywanym w
technologii Windows Presentation Foundation,
która jest elementem platformy .NET Framework
począwszy od wersji 3.0.
• XAML jest językiem opartym na języku XML
zoptymalizowanym do opisu bogatych,
wizualnych interfejsów, takich jak tworzone w
Adobe Flash.
• SVG, LZX czy XUL są przykładami podobnych
języków interfejsu użytkownika rozprowadzonymi
na warunkach wolnego oprogramowania.
Mariusz Chmielewski - ISI WAT
39
eXtensible Application Markup Language
eXtensible Application Markup Language
• W użyciu pliki XAML tworzone są ręcznie lub przy
pomocy wizualnych narzędzi, takich jak Microsoft
Expression Studio.
• Wynikowy kod XML interpretowany jest przez
podsystem systemu operacyjnego odpowiedzialny
za wyświetlanie danych, co zastępuje warstwę
GDI z poprzednich wersji Windows.
• Elementy XAML mapowane są do obiektów
Common Language Runtime, natomiast atrybuty
do właściwości lub zdarzeń tych obiektów.
• XAML został stworzony w celu zapewnienia
wsparcia klasom i metodom w architekturze .NET,
które wykorzystywane są do obsługi interakcji z
użytkownikiem, zwłaszcza wyświetlaniem.
Mariusz Chmielewski - ISI WAT
40
eXtensible Application Markup Language
eXtensible Application Markup Language
Mariusz Chmielewski - ISI WAT
41
Extensible HyperText Markup Language
Extensible HyperText Markup Language
• XHTML (ang. Extensible HyperText Markup Language,
rozszerzalny hipertekstowy język znaczników) – język
służący do tworzenia stron WWW. XHTML jest
następcą języka HTML, a specyfikacje XHTML
przygotowuje organizacja W3C.
• W odróżnieniu od HTML-a (który jest aplikacją języka
SGML), dokumenty pisane w XHTML są zgodne z
oficjalną specyfikacją XML. Dokumenty w XHTML są
poprawnymi dokumentami XML i dzięki temu można
je łatwo generować z innych dokumentów XML przy
pomocy transformacji XSLT, a także automatycznie
przekształcać w inne formy XML-a.
• Jedną z największych zalet XHTML jest możliwość
łączenia z innymi językami zgodnymi z XML, np.
MathML czy SVG. Odbywa się to dzięki wykorzystaniu
mechanizmu przestrzeni nazw XML.
Mariusz Chmielewski - ISI WAT
42
Extensible HyperText Markup Language
Extensible HyperText Markup Language
• Obecnie przeglądarki, Firefox, Opera, w pełni
obsługują XHTML. Zgodność ze standardem jest
jednak pomijana w przypadku np. Internet
Explorer’a
• W praktyce zmusza to wytwórców technologii do
stosowania dla dokumentów XHTML starego
HTML-owego typu zawartości – dzięki temu, że
XHTML w wersji 1.0 "symuluje" HTML 4 (tzn.
posiada praktycznie taki sam zestaw elementów i
atrybutów)
Mariusz Chmielewski - ISI WAT
43
Extensible Stylesheet Language
Extensible Stylesheet Language
• XSL (ang. Extensible Stylesheet Language, w wolnym
tłumaczeniu Rozszerzalny Język Arkuszy Stylów) –
funkcyjny język programowania opisujący sposób
prezentacji i przekształceń dokumentów zapisanych w
XML. W języku tym operuje się na znacznikach i ich
ewaluacji, na podobnej zasadzie, co we wszystkich
językach operujących na makrach.
• Rodzina XSL według starego podziału składa się z 3
części:
– XSL Transformations (XSLT) – język dla
przekształceń dokumentów XML,
– XML Path Language (XPath) – język opisujący dostęp
lub odwołanie do fragmentów dokumentów XML,
– XSL Formatting Objects (XSL-FO) – słownik opisujący
formatowanie.
Mariusz Chmielewski - ISI WAT
44
Extensible Stylesheet Language
Extensible Stylesheet Language
• Nowy podział zakłada istnienie:
– XSL Transformations (XSLT) – język dla przekształceń
dokumentów XML,
– XML Path Language (XPath) – język opisujący dostęp
lub odwołanie do fragmentów dokumentów XML,
– Extensible Stylesheet Language (XSL) – dawny XSL-
FO, słownik opisujący formatowanie,
– XML Query Language – (XQuery) – język zapytań.
• Pliki XSL są poprawnymi dokumentami XML, a cecha ta
jest wykorzystywana do tworzenia rekurencyjnych
konstrukcji. Można też zaryzykować twierdzenie, że
XSL jest rozszerzalnym makroprocesorem.
• Istnieje wiele różnych działających implementacji XSLT
1.0. - XSLT 2.0 i XPath 2.0 oraz XSL 1.1.
Mariusz Chmielewski - ISI WAT
45
Extensible Stylesheet Language Transformations
Extensible Stylesheet Language Transformations
• XSLT (ang. XSL Transformations, Extensible Stylesheet
Language Transformations, w wolnym tłumaczeniu
Przekształcenia Rozszerzalnego Języka Arkuszy Stylów) jest
opartym na XML-u językiem transformacji dokumentów
XML.
• Pozwala na przekształcenie dokumentów zapisanych w
jednym formacie XML na dowolny inny format zgodny ze
składnią XML-a (np. na stronę WWW XHTML, wzór
matematyczny MathML lub dokument biurowy ODF), jak
również na zwykły HTML i czysty tekst.
• Dzięki dużej sile wyrazu, łatwości implementacji i
powszechnemu stosowaniu XML-a jako standardu dla
zapisu informacji XSLT jest uniwersalnym narzędziem
znajdującym zastosowanie w wielu rodzajach
oprogramowania.
• Najbardziej popularne to generowanie stron WWW w
serwisach internetowych oraz konwersja pomiędzy
alternatywnymi formatami np. w pakietach biurowych.
Mariusz Chmielewski - ISI WAT
46
Extensible Stylesheet Language Transformations
Extensible Stylesheet Language Transformations
• XSLT jest rozwijany przez W3C jako część rodziny języków XSL
(obok XPath i XSL-FO). Powstał pod wpływem języków funkcyjnych
oraz języków opartych na dopasowywaniu wzorców (ang. pattern
matching)
• Jego bezpośrednim poprzednikiem jest DSSSL, odpowiednik XSLT
dla SGML-a.
• Aktualnie obowiązującą wersją XSLT jest 2.0.
Mariusz Chmielewski - ISI WAT
47
XML-based User-interface Language
XML-based User-interface Language
• XUL (wym. "zul", ang. XML-based User-
interface Language) jest językiem
zgodnym z XML używanym do opisu
interfejsu WEB oraz GUI, wykorzystywanym
między innymi w programach
– Mozilla Suite, Mozilla Firefox, Mozilla
Thunderbird, Nvu itp.
• XUL nie jest jeszcze standardem
powszechnym pomimo, że używa wielu
istniejących standardów i technologii,
włączając takie technologie jak CSS,
JavaScript, DTD oraz RDF.
Mariusz Chmielewski - ISI WAT
48
Przetwarzanie dokumentów XML - Parsery
Przetwarzanie dokumentów XML - Parsery
• Parser - moduł programowy, które
umożliwia interpretację plików XML
• Dwie strategie: DOM i SAX [pull/ push]
– DOM (Document Object Model)
• Obiektowa reprezentacja dokumentu
• Łatwiejsza w obsłudze, wymaga jednak większej
zajętosci pamięci i przetwarzania całego
dokumentu XML
– SAX (Simple API for XML)
• Interfejs oparty na zdarzeniach
• Interpretacja ‘w locie’; zdarzenia są przekazywane
do kodu programu, przetworzona część pliku nie
jest pamiętana
Mariusz Chmielewski - ISI WAT
49
Poprawność dokumentu
Poprawność dokumentu
• Dokument XML poprawny składniowo (ang. well-
formed):
– każdy element musi być zamknięty,
– nie ma nakładających się elementów,
– wartości atrybutów w apostrofach lub
cudzysłowach,
• Dokument XML poprawny strukturalnie (ang. valid):
– struktura dokumentu zgodna ze strukturą
zdefiniowaną w definicji typu dokumentu,
– obecne wszystkie wymagane atrybuty.
Mariusz Chmielewski - ISI WAT
50
Document Type Definition
Document Type Definition
DTD (Document Type Definition) - opisuje gramatykę
dokumentu XML (zasady zagnieżdżania elementów)
DTD zawarte może być bezpośrednio w dokumencie
XML lub w osobnym pliku
<!DOCTYPE utwor [
<!ELEMENT utwor (autor, tytul, zwrotka+)>
<!ATTLIST utwor typ CDATA #REQUIRED>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT tytul (#PCDATA)>
<!ELEMENT zwrotka (wers+)>
<!ELEMENT wers (#PCDATA)>
]>
DTD umożliwia kontrolę poprawności (walidację)
dokumentu.
Mariusz Chmielewski - ISI WAT
51
Document Type Definition - zasady
Document Type Definition - zasady
• Zawartość elementu opisywana jest poprzez znacznik:
<!ELEMENT nazwa_elementu definicja_typu>
• Definiując typ elementu możemy użyć wyrażeń:
– ANY - dowolna zawartość
– EMPTY - element pusty
– #PCDATA - ciąg tekstowy
– ujęta w nawiasy () sekwencja oddzielonych przecinkiem nazw
elementów
– | - alternatywa (lub) wystąpienia elementów
• Nazwy elementów mogą być uzupełnione o specjalne znaki
– brak znaku - podelement musi wystąpić dokładnie jeden raz
– + - podelement musi wystąpić co najmniej raz (1,N)
– ? - podelement może wystąpić raz lub wcale (0,1)
– * - dowolna liczba wystąpień, również brak (0,N)
Przykład:
<!ELEMENT osoba ( imie, nazwisko, ( pesel | nip )? , data_ur?, dziecko* ) >
Mariusz Chmielewski - ISI WAT
52
Document Type Definition - zasady
Document Type Definition - zasady
•
Możliwość wystąpienia atrybutów elementu deklaruje
się poprzez znacznikowi:
<!ATTLIST nazwa_elementu nazwa_atrybutu
typ_lub_lista_możliwych_wartości) modyfikator 'wartosc_domyslna' >
•
dostępne predefinowane typy danych to
– CDATA - dane tekstowe
– ID - unikalny identyfikator
– IDREF, IDREFS - wskazanie na unikalny identyfikator, lista
wskazań
– ENTITY, ENTITIES - wskaźnik encji zewnętrznej, lista wskazań
•
modyfikator
– #REQUIRED - atrybut musi wystąpić i mieć nadana wartość
– #IMPLIED - procesor XML musi poinformować o braku atrybutu
– #FIXED - wartość atrybutu musi pokrywać się z wartością
domyślną
Przykład:
<!ATTLIST osoba plec (mezczyzna | kobieta) 'mezczyzna' #REQUIRED >
Mariusz Chmielewski - ISI WAT
53
Document Type Definition - przykład
Document Type Definition - przykład
<
!ELEMENT
faktury (faktura+)>
<
!ELEMENT
faktura (klient, data,wiersz+)>
<
!ELEMENT
klient (k_nazwa, miasto, logo) >
<
!ELEMENT
k_nazwa (#PCDATA)>
<
!ELEMENT
miasto (#PCDATA)>
<
!ELEMENT
logo EMPTY>
<
!ATTLIST
logo src>
<
!ELEMENT
data (#PCDATA)>
<
!ELEMENT
wiersz (towar, ilosc)>
<
!ELEMENT
towar (t_nazwa, jm, vat)>
<
!ELEMENT
t_nazwa (#PCDATA)>
<
!ELEMENT
cena (#PCDATA)>
<
!ELEMENT
jm (#PCDATA)>
<
!ELEMENT
vat (#PCDATA)>
<
!ELEMENT
ilosc (#PCDATA)>
Mariusz Chmielewski - ISI WAT
54
Document Type Definition – przykład 2
Document Type Definition – przykład 2
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
<people>
<person id=„mc102">
<first-name>Mariusz</first-name>
<surname>Chmielewski</surname>
<age>29</age>
</person>
<person id=„dc103">
<first-name>Dariusz</first-name>
<surname>Chmielewski</surname>
<age>27</age>
</person>
</people>
<!ELEMENT people (person*) >
Mariusz Chmielewski - ISI WAT
55
Document Type Definition – przykład 2
Document Type Definition – przykład 2
<!ELEMENT people (person*) >
<!ELEMENT person (first-name,
surname, age) >
<people>
<
person
id=„mc102">
<first-name>Mariusz</first-name>
<surname>Chmielewski</surname>
<age>29</age>
</
person
>
<
person
id=„dc103">
<first-name>Dariusz</first-name>
<surname>Chmielewski</surname>
<age>27</age>
</
person
>
</people>
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
Mariusz Chmielewski - ISI WAT
56
Document Type Definition – przykład 2
Document Type Definition – przykład 2
<!ELEMENT people (person*) >
<!ELEMENT person (first-name,
surname, age) >
<!ELEMENT first-name (#PCDATA) >
<!ELEMENT surname (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<people>
<person
id=„mc102"
>
<first-name>Mariusz</first-name>
<surname>Chmielewski</surname>
<age>29</age>
</person>
<person
id=„dc103"
>
<first-name>Dariusz</first-name>
<surname>Chmielewski</surname>
<age>27</age>
</person>
</people>
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
Mariusz Chmielewski - ISI WAT
57
Document Type Definition – przykład 2
Document Type Definition – przykład 2
<people>
<person
id=„mc102"
>
<first-name>Mariusz</first-name>
<surname>Chmielewski</surname>
<age>29</age>
</person>
<person
id=„dc103"
>
<first-name>Dariusz</first-name>
<surname>Chmielewski</surname>
<age>27</age>
</person>
</people>
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
<!ELEMENT people (person*) >
<!ELEMENT person (first-name,
surname, age) >
<!ATTLIST person id ID #REQUIRED>
<!ELEMENT first-name (#PCDATA) >
<!ELEMENT surname (#PCDATA) >
<!ELEMENT age (#PCDATA) >
Mariusz Chmielewski - ISI WAT
58
DTD
DTD
załączone z dokumentem
załączone z dokumentem
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE people [
<!ELEMENT people (person*) >
<!ELEMENT person (first-name, surname, age) >
<!ATTLIST person id ID #REQUIRED>
<!ELEMENT first-name (#PCDATA) >
<!ELEMENT surname (#PCDATA) >
<!ELEMENT age (#PCDATA) >
]>
<people>
<person id=„mc102">
<first-name>Mariusz</first-name>
<surname>Chmielewski</surname>
<age>29</age>
</person>
<person id=„dc103">
<first-name>Dariusz</first-name>
<surname>Chmielewski</surname>
<age>27</age>
</person>
</people>
Mariusz Chmielewski - ISI WAT
59
DTD wskazane jako plik w systemie
DTD wskazane jako plik w systemie
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE people SYSTEM "people.dtd" >
<people>
<person id=„mc102">
<first-name>Mariusz</first-name>
<surname>Chmielewski</surname>
<age>29</age>
</person>
<person id=„dc103">
<first-name>Dariusz</first-name>
<surname>Chmielewski</surname>
<age>27</age>
</person>
</people>
Mariusz Chmielewski - ISI WAT
60
DTD wskazane jako „publiczny” zasób
DTD wskazane jako „publiczny” zasób
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE article
PUBLIC "-//PP//DTD EXAMPLE1//PL"
"http://www.xxx.pl/example.dtd"
<people>
<person id=„mc102">
<first-name>Mariusz</first-name>
<surname>Chmielewski</surname>
<age>29</age>
</person>
<person id=„dc103">
<first-name>Dariusz</first-name>
<surname>Chmielewski</surname>
<age>27</age>
</person>
</people>
Mariusz Chmielewski - ISI WAT
61
Konflikty nazw
Konflikty nazw
• XML projektowany był z myślą o zastosowaniach
internetowych.
• XML pozwala na łączenie danych poprzez
umieszczanie w treści dokumentu zamiast danych -
jedynie odnośników (adresów) do dokumentów
zawierających dane.
• Sposób użycia odnośników wewnątrz kodu opisują
dwa języki zaliczane w skład XML:
XLink
i
XPointer
.
• Może się jednak zdarzyć, że łączone w ten sposób
dokumenty budowane były w oparciu o różne DTD.
• Komplikacje zaczynają się gdy owe DTD zawierają
definicje elementów o tych samych nazwach.
Mariusz Chmielewski - ISI WAT
62
Konflikty nazw
Konflikty nazw
Przykład:
Bardzo prawdopodobne jest zdefiniowanie
przez 2 różnych projektantów elementu o
nazwie <cena> przy czym każdy może
posiadać inną definicję:
<!ELEMENT cena (#PCDATA)>
lub
<!ELEMENT cena (kwota, waluta)>
<!ELEMENT kwota (#PCDATA)>
<!ELEMENT waluta (#PCDATA)>
Mariusz Chmielewski - ISI WAT
63
Przestrzenie nazw
Przestrzenie nazw
• Przestrzenie nazw (ang. namespaces) są specjalnym
mechanizmem pozwalającym na unikanie problemów
wynikających z możliwości ewentulanych konfliktów
nazw elementów.
• Rozwiązaniem jest dodanie w DTD kodu definiującego
przestrzeń nazw, który wg. zaleceń W3C jest po prostu
URL twórcy gramatyki.
<ceny
xmlnm=
"http://www.firma-krzak.com.pl"
xmlnm:fk
="www.firma-krzak.com.pl/xml/faktura.dtd" ?>
• Dzięki tej definicji w treści dokumentów możemy posługiwać się
przed nazwą elementu prefiksem określającym przestrzeń nazw do
której on przynależy
<fk:cena>
<fk:kwota>13.10</fk:kwota>
<fk:waluta>PLN</fk:waluta>
</fk:cena>
Mariusz Chmielewski - ISI WAT
64
XML Schema
XML Schema
• DTD pozwala zdefiniować gramatykę
dokumentu XML, ale zawiera liczne
ograniczenia.
• Między innymi nie pozwala na
dokładną kontrolę typów elementów,
liczności występowania elementów itd.
• Dodatkowo dokument DTD nie jest
dokumentem XML więc kontrola jego
poprawności wymaga dodatkowego
parsera.
Mariusz Chmielewski - ISI WAT
65
XML Schema
XML Schema
• Niewystarczające możliwości DTD
spowodowały powstanie standardu tzw.
schematów, które pozwalają dokładniej
kontrolować strukturę dokumentu XML.
• Niestety nie istnieje jeden standard przez co
występują niezgodności schematów.
• Najpopularniejsze to:
– XML-Data - firmy Microsoft
– XMLSchema (XSD) - konsorcjum W3C
– Biz Talk Schema
Mariusz Chmielewski - ISI WAT
66
XML Schema
XML Schema
• Argumenty przeciwko DTD
– Nie jest wystarczająco precyzyjny
• XML Schema jest „jak DTD”, lecz
specyfikowane w języku XML
– Wspiera typy danych
– Wspiera warunki na wartości atrybutów
– Wspiera dziedziczenie typów
• Argumenty przeciwko XML Schema
– Jest trudniejszy do nauczenia
Mariusz Chmielewski - ISI WAT
67
XML Schema i związek DTD
XML Schema i związek DTD
• Schemat XML jest tworzony na bazie
definicji zbioru typów i ich wystąpień.
• Schematy XML zapisywane są w formacie
XML, jako poprawne dokumenty XML.
• W przypadku DTD mieliśmy do czynienia z
osobną notacją i składnią określania reguł.
• Istnieją dwie grupy typów stosowanych
XML Schema - proste oraz złożone.
– Przydzielając dla elementu typ prosty określa
się, że może on zawierać jedynie dane
znakowe, bez atrybutów i elementów
potomnych.
– Typy złożone mogą zawierać dowolne
elementy, dane znakowe i atrybuty.
Mariusz Chmielewski - ISI WAT
68
T
T
ypy proste
ypy proste
XML Schema
XML Schema
• string, boolean, float, double, decimal,
timeInstant, timeDuration, recurringInstant,
binarym uri-reference, ID, IDREF,
ENTITY,NOTATION, language, IDREFS, ENTTIES,
NMTOKEN, NMTOKENS, Qname, NCName,
integer, non-positive-integer, negative-integer,
long, int, byte, non-negative-integer, unsigned-
int, insigned-long, umsigned-short, unsigned-
byte, positive-integer, date, time.
– Wśród typów prostych znajdują się również nazwy
odpowiadające typom atrybutów w DTD.
– Ułatwia to konwersję definicji DTD na schemat XML.
Mariusz Chmielewski - ISI WAT
69
Cechy XML Schema
Cechy XML Schema
• Wśród cech związanych z XML Schema można
wskazać:
– deklarowanie typów zawartości elementów i atrybutów
jest znacznie bardziej precyzyjne niż w przypadku DTD;
– w dokładniejszy sposób można kontrolować liczbę
elementów, która może wystąpić w dokumencie XML
(liczbę wystąpień elementu można podawać m.in. w
formie zakresu);
– można deklarować niepowtarzalność danych w części
dokumentu;
– można deklarować wiele elementów o tej samej nazwie,
a różnej składni w różnych miejscach dokumentu;
– XML Schema obsługuje przestrzenie nazw.
Mariusz Chmielewski - ISI WAT
70
Przykład – XML - DTD
Przykład – XML - DTD
Mariusz Chmielewski - ISI WAT
71
Przykład – XML - DTD
Przykład – XML - DTD
Mariusz Chmielewski - ISI WAT
72
Odwołania do DTD w XML
Odwołania do DTD w XML
Mariusz Chmielewski - ISI WAT
73
XML Schema - przykład
XML Schema - przykład
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="people">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element ref="first-name"/>
<xs:element ref="surname"/>
<xs:element name="age">
<xs:simpleType>
<xs:restriction
base="xs:int"
>
<xs:minInclusive value="0"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="first-name" type="xs:string"/>
<xs:element name="surname" type="xs:string"/>
</xs:schema>