XML extensible Markup Language Paweł Chodkiewicz
XML - extensible Markup Language Uniwersalny język znaczników przeznaczony do reprezentowania różnych danych w strukturalizowany sposób.
Historia GML Projekt GenCode SGML WWW W3C -> XML SGML -> ISO 2nd WWW, W3C XML rek. XML Apache XML 1967 1969 1974 1986 1991 1994 1996 1998 1999
Różnice między XML a HTML - XML został zaprojektowany aby obsługiwać, przechowywać dane - HTML wyświetlanie danych - znaczniki XML nie są predefiniowane jak w HTML -XML jest rozszerzalny można dodawać kolejne znaczniki do dokumentów
Dokument XML musi mieć element główny: <root> <child> <subchild>...</subchild> </child> </root>
XML Prolog <?xml version="1.0" encoding="utf-8"?> Prolog jest opcjonalny. Jeżeli istnieje musi być jako pierwszy w dokumencie. XML może zawierać znaki międzynarodowe, jak polskie ąśźżć lub norweskie øæå, francuskie êèé. Aby zapobiec błędów podajemy w prologu kodowanie dokumentu. UTF-8 jest domyślnym kodowaniem.
Każdy element musi mieć odpowiednik zamykający <element> DOBRZE </element> <element> DOBRZE </element> <element> ŹLE <element> ŹLE
Elementy XML muszą być poprawnie zagnieżdżone <elementpierwszy> <element> DOBRZE </element > </elementpierwszy> <elementpierwszy> <element> ŹLE </elementpierwszy> </element>
Encje Niektóre elementy w XML mogą posiadać specjalne znaczenie jak < dlatego używamy encji. W XML jest 5 predefiniowanych encji: < < mniejsze > > większe & & ampersand ' apostrof " cudzysłów Tylko < i & są zastrzeżone w XML ale dobrym nawykiem jest zastępowanie > with >.
Komentarze <!-- To jest komentarz poprawny --> <!-- Ten komentarz jest -- niepoprawny--> <!-- Ale ten już - - tak -->
Wielokrotne spacje W przeciwieństwie do HTML, XML nie zamienia kilku spacji na jedną XML: Kilka spacji HTML: Kilka spacji
Dokument poprawny składniowo znacznik otwierający posiada swój odpowiednik zamykający elementy puste musza być jawnie puste <separator/> tylko jeden znacznik główny (ang. Root) zakresy elementów nie mogą sie przeplatać wartości atrybutów w cudzysłowach lub prawych apostrofach Znaki < i & tylko do otwierania znaczników i odwołań do encji
Dokument prawidłowy (valid) jest to dobrze uformowany dokument XML, + DTD (Document Type Definition) i zawartość musi być zgodna z tym opisem.
Element XML: <imie> Jan</imie> Element może zawierać: - text - atrybuty - inne elementy - mix powyższych
<ksiegarnia> <ksiazka kategoria= dzieci"> <tytul>janko Muzykant</tytul > <autor>h. Sienkiewicz</autor> <rok>1879</rok> <tytul>, <autor>, <rok>,<cena>zawartość tekstowa <cena>29.99</cena> <ksiegarnia> and <ksiazka> elementy </ksiazka> <ksiazka> ma atrybut <ksiazka kategoria ="web"> < tytul> Algorytmy</tytul > <autor>j. Pokojski, J. Bonarawski, J. Jusis</autor> <rok>2010</rok> <cena>100</ cena > </ksiazka> </ ksiegarnia >
Element pusty: XML może zawierać puste elementy: lub <element></element> <element /> Powyższe zapisy są jednoznaczne. Puste elementy mogą mieć atrybuty.
XML nazewnictwo - nazwy elementów wyróżniają wielkość liter, - nazwy elementów rozpoczynają się od litery lub podkreślenia, - nazwy elementów nie mogą zaczynać się od słowa xml (XML, Xml, etc), - nazwy elementów mogą zawierać litery, cyfry, łączniki, podkreślenia, - nazwy elementów nie mogą zawierać spacji, - nazwą może być każde słowo oprócz słowa xml.
Dobre nawyki: - tworzenie nazw opisowych, tak: <osoba>, <Imię>, <Nazwisko>, - tworzenie krótkich i prostych nazw, takich jak : <nazwisko> a nie: <nazwisko_pracownika_instytucji>, - unikaj "-". "first-name", niektóre programy mogą rozpoznać odejmowanie, - unikaj ".". Programy mogą rozpoznać wyrażenie po kropce jako atrybut, - unikaj":". Często znacznik ten jest zarezerwowany w programach, - Litery ąśźżć są dozwolone w XML, ale mogą być nie obsługiwane przez programy wykorzystujące twój plik.
Style nazewnictwa: - małe litery <firstname>, wszystko z małych liter, - duże litery <FIRSTNAME> wszystko z dużychliter, - z podkreśleniem <first_name>, - jak nazwa własna <FirstName>, każde słowo z dużej litery, - Camel <firstname> najpierw mała później z dużej
Atrybuty elementów muszą być w <ksiazka kategoria= dzieci"> <tytul>janko Muzykant</tytul > <autor>h. Sienkiewicz</autor> </ksiazka> <ksiazka kategoria=dzieci> ŹLE </ksiazka>
Nazwy atrybutów z można otoczyć <ksiazka kategoria= takie sobie > </ksiazka>
XML Elementy vs. Atrybuty <osoba plec= kobieta"> <imie>anna</imie> <nazwisko>kowalska</nazwisko> </osoba> < osoba > <plec>kobieta</plec> <imie>anna</imie> <nazwisko>kowalska</nazwisko> </ osoba > W pierwszym przykładzie płeć jest atrybutem zaś w drugim elementem. Oba przypadki przekazują tę samą informację.
<list data="2008-01-10"> <do>ania</do> <od>kamil</od> </list> <list> <data>2008-01-10</data> <do>ania</do> <od>kamil</od> </list> Najlepiej <list> <data> <rok>2015</rok> <miesiac>11</miesiac> <dzien>10</dzien> </data> <do>ania</do> <od>kamil</od> </list>
Unikać atrybutów? - atrybuty nie mogą zawierać kilku wartości, - atrybuty nie mogą być przedstawione w strukturze drzewa - atrybuty nie są łatwo rozszerzalne
Konflikty nazw: Plik XML zawierający znaczniki HTML Plik XML zawierający info o stole (table) <table> <tr> <td>apples</td> <td>bananas</td> </tr> </table> + <table> <name>african Coffee Table</name> <width>80</width> <length>120</length> </table>
Używamy prefiksów nazw: <h:table> <h:tr> <h:td>apples</h:td> <h:td>bananas</h:td> </h:tr> </h:table> <f:table> <f:name>african Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
XML Namespaces xmlns Kiedy używamy prefiksów musimy zdefiniować przestrzeń nazw (namespace). Przestrzeń nazw może być zdefiniowana przez xmlns w początkowym tagu elementu Składnia deklaracji.: xmlns:prefix="uri".
<root> <h:table xmlns:h="http://www.w3.org/tr/html4/"> <h:tr> <h:td>apples</h:td> <h:td>bananas</h:td> </h:tr> </h:table> <f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>african Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>
XML DTD Dokument XML poprawnie sformatowany jest nazywany Well Formated. Dokument posiadający DTD i zgodny z jego zawartości, dobrze sformatowany jest nazywany "Well Formed" i "Valid.
<!DOCTYPE note [ <!ELEMENT list(od,do,naglowek,body)> <!ELEMENT od(#pcdata)> <!ELEMENT do(#pcdata)> <!ELEMENT naglowek(#pcdata)> <!ELEMENT body (#PCDATA)> ]>!DOCTYPE definiuje że element root jest list,!element list definiuje że muszą być koniecznie takie elementy: " od,do,naglowek, body"!element do definiuje ten element jako (#PCDATA)!ELEMENT do definiuje ten element jako (#PCDATA)!ELEMENT naglowek definiuje ten element jako (#PCDATA)!ELEMENT body definiuje ten element jako (#PCDATA) (#PCDATA) (parsed character data) wewnątrz deklarowanego elementu występuje tekst.
Deklaracja elementu lub <!ELEMENT nazwa kategoria> <!ELEMENT nazwa (elementy, krotność)>
Pusty element <!ELEMENT nazwa EMPTY> Przykład (znacznik wykorzystywany w HTML) <!ELEMENT br EMPTY> XML: <br />
Element Parsed Character Data Elementy zawierające wyłącznie #PCDATA: <!ELEMENT nazwa (#PCDATA)> Przykład: <!ELEMENT od (#PCDATA)>
Element z dowolną zawartością Może zawierać każdą kombinację parsowanych elementów <!ELEMENT nazwa ANY> Przykład: <!ELEMENT list ANY>
Element z deklaracją podelementów <!ELEMENT nazwa (child1)> lub <!ELEMENT nazwa (child1,child2,...)> Przykład: <!ELEMENT note (do, od, naglowek,body)> (a,b) wewnątrz elementu występuje element a, po nim element b (a b) wewnątrz deklarowanego elementu występuje element a lub element b
Deklaracja tylko jednego wystąpienia elementu <!ELEMENT nazwa (child)> Przykład: <!ELEMENT list (wiadomosc)>
Deklaracja minimalnie jednego wystąpienia elementu <!ELEMENT nazwa (child+)> Przykład: <!ELEMENT list (wiadomosc+)>
Deklaracja zero lub więcej wystąpień elementu <!ELEMENT nazwa (child*)> Przykład: <!ELEMENT list (wiadomosc*)>
Deklaracja zero lub jednego wystąpienia elementu <!ELEMENT nazwa (child?)> Przykład: <!ELEMENT list (wiadomosc?)>