1
Podstawy programowania II
dr inż. Paweł Róg
2
Zagadnienia
■
Projektowanie dokumentów XML
Elementy i atrybuty
Typy dokumentów XML
Pisanie dokumentów XML
Testowanie dokumentów XML
3
Przykładowy dokument XML
<?xml version="1.0"?>
<product barcode="2394287410">
<manufacturer>Verbatim</manufacturer>
<name>DataLife MF 2HD</name>
<quantity>10</quantity>
<size>3.5"</size>
<color>black</color>
<description>floppy disks</description>
</product>
4
Bardzo prosty dokument XML
<person>
Alan Turing
</person>
■
Dokument ten składa się z jednego elementu
o nazwie person, ograniczonego tagami
<person> i </person> oraz zawartości Alan
Turing
■
<person> i </person> są znacznikami
5
Składnia znaczników
■
Znaczniki XML mają podobną składnię do
znaczników HTML.
■
Znacznik początkowy rozpoczyna się od <, natomiast
końcowy – od </. Po nich następuje nazwa
znacznika, zakończona w obu przypadkach >.
■
W przeciwieństwie do HTML, w XML nazwy
znaczników mogą być dowolne.
■
Elementy puste (które nie mają zawartości) mogą być
zapisane albo w postaci <tag></tag> albo
w postaci <tag />. Nie może być natomiast
niedomkniętych znaczników (np. <br> lub <hr>).
■
Rozróżniana jest wielkość znaków w nazwach
znaczników (<person>, <Person> oraz <PERSON>
są różnymi znacznikami).
6
Nieco bardziej złożony dokument
<person>
<name>
<first_name>Alan</first_name>
<last_name>Turing</last_name>
</name>
<profession>computer scientist</profession>
<profession>mathematician</profession>
<profession>cryptographer</profession>
</person>
7
Korzeń, rodzice i dzieci
■
Zależności pomiędzy elementami można
przedstawić w postaci drzewa
8
Rodzice i dzieci
■
Dokument z powyższego przykładu nadal składa
się z jednego elementu person, jednak
zawartością tego elementu nie jest zwykły tekst,
ale cztery inne elementy: jeden element name
oraz trzy elementy profession.
■
Element person jest nazywany rodzicem
elementów name i profession, które z kolei są
nazywane jego dziećmi.
■
Jeden rodzic może mieć wiele dzieci, jednak
każde dziecko musi mieć (poza jednym wyjątkiem)
dokładnie jednego rodzica.
9
Korzeń
■
Każdy dokument XML ma jeden element, który nie
ma rodzica.
■
Jest to pierwszy element w dokumencie. Element
ten zawiera wszystkie pozostałe elementy.
■
Element ten jest nazywany korzeniem dokumentu.
■
Każdy dobrze sformatowany dokument XML
zawiera dokładnie jeden korzeń.
■
W naszym przypadku korzeniem jest element
person.
10
Mieszana zawartość
■
W poprzednim przykładem zawartością
elementów first_name, last_name oraz
profession były dane tekstowe, które nie
zawierały znaczników.
■
Zawartością elementów person oraz name były
elementy-dzieci.
■
Taki podział na elementy, które zawierają
wyłącznie inne elementy oraz elementy, które
zawierają wyłącznie tekst jest popularny
w dokumentach o charakterze rekordów danych.
■
XML może być jednak używany do tworzenia
dokumentów narracyjnych, takich jak raporty,
artykuły, opowiadania, strony WWW itp.
11
Narracyjny dokument XML
<biography>
<paragraph>
<name><first_name>Alan</first_name>
<last_name>Turing</last_name></name> was one of the first
people to truly deserve the name <emphasize>computer
scientist</emphasize>. Although his contributions to the field
are too numerous to list, his best-known are the eponymous
<emphasize>Turing Test</emphasize> and <emphasize>Turing
Machine</emphasize>.
</paragraph>
<definition>The <term>Turing Test</term> is to this day the
standard test for determining whether a computer is truly
intelligent. This test has yet to be passed.</definition>
12
<definition>A <term>Turing Machine</term> is an abstract
finite state automaton with infinite memory that can be proven
equivalent to any any other finite state automaton with
arbitrarily large memory. Thus what is true for one Turing
machine is true for all Turing machines no matter how
implemented.
</definition>
<paragraph>
<name><last_name>Turing</last_name></name> was also an
accomplished <profession>mathematician</profession> and
<profession>cryptographer</profession>. His assistance was
crucial in helping the Allies decode the German Enigma cipher.
He committed suicide on <date><month>June</month> day>7</day>,
<year>1954</year></date> after being convicted of
homosexuality and forced to take female hormone injections.
</paragraph>
</biography>
13
■
Korzeniem przedstawionego dokumentu jest
element biography.
■
Element biography zawiera elementy-dzieci
paragraph i definition.
■
Elementy paragraph i definition zawierają
elementy-dzieci: term, emphasize, name
i profession oraz dane tekstowe nie
zawierające znaczników. Elementy te mają
mieszaną zawartość.
■
Tego typu zawartość jest mniej popularna
i trudniejsza do zarządzania poprzez programy
komputerowe.
14
Atrybuty
■
Elementy mogą mieć atrybuty, które są parami typu
nazwa-wartość, dołączonymi do znacznika
otwierającego.
■
Nazwy są oddzielone od wartości za pomocą znaku =.
■
Wartości są otoczone znakami " lub '.
<person
born="1912-06-23" died="1954-06-07"
>
Alan Turing
</person>
15
■
Kolejność, użycie " lub 'oraz znaki odstępu nie mają
wpływu na znaczenie atrybutów:
<person
died = '1954-06-07' born = '1912-06-23'
>
Alan Turing
</person>
16
■
Poprzedni przykład możemy przepisać wykorzystując
atrybuty:
<person>
<name first="Alan" last="Turing"/>
<profession value="computer scientist"/>
<profession value="mathematician"/>
<profession value="cryptographer"/>
</person>
17
Narracyjny dokument z atrybutami
<biography xmlns:xlink="http://www.w3.org/1999/xlink/">
<image
source="http://www.turing.org.uk/turing/pi1/busgroup.jpg"
width="152" height="345"/>
<paragraph><person born='1912-06-23' died='1954-06-
07'><first_name>Alan</first_name>
<last_name>Turing</last_name> </person> was one of the first
people to truly deserve the name <emphasize>computer
scientist</emphasize>. Although his contributions to the field
were too numerous to list, his best-known are the eponymous
<emphasize xlink:type="simple"
xlink:href="http://cogsci.ucsd.edu/~asaygin/tt/ttest.html">Tur
ing Test</emphasize> and <emphasize xlink:type="simple"
xlink:href="http://mathworld.wolfram.com/TuringMachine.html">T
uring Machine</emphasize>.</paragraph>
18
<paragraph><last_name>Turing</last_name> was also an
accomplished <profession>mathematician</profession> and
<profession>cryptographer</profession>. His assistance was
crucial in helping the Allies decode the German Enigma
machine.<footnote source="The Ultra Secret, F.W. Winterbotham,
1974">1</footnote></paragraph>
<paragraph> <last_name>Turing</last_name> committed suicide on
<date><month>June</month> <day>7</day>,year>1954</year></date>
after being convicted of homosexuality and forced to take
female hormone injections.<footnote source="Alan Turing: the
Enigma, Andrew Hodges, 1983">2</footnote>
</paragraph>
</biography>
19
Nazwy w XML
■
Element lub inna nazwa w XML (np. atrybut) może
zawierać znaki alfanumeryczne: A-Z, a-z, 0-9 oraz
znaki spoza alfabetu angielskiego, np. ö, ç, itp.
Może także zawierać:
_ znak podkreślenia,
- myślnik,
. kropkę.
■
Nazwa XML nie może zawierać innych znaków
interpunkcyjnych, np.
"
, ', $, %, ;.
■
Nazwa XML nie może zawierać znaków odstępu.
■
Wszystkie nazwy zaczynające się od „XML” są
zarezerwowane.
20
Przykłady poprawnych nazw XML
■
<Drivers_License_Number>98 NY
32</Drivers_License_Number>
■
<month-day-year>7/23/2001</month-day-year>
■
<first_name>Alan</first_name>
■
<_4-lane>I-610</_4-lane>
■
<téléphone>011 33 91 55 27 55 27</téléphone>
■
21
Przykłady błędnych nazw XML
■
<Driver's_License_Number>98 NY
32</Driver's_License_Number>
■
<month/day/year>7/23/2001</month/day/year>
■
<first name>Alan</first name>
■
<4-lane>I-610</4-lane>
22
Referencje
■
Dane znakowe wewnątrz elementu nie mogą
zawierać znaku <, ponieważ jest on zawsze
interpretowany jako początek taga.
■
Jeśli potrzebny jest znak < w tekście należy użyć
referencji <.
■
Kiedy parser będzie czytał dokument, zamieni
każde wystąpienie <, ` lub < na
znak <.
23
Referencje
<SCRIPT LANGUAGE="JavaScript">
if (location.host.toLowerCase( ).indexOf("ibiblio")
<
0) {
location.href="http://ibiblio.org/xml/";
}
</SCRIPT>
24
■
Podobnie, dane tekstowe nie mogą zawierać znaku &
dlatego należy go zastąpić referencją &
<company>W.L. Gore
&
Associates</company>
■
Ponieważ kod znaku & to 38, dlatego można go rónież
zastąpić referencją &
<company>W.L. Gore
&
Associates</company>
25
■
Predefiniowane referencje:
<
Znak mniejszości, lewy nawias kątowy (<)
&
Ampersand (&)
>
Znak większości, prawy nawias kątowy (>)
"
Cudzysłów (")
'
Apostrof (')
26
■
Tylko < oraz & są wymagane. Pozostałe są
opcjonalne. " i ' są przydatne wewnątrz
wartości atrybutów, w celu uniknięcia niejednoznaczności
z ” i ':
<image source='oreilly_koala3.gif'
width='122' height='66'
alt='Powered by O
'
Reilly Books'
/>
27
Sekcje CDATA
■
W przypadku, kiedy dokument XML zawiera
przykłady kodu źródłowego XML lub HTML,
wszystkie znaki < i & w tym kodzie muszą być
zastąpione za pomocą < i &
■
W przypadku większych fragmentów tekstu może
to się stać niewygodne i powodować błędy,
w przypadku, kiedy dokument XML jest edytowany
przez człowieka.
■
Aby temu zaradzić wprowadzono sekcje CDATA.
Rozpoczynają się one <![CDATA[ i kończą ]]>.
■
Wszystko pomiędzy <![CDATA[ i ]]> jest
traktowane jako surowe dane znakowe. Znaki
< i & nie są interpretowane.
28
Sekcje CDATA
<p>You can use a default <code>xmlns</code>
attribute to avoid having to add the svg prefix to
all your elements:</p>
<pre><
![CDATA[
<svg xmlns="http://www.w3.org/2000/svg"
width="12cm" height="10cm">
<ellipse rx="110" ry="130" />
<rect x="4cm" y="1cm" width="3cm"
height="6cm" />
</svg>
]]>
</pre>
29
Komentarze
■
W dokumentach XML można umieszczać
komentarze rozpoczynające się znakami <!--
i kończące znakami -->.
<!-- I need to verify and update these
links when I get a chance. -->
30
Sterowanie przetwarzaniem
■
XML umożliwia wstawianie w dokumencie instrukcji
sterujących przetwarzaniem, umożliwiających
przekazanie informacji do aplikacji przetwarzających
dokument.
■
Instrukcja taka rozpoczyna się znakami <? i kończy
znakami ?>.
■
Po znakach <? następuje nazwa aplikacji, do której
skierowana jest instrukcja.
■
Przykładowa instrukcja skierowana do robotów
indeksujących:
<?robots index="yes" follow="no"?>
31
■
Inna postać instrukcji :)
<?php
mysql_connect("database.unc.edu", "clerk","password");
$result = mysql("HR", "SELECT LastName, FirstName FROM
Employees ORDER BY LastName, FirstName");
$i = 0;
while ($i < mysql_numrows ($result)) {
$fields = mysql_fetch_row($result);
echo "<person>$fields[1] $fields[0] </person>\r\n";
$i++;
}
mysql_close( );
?>
32
■
Przykładowa instrukcja polecająca przeglądarce
zastosowanie do dokumentu XML arkuszu stylów przed jego
wyświetleniem.
<?xml-stylesheet href="person.css" type="text/css"?>
<person>
Alan Turing
</person>
33
Deklaracja XML
■
Dokument XML może rozpoczynać się od deklaracji XML:
<?xml version="1.0" encoding="ASCII" standalone="yes"?>
<person>
Alan Turing
</person>
34
Atrybuty deklaracji XML
■
Atrybut version deklaracji XML określa numer
wersji XML i powinien mieć wartość 1.0.
■
Atrybut encoding określa sposób kodowania
dokumentu XML.
■
Atrybut standalone określa, czy dany dokument
XML wymaga odczytania zewnętrznego
dokumentu DTD.
35
Przykład innego kodowania
<?xml version="1.0" encoding="ISO-8859-1"
standalone="yes"?>
<person>
Erwin Schrödinger
</person>
36
Testowanie dokumentów XML
■
Każdy dokument XML, bez wyjątku, musi być
prawidłowo sformatowany. Tzn. musi spełniać
zbiór reguł, m.in.:
Każdy tag otwierający musi mieć swój tag zamykający,
Elementy mogą być zagnieżdżone, ale nie mogą się
przeplatać,
Może być tylko jeden element-korzeń,
Wartości atrybutów muszą być ograniczone
"
lub ',
Element nie może mieć dwóch atrybutów o tej samej
nazwie,
Komentarze i instrukcje sterujące przetwarzaniem nie
mogą być umieszczone wewnątrz tagów,
Znaki < i & nie mogą wystąpić w danych tekstowych
elementu lub atrybutu.
■
Przeglądarka, xmllint