Bazy danych XML
Wydział Informatyki EWSIE
mgr inż. Piotr Greniewski
Wykład: Bazy danych II – język XML
2
Literatura
XML Vademecum Profesjonalisty – Steven
Holcer
Projektowanie baz danych XML – Mark Graves
XML Almanach - Elliote R. Harold, W. Scott
Means
3
Co to jest XML
XML jest językiem utworzonym przez World Wide
Web Consortium (W3C, http://www.w3c.org),
Przedstawię język XML i sposób jego użycia.
W XML można tworzyć własne znaczniki tworząc
nowe języki. Dzięki temu XML jest nadzbiorem
innych języków znacznikowych, takich jak HTML.
W HTML wszystkie znaczniki były narzucone
i często po prostu pewnych znaczników
brakowało. Tak naprawdę XML jest
metajęzykiem znaczników, gdyż pozwala tworzyć
nowe języki znacznikowe.
4
Języki znacznikowe
Wszystkie języki znacznikowe opisują postać
dokumentu, czyli sposób jego interpretacji. Język
znacznikowy najpowszechniej dzisiaj używany to
oczywiście HTML używany do tworzenia stron www.
Oto taka przykładowa strona:
<HTML>
<HEAD>
<TITLE>Witaj w HTML</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>
Witaj w HTML
</H1>
</CENTER>
Witaj w pokręconym świecie HTML.
</BODY>
</HTML
5
Interpretacja pliku przez przeglądarkę
6
Standardy i umiejscowienie XML
HTML i XML są ze sobą spokrewnione – oba
oparte są na Standardowym uogólnionym języku
znaczników (SGML).
Zgodnie ze swoją nazwą SGML jest językiem
bardzo ogólnym o ogromnych możliwościach.
Jednak nie ma nic za darmo: ceną za tę
uniwersalność jest złożoność tego języka, co
utrudnia jego naukę i jest powodem, dla którego
język ten nie zyskał popularności.
XML jest podzbiorem SGML, łatwiej go używać,
natomiast HTML formalnie jest aplikacją SGML.
Więcej informacji o związkach między SGML
i XML znajdziesz pod adresem
www.w3.org/TR/NOTE-sgml-xml.
7
Języki do opisu przetwarzania danych
Jeśli o języku znacznikowym myślisz jako o sposobie
opisu przetwarzania danych, to nietrudno zauważyć
dookoła wiele różnych języków znacznikowych.
Jeśli na przykład w procesorze tekstu zapisujesz
dokument jako RTF, to znajdziesz w nim sporo
znaczników.
8
Znaczniki potrzebne do opisu danych w
sieci
Najpowszechniej obecnie znany język znaczników
to HTML, ale nietrudno zauważyć, że pozwala on
właściwie tylko na tworzenie typowych stron
sieciowych.
HTML 1.0 zawierał zaledwie około tuzina
znaczników, natomiast najnowsza wersja 4.01
zawiera ich już niemal 100.
Jeśli policzyć jeszcze inne znaczniki używane
w poszczególnych przeglądarkach, liczba ta zbliży
się do 120.
Jeśli jednak trzeba znakować różnorodne dane
dostępne w Sieci, to oczywiste jest, że 120
znaczników nie starczy (zresztą każda inna liczba
też będzie zbyt mała).
9
Znaczniki dostosowane dziedzinowo
Załóżmy, że Twoim hobby jest budowanie modeli okrętów
i chciałbyś wymieniać się z innymi modelarzami danymi
na ten temat.
HTML nie zawiera znaczników takich jak
<SZEROKOŚĆKADŁUBA>, <WYSOKOŚĆBEZANMASZTU>,
<ZANURZENIE>, <KLASAOKRĘTU> i innych.
A jeśli pracowałbyś w dużym banku i chciałbyś wymieniać
dane z innymi przedsiębiorstwami, to czy wolałbyś znaczniki
<B>, <UL> i <FONT>, czy <ROKPODATKOWY>,
<NUMERKONTA> i <TRANSFER>?
Tak naprawdę zresztą takie języki są tworzone, między
innymi Rozszerzalny język raportowania biznesowego
(Extensible Business Reporting Language). umożliwiający
użytkownikom konfigurację przeglądarek, dodawanie
pasków przewijania, pasków narzędziowych i innych tego
typu elementów.
10
Dalej o znacznikach
Firma Netscape opracowała taki język
na bazie XML, jest to Język interfejsu
użytkownika (User Interface Language)
Wniosek może być tylko jeden: istnieje tyle
powodów tworzenia nowych języków, ile jest
sposobów obsługiwania danych, czyli
nieskończenie wiele.
Tutaj właśnie jest miejsce dla XML:
metaznacznikowej specyfikacji umożliwiającej
tworzenie własnych języków znacznikowych.
11
Jak wygląda XML
Jak zatem XML wygląda i jak działa? Oto
przykład podobny do pokazanego wcześniej
kodu HTML:
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT>
<POZDROWIENIA>
Witaj w XML
</POZDROWIENIA>
<KOMUNIKAT>
Witaj w pokręconym świecie XML.
</KOMUNIKAT>
</DOKUMENT>
12
Strona kodowa dokumentu XML
zaczynamy od instrukcji przetwarzania <?xml
version="1.0" encoding="iso-8859-2"> (wszystkie
instrukcje XML zaczynają się <? i kończą ?>)
mówiącej, że używamy wersji 1.0 języka XML oraz
systemu kodowania znaków ISO 8859‑2.
Ten zestaw znaków wybrano z uwagi
na konieczność zakodowania polskich liter.
Możesz użyć też UTF‑8 (encoding="UTF-8"),
natomiast niedozwolone jest stosowanie strony
kodowej Windows 1250, co może stanowić pewien
problem w systemach Windows 95 i 98.
<?xml version="1.0" encoding="iso-8859-2"?>
13
Elementy XML
Po tej instrukcji przetwarzania tworzymy nowy znacznik
<DOKUMENT>. Jak już powiedziano, możesz użyć dowolnej
nazwy znacznika, byle tylko zaczynała się od litery lub
podkreślenia i dalej zawierała jedynie litery, cyfry,
podkreślenia, kropki i myślniki. Znaczniki XML zawsze
zaczynają się znakiem mniejszości i kończą znakiem
większości.
Dokumenty XML składają się z elementów XML. Podobnie jak
w HTML, element tworzy się zapisując jego znacznik
początkowy. Dalej może być treść elementu (nieobowiązkowa)
– dowolny tekst i inne elementy, w końcu jest znacznik
końcowy zaczynający się od </, na przykład </DOKUMENT>.
Istnieją jeszcze specjalne zasady dotyczące tylko elementów
bez treści, ale zajmiemy się nimi w następnym rozdziale. Cały
dokument poza instrukcjami przetwarzania musi być
zamknięty w pojedynczym elemencie nazywanym elementem
głównym; w naszym wypadku jest to element DOKUMENT
14
Element główny
Cały dokument poza instrukcjami
przetwarzania musi być zamknięty
w pojedynczym elemencie nazywanym
elementem głównym; w naszym wypadku jest
to element DOKUMENT
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT>
.
.
.
</DOKUMENT>
15
Nowy element
Teraz dodamy nowy element,
POZDROWIENIA, zawierający treść tekstową
(u nas jest to Witaj w XML):
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT>
.
<POZDROWIENIA>
Witaj w XML
</POZDROWIENIA>
.
</DOKUMENT>
16
I jeszcze jeden nowy element
Teraz możemy dodać następny element,
KOMUNIKAT, także zawierający tekst:
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT>
<POZDROWIENIA>
Witaj w XML
</POZDROWIENIA>
<KOMUNIKAT>
Witaj w pokręconym świecie XML.
</KOMUNIKAT>
</DOKUMENT>
17
Dokument w przeglądarce
Zatem nasz element główny DOKUMENT zawiera
dwa inne elementy: POZDROWIENIA
i KOMUNIKAT. Każdy z tych ostatnich zawiera
jakiś tekst, i tak oto stworzyliśmy dokument XML.
Zwróć uwagę na podobieństwo do pokazywanej
wcześniej strony HTML, choć tam wszystkie
znaczniki są predefiniowane i przeglądarka potrafi
je obsłużyć, natomiast nasze elementy
DOKUMENT, POZDROWIENIA i KOMUNIKAT
dopiero powstały. Jak można takiego dokumentu
używać? Co ma zrobić przeglądarka z nowymi
znacznikami?
Warto przypomnieć, że w HTML przeglądarki
gwarantują, że nieznane sobie znaczniki pominą.
18
Dokument w Internet Explorer
19
Dokument w Google Chrome
20
Dokument XML w przeglądarkach
Okazuje się, że przeglądarki takie, jak Microsoft
Internet Explorer i mogą wyświetlać kod XML
bezpośrednio.
Przeglądarki mogą różnie interpretować dokument
Cały dokument XML widać na poprzednich slajdach,
ale brak tutaj jakiegokolwiek formatowania. Skoro
zatem stworzyliśmy elementy, to jak je teraz
wyświetlić?
Wiele osób piszących dokumenty XML twierdzi, że
tworzenie nowych języków znacznikowych jest
bardzo frustrujące – bo co z gotowym językiem
można właściwie zrobić?
Okazuje się, że to autor musi swoim elementom
przypisać wygląd, można to zrobić na dwa sposoby.
21
Dokument XML w przeglądarkach
Po pierwsze można użyć arkusza stylów, który
powie przeglądarce, jak stworzone elementy
mają być formatowane.
Druga metoda to użycie języka programowania
(PHP, Java) do obsługi kodu XML. W tej książce
omawiać będziemy zastosowanie drugiej
metody, gdyż pierwsza dokładnie omówiona
została w innych pozycjach o XML.
krótko omówimy obie metody formatowania –
zaczniemy od dodania do stworzonego
elementu arkusza stylów
22
Arkusze stylów CSS
Istnieją dwa podstawowe języki definiowania
stylów dla XML: Kaskadowe arkusze stylów
(CSS) oraz Rozszerzalny język znaczników
(XSL).
Zaczniemy od arkusza CSS wstawianego
za pomocą instrukcji <?xml-stylesheet
type="text/css" href="greeting.css"?>, która
mówi przeglądarce, że do wyświetlania
naszego dokumentu XML ma użyć arkusza
stylów greeting.css:
23
Deklaracja używanego arkusza css
<?xml version="1.0" encoding="iso-8859-2"?>
<?xml-stylesheet type="text/css" href="greeting.css"?>
<DOKUMENT>
<POZDROWIENIA>
Witaj w XML
</POZDROWIENIA>
<KOMUNIKAT>
Witaj w pokręconym świecie XML.
</KOMUNIKAT>
</DOKUMENT>
24
Zawartość arkusza css
Poniżej pokazano zawartość pliku greeting.css.
Element POZDROWIENIA wyświetlany jest
pośrodku na czerwono, czcionką o wielkości 36
punktów.
Element KOMUNIKAT wyświetlany jest czarną,
18‑punktową czcionką. Część display:block
wskazuje, że elementy te mają być wyświetlane
jako bloki tekstu, co w tym wypadku oznacza
wyświetlanie ich w osobnych wierszach
POZDROWIENIA {display:block; font-size:36pt;
color:#FF0000; text-align:center}
KOMUNIKAT {display:block; font-size:18pt;
color:#000000}
25
Wygląd sformatowanego za pomocą css
dokumentu
26
Dlaczego używamy języka XML?
XML jest popularny z wielu powodów, niektóre
z nich teraz omówię. Zdaniem Autora
najważniejsze z nich to łatwość obsługi
i wymiany danych za pośrednictwem XML.
Ułatwiona wymiana danych
Tworzenie języków znacznikowych
Samo opisujące się dane
Strukturalnie zintegrowane dane
27
Ułatwiona wymiana danych
Jednym z największych problemów dających się
zaobserwować w środowisku informatycznym jest stałe
zwiększanie się liczby stosowanych formatów danych.
Dawniej wymiana danych między programami nie była
skomplikowana, gdyż dane były zapisywane w postaci
tekstu, dziś jednak konieczne jest stosowanie specjalnych
modułów umożliwiających konwersję danych między
programami.
Stosowane formaty są tak złożone, że zdarza się, że
niektóre wersje programu nie potrafią odczytać danych
tego samego programu w wersjach wcześniejszych.
W XML dane i znaczniki przechowywane są w postaci
tekstu, którego postać można określić. Do tworzenia
dokumentów XML możesz używać edytorów XML, ale jeśli
tylko coś jest nie tak, zawsze można zajrzeć bezpośrednio
do dokumentu.
Dane nie są też kodowane w żaden sposób objęty patentami
czy innymi ograniczeniami, więc są łatwiej dostępne.
28
Ułatwiona wymiana danych
Mogłoby się wydawać, że formaty binarne będą
wydajniejsze, gdyż umożliwiają przechowywanie danych
w bardziej zwartej postaci, ale to nie takie proste.
Na przykład Microsoft doskonale znany jest z tego, że
nawet dość proste dane przechowywane są w wielkich
plikach.
Jeśli zapiszesz w dokumencie MS Word 97 trzy litery „abc”,
możesz być zaskoczony, kiedy się okaże, że dokument ma
około 20 kB. Podobny plik XML miałby 30 lub 40 bajtów.
Nawet duże ilości danych nie zawsze są efektywnie
zapisywane, na przykład Microsoft Excel standardowo
tworzy pliki około pięciokrotnie większe od zawartego
w nich tekstu.
Zobaczymy jeszcze, że XML umożliwia bardzo wydajne
przechowywanie większości typów danych.
29
Tworzenie języków znacznikowych
Jak już wspomniano, stosując XML można tworzyć
specjalizowane języki znacznikowe, co stanowi
o ogromnych jego możliwościach. Jeśli duża grupa ludzi
zgodzi się używać jednego takiego języka, można tworzyć
obsługujące taki język specjalizowane przeglądarki i inne
aplikacje. Powstały już setki takich języków, są między
nimi:
BITS – Język technologii bankowych
IFX – Wymiana danych finansowych
BIPS – Bankowy system płatności internetowych
TIM – Znaczniki wymiany danych telekomunikacyjnych
SIF – Szkielet współpracy międzyszkolnej
CBL – Biblioteka biznesowa
ebXML – XML dla przemysłu elektronicznego
PDML – Znacznikowy język opisu produktów
FIX – Protokół wymiany danych finansowych
TEI – Program kodowania tekstu
30
Tworzenie języków znacznikowych
Niektóre języki znacznikowe, takie jak CML
(Chemiczny język znaczników) umożliwiają graficzną
prezentację złożonych cząsteczek, co pokażemy dalej
w tym rozdziale. Łatwo też sobie wyobrazić, jak
użyteczny dla architektów byłby język potrafiący
pokazać w przeglądarce projekty budynków.
XML umożliwia nie tylko tworzenie nowych języków,
ale także rozszerzanie języków istniejących. Tak
właśnie jest teraz z Rozszerzalnym HTML (XHTML)
– jeśli używasz tego języka do zakodowania stron,
przeglądarka będzie w stanie wyświetlić takie
dokumenty jak zwykły HTML.
31
Samo opisujące się dane
Dokumenty XML same się opisują. Przyjrzyj się poniższemu
fragmentowi:
Opierając się tylko na nazwach nadanych poszczególnym elementom
możemy się domyślić, o co tutaj chodzi: jest to dokument
z pozdrowieniami zawierający dodatkową wiadomość.
Jeśli wrócisz po roku do tego dokumentu, i tak nie będziesz miał
problemu z przypomnieniem sobie jego znaczenia. Oznacza to, że
dokumenty XML w znacznej mierze same się dokumentują (niezależnie
od tego możliwe jest wstawianie do plików XML komentarzy).
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT>
<POZDROWIENIA>
Witaj w XML
</POZDROWIENIA>
<KOMUNIKAT>
Witaj w pokręconym świecie XML.
</KOMUNIKAT>
</DOKUMENT>
32
Strukturalne zintegrowane dane
Kolejną zaletą XML jest fakt, że możesz określić nie tylko same dane, ale też
ich strukturę i sposób umieszczania jednych elementów w innych.
Jest to ważne szczególnie wtedy, gdy masz do czynienia ze złożonymi,
ważnymi danymi. Można na przykład długą transakcję bankową zapisać
jako HTML, ale w XML można także zapisać reguły semantyczne opisujące
strukturę dokumentu, aby można było sprawdzić poprawność takiego
dokumentu.
<?xml version="1.0" encoding="iso-8859-2"?>
<SZKOŁA>
<WYKŁAD typ="seminarium">
<WYKŁAD_TYTUŁ>XML w zastosowaniach</WYKŁAD_TYTUŁ>
<WYKŁAD_NUMER>6.031</WYKŁAD_NUMER>
<DATA_ROZPOCZĘCIA>6-1-2002</DATA_ROZPOCZĘCIA>
<STUDENCI>
<STUDENT status="słuchacz">
<IMIĘ>Edward</IMIĘ>
<NAZWISKO>Samson</NAZWISKO>
</STUDENT>
<STUDENT status="zawieszony">
<IMIĘ>Emilia</IMIĘ>
<NAZWISKO>Kowalska</NAZWISKO>
</STUDENT>
</STUDENCI>
</WYKŁAD>
</SZKOŁA>
33
Strukturalne zintegrowane dane
Opisano seminarium w XML oraz dwóch studentów nań
uczestniczących. W XML można na przykład nakazać, aby każdy
element <STUDENT> zawierał dokładnie jeden element <IMIĘ>
i jeden <NAZWISKO>, aby nie zawierał elementu
<DATA_ROZPOCZĘCIA> i tak dalej.
W XML na poprawność dokumentów kładziony jest duży nacisk.
W HTML autor witryny często pisze byle jak, gdyż wie, że przeglądarka
i tak sobie poradzi z błędami składniowymi. Niektórzy posuwają się
nawet do wykorzystywania błędów do uzyskania efektów specjalnych
w niektórych przeglądarkach. Szacuje się, że obecnie co najmniej
połowa kodu przeglądarek służy właśnie do obsługi błędnie zapisanego
HTML.
XML pod tym względem jest całkiem inny: przeglądarka dokument
XML musi sprawdzić, a jeśli są w nim jakieś błędy, nie powinna go dalej
już przetwarzać. Powinna zgłosić znaleziony błąd, ale to wszystko.
Jak zatem przeglądarka ma sprawdzić dokument? Przeglądarki XML
przeprowadzają dwie kontrole: pierwsza polega na sprawdzeniu, czy
dokument jest poprawnie sformułowany, druga kontrola nazywana jest
walidacją.
34
Dokumenty XML poprawnie sformuowane
składniowe stawiane przez utworzoną przez W3C
specyfikację XML 1.0 (znajdziesz ją pod adresem
www.w3.org/TR/REC-xml, zajmiemy się nią dokładniej
w następnym rozdziale).
Tak najprościej mówiąc poprawność sformułowania oznacza
istnienie co najmniej jednego elementu w dokumencie oraz
istnienie takiego elementu (nazywanego głównym), który
zawiera wszystkie inne elementy występujące
w dokumencie.
Każdy element musi być całkowicie zamknięty w elementach
nadrzędnych względem niego.
Na przykład poniższy dokument nie jest poprawnie
sformułowany, gdyż znacznik końcowy </POZDROWIENIA>
znajduje się już po znaczniku otwierającym następnego
elementu, <KOMUNIKAT>:
35
Walidacja dokumentów XML
Większość przeglądarek sprawdza, czy dokumenty są
poprawnie sformułowane, niektóre natomiast
przeprowadzają jeszcze walidację. Dokument XML można
walidować, jeśli związana jest z nim definicja typu
dokumentu (DTD) i kiedy dokument jest z nią zgodny.
DTD dokumentu określa jego prawidłową składnię. DTD
mogą być przechowywane w osobnym pliku lub w samym
dokumencie, w elemencie <!DOCTYPE>. Oto przykład,
w którym do naszego dokumentu z pozdrowieniami dodano
<!DOCTYPE>:
Tak naprawdę DOCTYPE nie jest elementem, w ogóle
deklaracje DTD nie są zapisane w XML – jest to odrębny
język. Innym sposobem opisu wymaganej postaci dokumentu
są schematy XML, które są zapisane już w XML. Schematy
XML dokładniej omówione zostaną później
36
Walidacja dokumentów XML
<?xml version="1.0" encoding="iso-8859-2"?>
<?xml-stylesheet type="text/css" href="first.css"?>
<!DOCTYPE DOKUMENT [
<!ELEMENT DOKUMENT (POZDROWIENIA, KOMUNIKAT)>
<!ELEMENT POZDROWIENIA (#PCDATA)>
<!ELEMENT KOMUNIKAT (#PCDATA)>
]>
<DOKUMENT>
<POZDROWIENIA>
Witaj w XML
</POZDROWIENIA>
<KOMUNIKAT>
Witaj w pokręconym świecie XML.
</KOMUNIKAT>
</DOKUMENT>
37
Zasoby XML
www.w3c.org/xml. Główna strona XML w W3C, stąd zaczyna
się zwykle szukać czegokolwiek.
www.w3c.org/XML/1999/XML-in-10-points. „XML w dziesięciu
punktach” (choć obecnie punktów tych jest tylko siedem),
skrócone kompendium wiedzy.
www.w3c.org/TR/REC-xml. Oficjalna rekomendacja XML 1.0,
bieżącej (i jedynej) wersji. Dokument jest trudny do czytania
i właśnie ta książka ma Ci przybliżyć jego treść.
www.w3c.org/TR/xml-stylesheet/. Wszystko o użyciu arkuszy
stylów i XML.
www.w3c.org/TR/REC-xml-names/. Wszystko o przestrzeniach
nazw XML(ang. namespaces).
www.w3c.org/Style/XSL/. Wszystko o Rozszerzalnym języku
stylów, XSL.
38
Zasoby XML
www.w3c.org/TR/xslt. Wszystko o przekształceniach XSL
(XSLT).
www.w3c.org/XML/Activity.html. Omówienie prac
nad XML obecnie prowadzonych w W3C.
www.w3c.org/TR/xmlschema-0/,
www.w3c.org/TR/xmlschema-1/ oraz
www.w3c.org/TR/xmlschema-2. Omówienie schematów
XML, alternatywy dla DTD.
www.w3c.org/TR/xlink/. Specyfikacja XLink.
www.w3c.org/xptr. Specyfikacja XPointer.
www.w3c.org/xhtml1/. Specyfikacja XHTML 1.0.
www.w3c.org/xhtml11/. Specyfikacja XHTML 1.1.
www.w3c.org/DOM/. Obiektowy model dokumentu (DOM).
39
Edytory XML
Adobe FrameMaker, www.adobe.com. Program doskonale
radzi sobie z XML, ale jest drogi.
XML Pro, www.vervet.com/. Drogi edytor XML, lecz
o dużych możliwościach.
XML Writer, http://xmlwriter.net/. Wyróżnianie składni
kolorami, ładny interfejs.
XML Notepad, msdn.microsoft.com/xml/notepad/intro.asp.
Darmowy edytor XML Microsoftu, dość trudny w użyciu.
eNotepad,
www.edisys.com/Products/eNotepad/enotepad.asp. Może
być użyty zamiast Notatnika, nieźle radzi sobie z XML i ma
przyjazny interfejs.
XMetal SoftQuad, xmetal.com. Drogi edytor, ale o dużych
możliwościach. Często używany.
XML Spy. www.xmlspy.com/. Dobry i łatwy w użyciu
interfejs użytkownika.
PHP Designer 2007 darmowy uniwersalny edytor
40
Przeglądarki XML
Stworzenie prawdziwej przeglądarki XML
nie jest proste. Trzeba obsłużyć nie tylko XML,
ale jeszcze jakiś język stylów, jak CSS czy XSL.
Konieczne jest też obsłużenie jakiegoś języka
skryptowego, na przykład JavaScriptu. Są to
duże wymagania, więc przeglądarki XML nadal
są nieliczne. Tak naprawdę nie istnieje obecnie
przeglądarka w pełni obsługująca XML. Żadna
z poniższych przeglądarek nie waliduje
dokumentów, jedynie sprawdza poprawność
sformułowania.
Niektórym przeglądarkom jednak niewiele już
brakuje do zrealizowania walidacji.
41
Parsery XML
Parsery XML to pakiety oprogramowania, które mogą być
używane jako część aplikacji takich, jak Oracle 8i (gdzie
XML obsługiwany jest naprawdę dobrze) lub jako część
Twoich własnych programów. N
a przykład dalej w tej książce używać będziemy parsera IBM
AlphaWorks XML for Java (XML4J). Został on napisany
w Javie i świetnie nadaje się do łączenia z innym kodem Javy.
Parsery rozbijają dokument na składniki i udostępniają te
składniki innym fragmentom programu. Niektóre parsery
sprawdzają poprawność sformułowania, nieliczne także
walidują dokumenty.
Jeśli jednak chcesz sprawdzić tylko, czy dokument XML jest
poprawnie sformułowany i czy można go walidować,
nie potrzebujesz żadnych dodatkowych programów –
wystarczy użyć walidatora XML.
42
Parsery XML
SAX: The Simple API for XML. Jego autorem jest David Megginson
(www.megginson.com/SAX/index.html). SAX jest popularnym parserem
działającym na podstawie obsługi zdarzeń. W tej książce będziemy go
używać.
expat. Słynny parser XML napisany w języku C przez Jamesa Clarka
(www.jclark.com/xml/expat.html). Parser ten używany jest w Netscape
Navigatorze 6 oraz w module Perla XML::Parser.
expat w postaci modułu Perla. Modułem XML::Parser opiekuje się Clark
Cooper (ftp://ftp.perl.org/pub/CPAN/modules/by-module/XML/).
TclExpat. Parser expat zapisany przez Steve’a Balla z myślą o użyciu
w języku Tcl. Zastępowany przez TclXML (www.zveno.com/zm.cgi/in-
tclxml).
LT XML. Jest to pakiet dla projektantów XML pochodzący z Uniwersytetu
w Edynburgu, z Language Technology Group
(www.ltg.ed.ac.uk/software/xml/).
XML for Java (XML4J). Autorstwa IBM AlphaWorks
(www.alphaworks.ibm.com/tech/xml4j), znany i szeroko stosowany parser
XML zgodny z wytycznymi W3C.
XML Microsoft’s validating XML processor. Parser ten, aby w pełni
działać, potrzebuje programu Internet Explorer 4.01 SP1 lub nowszego.
Można go znaleźć wraz z innymi narzędziami, przykładami, podręcznikami
i dokumentacją pod adresem msdn.microsoft.com/xml/default.asp.
43
Parsery XML
Lark. Napisany w Javie procesor bez walidacji autorstwa Tima Braya
(www.textuality.com/Lark/), jeden z najbardziej znanych, przez długi czas
był intensywnie wykorzystywany.
XP. Procesor bez walidacji napisany przez Jamesa Clarka w Javie
(www.jclark.com/xml/xp/index.html).
Python and XML Processing Preliminary XML Parser. Umożliwia obsługę
XML w języku programowania Python (www.python.org/topics/xml/).
TclXML. Parser XML napisany w języku Tcl przez Steve’a Balla
(www.zveno.com/zm.cgi/in-tclxml/).
XML Testbed. Parser autorstwa Steve’a Withalla
(www.w3.org/XML/1998/08withall/).
SXP (Silfide XML Parser). Kolejny szeroko znany parser XML, pełny
interfejs API do XML w Javie (www.loria.fr/projets/XSilfide/EN/sxp/).
The Microsoft XML Parser. Parser używany w Internet Explorerze
zrealizowany został jako komponent COM, dostępny jest pod adresem
www.msdn.microsoft.com/dowlnoads/tools/xmlparser/xmlparser.asp.
OmniMark 5 Programming Language. Zawiera wbudowaną obsługę
parsowania i walidacji XML (www.omnimark.com).
Java Standard Extension for XML. Z uwagi na to, że XML i Java firmy Sun
Microsystems są ze sobą tak często łączone, Sun proponuje własny pakiet
Javy do XML (java.sun.com/products/xml/).
44
Walidatory XML
Skąd wiadomo, czy dokument jest poprawnie
sformułowany i czy można go walidować?
Jedną z metod sprawdzenia tego jest użycie
walidatora XML, a jest tu z czego wybierać.
Walidatory to pakiety sprawdzające XML
i dające informację zwrotną.
Na przykład jeśli masz zainstalowany parser
XML for Java, możesz użyć przykładu
DOMWriter jako walidatora XML.
45
Walidatory XML
W3C XML Validator, validator.w3.org/. Oficjalny walidator W3C
HTML. Oficjalnie przeznaczony jest on dla HTML, ale zawiera
też częściową obsługę XML. Aby tego walidatora użyć, badany
dokument musi być widoczny w Sieci.
Tidy, www.w3.org/People/Raggett/tidy/. Tidy to bardzo lubiane
narzędzie służące czyszczenia i poprawiania stron sieciowych,
zawiera ograniczoną obsługę XML. Aby z tego walidatora
skorzystać, dokument XML musi być widoczny w Sieci.
www.xml.com/xml/pub/tools/ruwf/check.html. Walidator
pochodzący od XML.com oparty na procesorze Lark. Dokument
XML musi być widoczny w Sieci.
www.ltg.ed.ac.uk/~richard/xml-check.html. Walidator
utworzony na Uniwersytecie w Edynburgu, oparty na parserze
RXP. Dokument musi być widoczny w Sieci.
www.stg.brown.edu/service/xmlvalid/. Doskonały walidator
XML z Uniwersytetu Browna. Jest to jedyny walidator działający
online, który może sprawdzać dokumenty niewidoczne w Sieci.
Można użyć kontrolki wyboru pliku dostępnej na stronie,
wskazać w niej sprawdzany plik i go sprawdzić.
46
CSS i XSL
Arkusze stylów stale nabierają znaczenia także w przypadku
HTML, gdyż w specyfikacji HTML 4 wiele wbudowanych
dotąd możliwości, takich jak znacznik <CENTER>, uznano
za przestarzałe i przeznaczone do zastąpienia właśnie
przez użycie arkuszy stylów. Jednak większość kodu HTML
całkowicie pomija istnienie arkuszy stylów.
W przypadku XML mamy do czynienia z całkiem inną
sytuacją, gdyż tworzymy własne elementy. Jeśli zatem
przeglądarka ma je wyświetlić, trzeba ją poinformować, jak
ma to zrobić. To jednocześnie dobrze i źle: dobrze, bo
możesz wygląd dokumentu dostosować do potrzeb
za pomocą CSS i XSL robiąc to znacznie dokładniej niż
w HTML.
Źle, bo wymaga to dodatkowej pracy. Jednym ze sposobów
poradzenia sobie z tym jest użycie powszechnie stosowanego
języka stylów posiadającego już gotowe arkusze stylów.
47
CSS i XSL
Krótko mówiąc w XML definiuje się strukturę
i semantykę dokumentu, a nie jego postać
wizualną. Jeśli XML ma być bezpośrednio
wyświetlany, można albo użyć domyślnej postaci
Internet Explorera, albo użyć arkusza stylów
w celu uzyskania wyglądu niestandardowego.
Do określenia wyglądu dokumentu XML można
użyć dwóch narzędzi: arkuszy CSS lub XSL.
Standard CSS używany jest z HTML i obsługiwany
jest przez liczne narzędzia.
Za jego pomocą można określić formatowanie
poszczególnych elementów, stworzyć klasy stylów,
definiować czcionki, wybierać kolory, a nawet
określać rozmieszczenie elementów na stronie.
48
CSS i XSL
Z kolei XSL jest zdecydowanie lepszy do obsługi XML, gdyż
jest znacznie silniejszym narzędziem (zresztą same arkusze
XSL są poprawnie sformułowanymi dokumentami XML).
Dokumenty XSL składają się z reguł dotyczących
dokumentów XML. Jeśli wzorzec reguły XSL pasuje
do elementu XML, reguła ta przekształca dopasowany
fragment kodu na coś innego. W ten sposób można nawet
przekształcić kod XML na HTML.
O ile CSS umożliwia jedynie formatowanie elementów
i zmianę ich położenia, to XSL umożliwia zmianę kolejności
elementów, podmianę tych elementów, wyświetlanie
jednych elementów i ukrywanie innych, wybieranie stylu
w zależności nie tylko od samego elementu, ale też od jego
atrybutów (elementy XML, podobnie jak elementy HTML,
mogą mieć atrybuty, zajmiemy się nimi w następnym
rozdziale), wybierać elementy w zależności od ich położenia
i tak dalej. XSL składa się z dwóch części: przekształceń
XSL i obiektów formatujących XSL.
49
CSS i XSL
Sporo informacji o arkuszach stylów możesz
znaleźć w Sieci:
www.w3.org/Style/CSS/. Strona W3C o CSS.
www.w3.org/TR/REC-CSS1. Specyfikacja CSS1
na stronach W3C.
www.w3.org/TR/REC-CSS2. Specyfikacja CSS2
na stronach W3C.
www.w3.org/Style/XSL. Strona W3C o XSL.
50
Czym jest poprawnie sformułowany dokument
XML?
W3C nazywa poszczególne specyfikacje szkicu roboczego lub
rekomendacji definicjami. W tym wypadku, aby być poprawnie
sformułowanym, dokument musi być zgodny z definicją dokumentu,
co oznacza, że sam dokument musi mieć trzy części: prolog (może
być pusty), element główny i opcjonalną część końcową.
Prolog, który wkrótce będzie omawiany, może i powinien zawierać
deklarację XML (<?xml version="1.0"?>) oraz opcjonalną część
końcową zawierającą komentarze, instrukcje przetwarzania i tak
dalej. Element główny dokumentu zawierać może inne elementy –
trudno zresztą wyobrazić sobie użyteczny dokument XML, w którym
element główny nie zawiera już żadnych innych elementów.
Poprawnie sformułowany dokument zawiera zawsze dokładnie jeden
element główny, wszystkie inne elementy muszą być w elemencie
głównym zawarte (nie dotyczy to oczywiście prologu, gdyż instrukcje
przetwarzania czy komentarze nie są elementami).
Część końcowa zawierać może komentarze, instrukcje przetwarzania
i białe znaki (spacje, tabulatory i tak dalej). Dalej zajmiemy się
dokładniej prologiem, elementem głównym i częścią końcową.
<?xml version="1.0" encoding="iso-8859-2"?> - tak powinien
wyglądać nagłówek dla dokumentów zawierających polskie znaki
diakrytyczne
51
Budujemy dokument XML
Zaczynamy od deklaracji
Następnie dodajemy dokument główny
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<DOKUMENT>
.
.
.
</DOKUMENT>
52
Budujemy dokument XML
Element główny może oczywiście zawierać inne elementy.
Dodamy na razie dwa elementy opisujące klientów:
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<DOKUMENT>
<KLIENT>
.
</KLIENT>
<KLIENT>
.
</KLIENT>
</DOKUMENT>
53
Budujemy dokument XML
Będziemy zapisywać nazwiska klientów – w elemencie
IMIĘNAZWISKO umieścimy elementy NAZWISKO i IMIĘ
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<DOKUMENT>
<KLIENT>
<IMIĘNAZWISKO>
<NAZWISKO>Smith</NAZWISKO>
<IMIĘ>Sam</IMIĘ>
</IMIĘNAZWISKO>
.
.
.
</KLIENT>
<KLIENT>
</DOKUMENT>
54
Budujemy dokument XML
Szczegóły dotyczące zamówień klientów umieścimy
w elementach DATA oraz ZAMÓWIENIA
:
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<DOKUMENT>
<KLIENT>
<IMIĘNAZWISKO>
<NAZWISKO>Smith</NAZWISKO>
<IMIĘ>Sam</IMIĘ>
</IMIĘNAZWISKO>
<DATA>15 października 2001</DATA>
<ZAMÓWIENIA>
.
</ZAMÓWIENIA>
.
</KLIENT>
</DOKUMENT>
55
Budujemy dokument XML
Z kolei każdy zakup opisywać będziemy w elemencie POZYCJA,
który z kolei rozbity będzie na elementy PRODUKT, ILOŚĆ i CENA:
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<DOKUMENT>
<KLIENT>
<IMIĘNAZWISKO>
<NAZWISKO>Smith</NAZWISKO>
<IMIĘ>Sam</IMIĘ>
</IMIĘNAZWISKO>
<DATA>15 października 2001</DATA>
<ZAMÓWIENIA>
<POZYCJA>
<PRODUKT>Pomidory</PRODUKT>
<ILOŚĆ>8</ILOŚĆ>
<CENA>5zł</CENA>
</POZYCJA>
<POZYCJA>
</POZYCJA>
</ZAMÓWIENIA>
</KLIENT>
</DOKUMENT>
56
Budujemy dokument XML
Tego typu dokumenty mogą być bardzo długie
i mogą zawierać wiele poziomów zagnieżdżenia
elementów. Obsługa takich dokumentów nie stanowi
dla procesora XML problemu, byle tylko dokument
był poprawnie sformułowany (a w przypadku
parsera walidującego także dał się walidować).
Teraz możemy już nasz dokument rozebrać
na kawałeczki. Zaczniemy od podstaw i przerobimy
prolog, element główny, elementy zawarte
wewnątrz i tak dalej..
Upraszczając rzecz jak najbardziej dokument XML
traktować można jako połączenie znaczników
i danych znakowych. Zaczniemy od tego właśnie
podziału.
57
Znaczniki i dane znakowe
Dokumenty XML składają się ze znaczników i danych
znakowych. Być może kiedyś dane binarne też znajdą się
w dokumentach XML, ale na razie nie jest to potrzebne.
Na razie można odwoływać się do zewnętrznych danych
binarnych przez odwołania do encji, co omówimy później.
Znaczniki w dokumencie określają jego strukturę.
Znaczniki to znaczniki początkowe, końcowe, znaczniki
elementów pustych, odwołania do encji, odwołania
do encji znakowych, komentarze, ograniczniki sekcji
CDATA (o tym wkrótce), deklaracje typu dokumentu
i instrukcje przetwarzania.
Czym są zatem dane znakowe w dokumencie XML? Są to
po prostu wszystkie napisy nie będące znacznikami.
58
Znaczniki i dane znakowe
Znacznik zaczyna się znakiem <, kończy się znakiem >, więc
łatwo zauważyć, że występują tutaj znaczniki <?xml
version="1.0" encoding="iso-8859-2"?>, <DOKUMENT> i tak
dalej.
Z kolei napisy Witaj w XML oraz Witaj w pokręconym świecie
XML. są danymi znakowymi.
Jednak znaczniki nie muszą być zawarte między znakami <
i >, ale mogą zaczynać się od & i kończyć się ; – są to
odwołania do encji ogólnych (odwołania takie podczas
parsowania są zamieniane na treść odpowiadających im encji),
mogą zaczynać się od % i kończyć ; – są to odwołania do encji
parametrycznych używanych w DTD.
Używając odwołań do encji można spowodować, że niektóre
znaczniki staną się podczas przetwarzania dokumentu
zwykłymi danymi znakowymi.
Na przykład znacznik > to odwołanie do encji ogólnej, które
podczas parsowania dokumentu zostanie zamienione na znak
>, natomiast znacznik < zamieniony zostanie na znak <.
59
Białe znaki
Jeśli zastanawiasz się, jakich znaków można używać
w dokumentach XML, odpowiedź znajdziesz w samej
specyfikacji XML 1.0 przy definicji o nazwie Char.
Warto zwrócić uwagę na to, że w XML spacje, znaki końca
wiersza i powrotu karetki oraz tabulatory uważane są w XML
za białe znaki. Przyjrzyjmy się takiemu oto dokumentowi:
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT>
<POZDROWIENIA>
Witaj w XML
<KOMUNIKAT>
</POZDROWIENIA>
Witaj w pokręconym świecie XML.
</KOMUNIKAT>
</DOKUMENT>
60
Białe znaki
Dokument ten równoważny jest dokumentowi
następującemu:
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT><POZDROWIENIA>Witaj w XML</POZDROWIENIA>
<KOMUNIKAT>Witaj w pokręconym świecie XML.</KOMUNIKAT></DOKUMENT>
61
Białe znaki
Warto też zauważyć, że w rekomendacji XML zaleca się
kończenie wierszy zgodnie z konwencją obowiązującą
w systemie UNIX, czyli umieszczanie na końcu wiersza
jedynie znaku nowego wiersza (kod ASCII 10), podczas gdy
w systemie DOS na koniec wiersza dodaje się znaki powrotu
karetki i dopiero nowego wiersza (kody ASCII 13 i 10) mimo,
że w trakcie analizy takich dokumentów traktuje się te pliki
tak, jakby na końcu miały jedynie pojedynczy znak nowego
wiersza.
W elemencie można użyć atrybutu xml:space, który nakazuje
zachowanie w danym dokumencie odstępu znaków (jeśli
zamierzasz użyć tego atrybutu w dokumencie posiadającym
DTD, musisz go zadeklarować).
Jeśli odpowiada Ci domyślny sposób traktowania odstępów,
możesz atrybutowi temu nadać wartość default, natomiast
jeśli chcesz wszystkie spacje w dokumencie zachować
bez zmian, atrybut ten powinien mieć wartość preserve.
62
Prolog
Prolog znajduje się na samym początku
dokumentu XML. Jeśli dokument ma być
poprawnie sformułowany, nie musi mieć
prologu. Jednak rekomendacja W3C zaleca
włączenie przynajmniej deklaracji XML,
w której podana jest stosowana wersja XML.
Prolog zawiera deklarację XML, komentarze,
instrukcje przetwarzania, białe znaki
i deklarację (lub deklaracje) typu dokumentu.
Na następnym slajdzie prolog dokumentu
zawierający deklarację XML, instrukcję
przetwarzania oraz DTD:
63
Prolog
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<?xml-stylesheet type="text.css" href="greeting.css"?>
<!DOCTYPE DOKUMENT [
<!ELEMENT DOKUMENT (KLIENT)*>
<!ELEMENT KLIENT (IMIĘNAZWISKO,DATA,ZAMÓWIENIA)>
<!ELEMENT IMIĘNAZWISKO (NAZWISKO,IMIĘ)>
<!ELEMENT NAZWISKO (#PCDATA)>
<!ELEMENT IMIĘ (#PCDATA)>
<!ELEMENT DATA (#PCDATA)>
<!ELEMENT ZAMÓWIENIA (POZYCJA)*>
<!ELEMENT POZYCJA (PRODUKT,ILOŚĆ,CENA)>
<!ELEMENT PRODUKT (#PCDATA)>
<!ELEMENT ILOŚĆ (#PCDATA)>
<!ELEMENT CENA (#PCDATA)>
]>
<DOKUMENT>
<KLIENT>
<IMIĘNAZWISKO>
<NAZWISKO>Smith</NAZWISKO>
<IMIĘ>Sam</IMIĘ>
</IMIĘNAZWISKO>
.
.
64
Deklaracja XML
Dokument XML może (a zgodnie z wytycznymi
W3C powinien) zaczynać się od deklaracji XML,
która ma poinformować, że dokument w XML jest
napisany.
Jeśli używasz deklaracji XML, powinna się ona
znaleźć w pierwszym wierszu i nie powinno się nic
przed nią pojawić.
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
65
Deklaracja XML
W deklaracji XML użyć można trzech atrybutów:
version. Używana wersja XML; obecnie może to być
tylko 1.0. Jeśli podaje się deklarację XML, atrybut ten
jest obowiązkowy.
encoding. Sposób kodowania znaków w dokumencie.
Jak to omówiono w rozdziale 1, ustawieniem domyślnym
jest UTF‑8. Można też użyć Unicode, UCS‑2 lub UCS‑4
oraz wielu innych zestawów znaków, przede wszystkim
zestawów ISO. Atrybut ten jest opcjonalny.
standalone. Jeśli ma wartość yes, dokument
nie odwołuje się do encji zewnętrznych; w przeciwnym
wypadku ma wartość no. Jest to atrybut opcjonalny.
66
Komentarze
Komentarze XML są bardzo podobne do komentarzy HTML.
W komentarzach umieszczać można dodatkowe objaśnienia
dotyczące dokumentu, które są ignorowane przez parser
XML.
Komentarze mogą pojawiać się w dowolnym miejscu
dokumentu, byle na zewnątrz wszystkich znaczników. Tak jak
w HTML, komentarze zaczyna się od <!--, kończy -->.
<?xml version="1.0" encoding="iso-8859-2"?>
<DOKUMENT>
<!--Zaczynamy dokument poza elementem POZDROWIENIA.-->
<POZDROWIENIA>
<!--Tutaj będzie tekst pozdrowień.-->
Witaj w XML
</POZDROWIENIA>
</DOKUMENT>
67
Instrukcje przetwarzania
Instrukcje przetwarzania – zgodnie ze swoją nazwą
– to instrukcje dla procesora XML. Zaczynają się
od <? i kończą ?>.
Jedynym ograniczeniem jest niemożność
stosowania zarezerwowanych nazw instrukcji <?
xml?> ani <?XML?>.
Instrukcje przetwarzania są przeznaczone
dla procesora XML, więc są różne dla różnych
procesorów, nie wchodzą w skład specyfikacji XML.
Bardzo powszechnie stosowaną i zwykle rozumianą
instrukcją przetwarzania jest <?xml-stylesheet?>
łącząca dokument XML z arkuszem stylów
(oczywiście ona także nie należy do rekomendacji
XML 1.0).
68
Instrukcje przetwarzania
<?xml version="1.0" encoding="iso-8859-2"?>
<?xml-stylesheet type="text/css" href="greeting.css"?>
<DOKUMENT>
<POZDROWIENIA>
Witaj w XML
</POZDROWIENIA>
<KOMUNIKAT>
Witaj w pokręconym świecie XML.
</KOMUNIKAT>
</DOKUMENT>
69
Znaczniki elementów
Strukturę dokumentu XML określa się za pomocą
znaczników wyznaczających elementy.
Element XML składa się ze znacznika początkowego
oraz znacznika końcowego oraz treści, czyli tego, co
się między tymi znacznikami znajduje.
Wyjątkiem są elementy puste, które mogą składać
się tylko z jednego znacznika o specyficznej
konstrukcji.
Znacznik początkowy (czasem nazywany także
znacznikiem otwierającym) zaczyna się od <
i kończy >.
Znacznik końcowy (czasem nazywany zamykającym)
zaczyna się od </ i kończy >.
70
Nazwy elementów
Specyfikacja XML bardzo dokładnie określa, jak
mają wyglądać nazwy elementów: muszą
zaczynać się od litery, podkreślenia lub
dwukropka. Dalej mogą się znajdować litery,
cyfry, podkreślenia, kreski (myślniki), kropki
i średniki, nie mogą natomiast pojawić się
żadne białe znaki.
Należy unikać dwukropków w nazwach, gdyż
przyjęto za ich pomocą oznaczać przestrzenie
nazw
co prawda w rekomendacji XML 1.0 takiego
zalecenia nie znajdziemy
71
Elementy puste
Elementy puste mają jeden tylko znacznik,
nie mają zwykłych znaczników początkowego
i końcowego. Elementy puste zapewne dobrze Ci
są znane z HTML, przykładami są choćby
znaczniki <IMG>, <LI>, <HR> i <BR>. Są one
puste, czyli nie zawierają żadnej treści (danych
znakowych ani innych znaczników).
Elementom pustym odpowiada jeden tylko
znacznik. W HTML po prostu nie podaje się
znacznika końcowego, w XML element trzeba
zadeklarować jako pusty. W takim wypadku
znacznik takiego elementu można od razu
zakończyć nie >, lecz /> – wtedy znacznik
końcowy jest zbędny.
72
Element główny
Poprawnie sformułowany dokument XML musi
zawierać jeden element, który będzie zawierał
wszystkie inne elementy – jest to element
główny.
Element ten jest w dokumentach XML bardzo
ważny, szczególnie z punktu widzenia
programisty, gdyż parsowanie zawsze zaczyna
się od tego właśnie elementu.
W pliku order.xml, który tworzyliśmy
na wykładu, elementem głównym jest
DOKUMENT (ale element główny może się
dowolnie nazywać):
73
Element główny
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<DOKUMENT>
<KLIENT>
<IMIĘNAZWISKO>
<NAZWISKO>Smith</NAZWISKO>
<IMIĘ>Sam</IMIĘ>
</IMIĘNAZWISKO>
<DATA>15 października 2001</DATA>
<ZAMÓWIENIA>
<POZYCJA>
<PRODUKT>Pomidory</PRODUKT>
<ILOŚĆ>8</ILOŚĆ>
<CENA>5zł</CENA>
</POZYCJA>
.
.
.
<POZYCJA>
<PRODUKT>Sałata</PRODUKT>
<ILOŚĆ>6</ILOŚĆ>
<CENA>31.50zł</CENA>
</POZYCJA>
</ZAMÓWIENIA>
</KLIENT>
</DOKUMENT>
74
Atrybuty
Atrybuty XML są bardzo podobne
do atrybutów HTML – są to pary nazw
i wartości umożliwiające wstawianie
dodatkowych informacji w znacznikach
początkowym i elementu pustego.
Aby przypisać atrybutowi wartość, używa się
znaku równości.
Na przykład poniżej każdemu elementowi
KLIENT dodajemy atrybut STATUS, w którym
opisujemy klienta jako kredytobiorcę:
75
Atrybuty
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<DOKUMENT>
<KLIENT STATUS="Rzetelny kredytobiorca">
<IMIĘNAZWISKO>
<NAZWISKO>Smith</NAZWISKO>
<IMIĘ>Sam</IMIĘ>
</IMIĘNAZWISKO>
<DATA>15 października 2001</DATA>
<ZAMÓWIENIA>
<POZYCJA>
<PRODUKT>Pomidory</PRODUKT>
<ILOŚĆ>8</ILOŚĆ>
<CENA>5zł</CENA>
</POZYCJA>
<POZYCJA>
<PRODUKT>Pomarańcze</PRODUKT>
<ILOŚĆ>24</ILOŚĆ>
<CENA>9.98zł</CENA>
</POZYCJA>
</ZAMÓWIENIA>
</KLIENT>
.
.
.
</DOKUMENT>
76
Nazwy atrybutów
Zgodnie ze specyfikacją XML 1.0 nazwy atrybutów podlegają tym
samym regułom, które dotyczą nazw elementów, zatem atrybut
zaczynać się może od litery, podkreślenia lub dwukropka, dalej
mogą być litery, cyfry, podkreślenia, kreski (myślniki), kropki
i dwukropki, nie mogą za to wystąpić białe znaki.
Przyjrzyjmy się poniższym przykładom elementów
z prawidłowymi atrybutami:
<koło środek_x="10.0" środek_y="20.0" promień="10.0"/>
<obrazek src="obrazek1.jpg">
<pisak kolor="czerwony" szerokość="5">
<książka stron="1231">
77
Wartości atrybutów
Znaczniki zawsze są tekstem, więc i wartości atrybutów są
tekstem. Nawet jeśli atrybutowi przypiszesz liczbę, liczba ta
będzie traktowana jako napis, który należy podawać
w cudzysłowie: <koło środek_x="10.0" środek_y="20.0"
promień="10.0"/>
W XML wartości atrybutów ujmować trzeba w cudzysłowy.
Zwykle używa się cudzysłowów podwójnych, ale jeśli sam
atrybut zawierałby cudzysłów, to procesor XML nie wiedziałby,
gdzie się tekst kończy. W takim wypadku cały tekst można objąć
pojedynczym cudzysłowem: <cytat tekst='"Nie tak!"-
powiedział'/>
A co zrobić, jeśli atrybut zawiera zarówno pojedynczy, jak
i podwójny cudzysłów? W takim wypadku używa się
predefiniowanej encji znakowej ' do zastąpienia
cudzysłowu pojedynczego lub " zamiast cudzysłowu
podwójnego (same encje będą omówione później). Aby zatem
zapisać wartość atrybutu 1'=stopa, 1"=cal, piszemy:<jednostki
usa="1'=stopa, 1"=cal"/>