background image

1

Podstawy programowania II

dr inż. Paweł Róg  

background image

2

Zagadnienia

Projektowanie dokumentów XML

Elementy i atrybuty

Typy dokumentów XML

Pisanie dokumentów XML

Testowanie dokumentów XML

background image

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>

background image

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

background image

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).

background image

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>

background image

7

Korzeń, rodzice i dzieci

Zależności pomiędzy elementami można 
przedstawić w postaci drzewa 

background image

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. 

background image

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.

background image

10

Mieszana zawartość

W poprzednim przykładem zawartością 
elementów 
first_namelast_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.

background image

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>

background image

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>

background image

13

Korzeniem przedstawionego dokumentu jest 
element 
biography.

Element biography zawiera elementy-dzieci 
paragraph i definition.

Elementy paragraph i definition zawierają 
elementy-dzieci: 
termemphasizename 
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.

background image

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>

background image

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>

background image

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>

background image

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>

background image

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>

background image

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.  

background image

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>

background image

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>

background image

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 
&lt;.

Kiedy parser będzie czytał dokument, zamieni 
każde wystąpienie 
&lt;&#x60; lub &#x3C; na 
znak 
<.

background image

23

Referencje

<SCRIPT LANGUAGE="JavaScript">

if (location.host.toLowerCase( ).indexOf("ibiblio") 

&lt;

 0) {

    location.href="http://ibiblio.org/xml/";
}

</SCRIPT>

background image

24

Podobnie, dane tekstowe nie mogą zawierać znaku & 

dlatego należy go zastąpić referencją &amp;

<company>W.L. Gore 

&amp;

 Associates</company>

Ponieważ kod znaku & to 38, dlatego można go rónież 

zastąpić referencją &#38;

<company>W.L. Gore 

&#38;

 Associates</company>

background image

25

Predefiniowane referencje:

&lt;
Znak mniejszości, lewy nawias kątowy (<)

&amp;
Ampersand (&)

&gt;
Znak większości, prawy nawias kątowy (>)

&quot;
Cudzysłów (")

&apos;
Apostrof (')

background image

26

Tylko &lt; oraz &amp; są wymagane. Pozostałe są 

opcjonalne. &quot; i &apos; są przydatne wewnątrz 

wartości atrybutów, w celu uniknięcia niejednoznaczności 

 i ':

<image source='oreilly_koala3.gif' 
width='122' height='66'

       alt='Powered by O

&apos;

Reilly Books'

/>

background image

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ą 
&lt; i &amp;

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 
& nie są interpretowane.

background image

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>

background image

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. -->

background image

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"?>

background image

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( );

?>

background image

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>

background image

33

Deklaracja XML

Dokument XML może rozpoczynać się od deklaracji XML:

<?xml version="1.0" encoding="ASCII" standalone="yes"?>

<person>

  Alan Turing

</person>

background image

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.

background image

35

Przykład innego kodowania

<?xml version="1.0" encoding="ISO-8859-1" 

standalone="yes"?>

<person>

  Erwin Schrödinger

</person>

background image

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


Document Outline