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:
&lt;
< mniejsze
&gt;
> większe
&amp;
& ampersand
&apos;
‘ apostrof
&quot;
„ cudzysłów
Tylko < i & są zastrzeżone w XML ale dobrym nawykiem jest zastępowanie >
with &gt.
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?)>