Czym jest XML?
Główna różnica między XML i HTML
Przykładowo dokument HTML:
<h1>Moi znajomi</h1>
<p><b>Michal</b>, 24 lata,
<i>mich@abc.com</i></p>
<p><b>Adam</b>,
25 lat, <i>adi@abc.com</i></p>
<p><b>Bartek</b>,
29 lat, <i>barti@abc.com</i></p>
Co można o nim powiedzieć?
Te same dane w formacie XML:
<spis>
<opis>Moi
znajomi</opis>
<ludzie>
<osoba>
<imie>Michal</imie>
<wiek>24</wiek>
<email>mich@abc.com</email>
</osoba>
<osoba>
<imie>Bartek</imie>
<wiek>29</wiek>
<email>barti@abc.com</email>
</osoba>
<osoba>
<imie>Adam</imie>
<wiek>25</wiek>
<email>adi@abc.com</email>
</osoba>
</ludzie>
</spis>
Co można o nim powiedzieć?
Aby dane były wyświetlone w sposób czytelny dla człowieka do dokumentow XML dołączane są arkusze stylów XSL lub CSS.
Do czego XML może zostać użyty?
Przyklad dokumentu XML:
<?xml version="1.0"
encoding="ISO-8859-2"?>
<notatka>
<do>Ania</do>
<od>Janek</od>
<naglowek>Przypomnienie</naglowek>
<tresc>Nie
zapomnij o spotkaniu w sobote</tresc>
</notatka>
Pierwsza linia (deklaracja XML) w tym dokumencie opisuje wersje XML (1.0) oraz kodowanie znaków (ISO-8859-2). Nastepna opisuje główny element (root element). Nazwa mówi sama za siebie (sama sie opisuje), że jest to notatka. Następne 4 linie zawieraja elementy potomki (do,od,naglowek,tresc) elementu głownego. I tutaj również dane same sie opisują. Dowiadujemy się, że notatka jest adresowana dla Ani od Janka, który przypomina jej o spotkaniu w sobote. Ostatnia linia oznacza zakończenie głównego elementu.
Głowne zasady przy tworzeniu dokumentów XML:
Elementy w XML
Nazwy elementów muszą podlegać następującym regułom:
Elementy sa rozszerzalne: Weźmy dokument z poprzedniego przykładu. Przypuśćmy, że ktoś napisał jakiś super program, który pobiera informacje o notatce i w "ładny" sposób je wyświetla lub przetwarza. Dodajmy teraz do notatki nowy element:
<?xml version="1.0" encoding="ISO-8859-2"?>
<notatka>
<data>2002-08-01</data>
<do>Ania</do>
<od>Janek</od>
<naglowek>Przypomnienie</naglowek>
<tresc>Nie zapomnij o spotkaniu w sobote</tresc>
</notatka>
Powstaje pytanie czy aplikacja przestanie dzialać? Odpowiedź brzmi: nie. Bo dalej jest w stanie znaleźć to czego potrzebuje.
Elementy mogą miec różną zawartość:
Atrybuty
Elementy dokumentu XML moga zawierac atrybuty. Są one uzywane do wprowadzania dodatkowych informacji. Wartości atrybutów muszą być umieszczone w cudzysłowach (w HTML niekoniecznie). Oczywiście może paść pytanie: Po co używać atrybutów skoro dodatkową informację można przechowywać w elementach potomnych? Takie właśnie rozwiązanie jest zalecane przez specjalistów ponieważ:
Wyjątkiem od tych zaleceń są atrybuty zawierające identyfikatory elementów i odnośniki do tych identyfikatorów.
XML i dane semistrukturalne
Podstawowa składnia XML doskonale odpowiada opisowi danych semistrukturalnych. Weźmy przykładowo dokument:
<person>
<name> Alan </name>
<age> 24 </age>
<email> alan@abc.com </email>
</person>
Przedstawienie go w postaci ssd-wyrażenia wygląda:
{ person: {name: "Alan",age: 24 ,email: "alan@abc.com" }}
Można zapisać proste przekształcenie między drzewami ssd-wyrażeń i XML. Oznaczmy to przekształcenie jako T:
T(typ prosty) = typ prosty
T({l1:v1,...,ln:vn}) = <l1>T[v1]</l1>...<ln>T[vn]</ln>
Oczywiście pewną niejednoznaczność wprowadzają atrybuty. Ponadto w dokumentach XML ważna jest kolejność elementów, ich porządek. Przykładowo dwa poniższe ssd-wyrażenia są tożsame:
person: {firstname: "John", lastname: "Smith"}
person: {lastname: "Smith", firstname: "John"}
A odpowiadające im fragmenty kodu XML nie są tożsame:
<person>
<firstname> John </firstname><lastname> Smith </lastname>
</person>
<person>
<lastname> Smith </lastname><firstname> John </firstname>
</person>
Z drugiej strony kolejność atrybutów w elemencie nie ma znaczenia i nastepujące fragmenty sa tożsame:
<person firstname="John" lastname="Smith" />
<person lastname="Smith" firstname="John" />
XML+CSS
Aby przekształcić XML do postaci HTML można zastosować dwa podejścia:
Przykład:
cd_catalog.xml
cd_catalog.css
cd_catalog_with_css.xml
Przypuszcza się jednak, że w przyszłości nie bedzie się korzystać z CSS lecz z XSL.
Wyspy danych
XML może zostać również zanurzony w dokumencie HTML. Tak wporwadzony kod XML nazywamy wyspą danych (Data Island). Dane takie moga być bezpośrednio umieszczone na stronie HTML używając nieoficjalnego znacznika <xml> (>=IE5.0):
<xml id="note">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> </xml>
lub z zewnętrznego dokumentu XML:
<xml id="note" src="note.xml"></xml>
Następnie dane z takiej wyspy mogą byc wykorzystane np w tabelkach.
Przykład:
<html>
<body>
<xml src="cd_catalog.xml" id="xmldso" async="false"></xml>
<table datasrc="#xmldso" width="100%" border="1">
<thead>
<th>Title</th>
<th>Artist</th>
<th>Year</th>
</thead>
<tr align="left">
<td> <span datafld="TITLE"></span></td>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="YEAR"></span></td>
</tr>
</table>
</body>
</html>
Czym jest DTD?
Celem DTD (Document Type Definition) jest definiowanie poprawnie zbudowanych bloków dokumentu XML. Określa ono strukturę dokumentu i listę poprawnych elementów
DTD może być deklarowane bezpośrednio w dokumencie XML lub przez zewnętrzny odnośnik.
Jeżeli DTD jest włączone do pliku źródłowego XML, powinno być opakowane w definicję DOCTYPE o następującej składni:
<!DOCTYPE root-element [element-declarations]>
Przykładowo:
<?xml version="1.0"?>
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
Jeżeli DTD umieszczone jest na zewnątrz pliku źródłowego XML, powinno być opakowane w definicję DOCTYPE o następującej składni:
<!DOCTYPE root-element SYSTEM "filename">
Przykładowo:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
A to jest kopia pliku "note.dtd" zawierającego DTD:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Po co używać DTD?
Deklaracja elementów
Składnia:
<!ELEMENT element-name category>
lub
<!ELEMENT element-name (element-content)>
Zawartość elementu może być określona jako jedna z następujących:
Definiowany element (tytaj element-name) posiada równiez informacje o krotnościach swoich potomków. I tak:
Podnadto element może mieć alternatywnych potomków tzn. potomkiem danego elementu może być jeden z kilku wymienionych na liście. Składnia takiej deklaracji wygląda następująco:
<!ELEMENT element-name (child1,child2,child3,(child4-1|child4-2))>
Elementy mogą mieć też mieszaną zawartość. Rozważmy przykład:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
Deklaracje atrybutów
Składnia:
<!ATTLIST element-name attribute-name attribute-type default-value>
Przy czym typ-atrybutu może przyjąć następujące wartości (podane są tylko te najczęściej stosowane):
A wartosc-domyślna może być jednej z następujących postaci:
Encje
Encje są zmiennymi używanymi do definiowania skrótów do jakiegoś tekstu. Można je deklarować jako wewnętrzne i zewnętrzne.
Oto predefiniowane encje:
< |
< |
mniejszy niż |
> |
> |
większy niż |
& |
& |
ampersand |
' |
' |
apostrof |
" |
" |
cudzysłów |
Przykład (encja wewnętrzna):
test.xml
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "test.dtd">
<test>
<imie>&imie;</imie>
<nazw>&nazwisko;</nazw>
</test>
test.dtd
<!ELEMENT test (imie,nazw)>
<!ELEMENT imie (#PCDATA)>
<!ELEMENT nazw (#PCDATA)>
<!ENTITY imie "Grzegorz">
<!ENTITY nazwisko "Brzeczyszczykiewicz">
wynik:
Przyklad (encja zewnętrzna):
test2.xml
<?xml version="1.0"?>
<!DOCTYPE test2 SYSTEM "test2.dtd">
<test2>
&incl;
</test2>
test2.dtd
<!ELEMENT test2 (#PCDATA)>
<!ENTITY incl SYSTEM "incl.xml">
incl.xml
<?xml version="1.0"?>
<dane>
Bardzo wazna informacja
</dane>
wynik:
Ograniczenia związane z DTD
Źródła:
Serge Abiteboul, Peter Buneman, Dan Suciu “Dane w sieci WWW”
W3SCHOOLS http://www.w3schools.com/
XMLFILES http://www.xmlfiles.com/