XML
Transkrypt
XML
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 SGML GML Projekt GenCode SGML -> ISO 1967 1969 1974 1986 W3C -> XML WWW 1991 2nd WWW, W3C 1994 XML rek. XML 1996 1998 Apache XML 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> <tytul>, <autor>, <rok>,<cena>zawartość tekstowa <rok>1879</rok> <ksiegarnia> and <ksiazka> elementy <cena>29.99</cena> <ksiazka> ma atrybut </ksiazka> <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: <element></element> lub <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 definiuje że element root jest list, !ELEMENT list definiuje że muszą być koniecznie takie elementy: " od,do,naglowek, body" <!DOCTYPE note !ELEMENT do definiuje ten element jako (#PCDATA) [ <!ELEMENT list(od,do,naglowek,body)> !ELEMENT do definiuje ten element jako (#PCDATA) !ELEMENT naglowek definiuje ten element jako <!ELEMENT od(#PCDATA)> (#PCDATA) <!ELEMENT do(#PCDATA)> !ELEMENT body definiuje ten element jako <!ELEMENT naglowek(#PCDATA)> (#PCDATA) <!ELEMENT body (#PCDATA)> ]> (#PCDATA)—(parsed character data) wewnątrz deklarowanego elementu występuje tekst. Deklaracja elementu <!ELEMENT nazwa kategoria> lub <!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?)>