320 likes | 452 Views
XML – e X tensible M arkup L anguage 2. Nazwy XML. Nazwy atrybutów i elementów w języku XML muszą spełniać te same reguły (te same reguły musza spełniać też inne, rzadziej stosowane konstrukcje). W ogólności będziemy mówić o nazwach XML. Nazwa XML może zawierać :.
E N D
Nazwy XML Nazwy atrybutów i elementów w języku XML muszą spełniać te same reguły (te same reguły musza spełniać też inne, rzadziej stosowane konstrukcje). W ogólności będziemy mówić o nazwach XML. Nazwa XMLmoże zawierać: 1) Standardowe litery (duże i małe) i cyfry np. A, b, 6 2) litery nieangielskie i ideogramy np. õ, Ж, IV 3) symbole: _ (podkreślnik), - (myślnik), . (kropka) Nazwa XMLnie może zawierać: ``(cudzysłów), ‘ (apostrof), $, %, ; (średnik) Symbol : (dwukropek) jest zarezerwowany dla tzw. przestrzeni nazw.
Nazwy XML Nazwa XMLnie może zawierać „pustych znaków”. Nazwa XMLnie może zaczynać się od ciągu znaków XML (zarezerwowane dla specyfikacji XML). Nazwa XMLmoże zaczynać się od: 1) litery 2) ideogramu 3) podkreślnika Nazwa XMLniemoże zaczynać się od: 1) liczby 2) myślnika 3) kropki
Nazwy XML Przykład 1 Poniższe elementy są prawidłowo sformatowane (well formed) czyli zgodne zregułami tworzenia dokumentów XML. 1) <Drivers_LicenseNumber>98 NY 32</Drivers_License_Nmber> 2) <month-day-year>7/23/2001</month-day-year> 3) <first_name>Alan</first_name> 4) <_4-lane>I-610</_4-lane> 5) <téléphone>011 33 91 55 27 55 27</téléphone>
Nazwy XML Przykład 2 Poniższe elementy nie są prawidłowo sformatowane (well formed) czyli nie są zgodne zregułami tworzenia dokumentów XML. 1) <month/day/year>7/23/2001</month/day/year> 2) <first name>Alan</first name> 3) <Driver's_License_Number>98 NY 32</Driver's_License_Number> 4) <4-lane>I-610</4-lane>
Encje Może się zdarzyć, że w dokumencie XML będzie będziemy chcieli użyć np. <. Bezpośrednie użycie < spowoduje, że znak ten będzie interpretowany jako początek znacznika. Jeżeli chcemu użyć znaku < w innym znaczeniu używamy encji <. Przykład 3 <SCRIPT LANGUAGE="JavaScript"> if (location.host.toLowerCase().indexOf("cafeconleche")<0) { location.href="http://www.cafeconleche.org/"; } </SCRIPT>
Encje Znak & jest zawsze rozpoznawany jako początek encji. Jeżeli chcemy wstawić w dokumencie ten znak to możemy użyć encji & Przykład 4 <publisher>A & B</publisher> W języku XML zdefiniowane są następujące encje: 1) < znak < 2) & znak & 3) > znak > 4) " znak `` 5) ' znak `
Encje Aplikacja parsująca dokument XML w przypadku napotkania encji automatycznie wstawia w to miejsce odpowiedni symbol do którego odnosi się dana encja. Oprócz powyższych 5 encji zdefiniowanych w specyfikacji XML istnieją encje które możemy sami definiować. Zajmiemy się nimi po omówieniu Definicji Typu Dokumentu (DTD).
<![CDATA[ i ]]> Sekcje CDATA Jeżeli chcemy umieścić w dokumencie XML tekst, który nie będzie parowany (np. komentarz) możemy to uczynić wykorzystując sekcje CDATA. Tekst taki umieszczamy między znacznikami: Przykład 5 <p>You can use a default <code>xmlns</code> attribute to avoid having to add the svg prefix to all your elements:</p> <![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> ]]>
Sekcje CDATA W sekcji CDATA nie może pojawić się symbol ]]>. Sekcje CDATA są przeznaczone dla ludzi, a nie maszyn. Komentarze W dokumencie XML komentarze wstawiamy podobnie jak w dokumentach HTML. <!–- komentarz --> W treści komentarza nie może pojawić się ciąg znaków --> ponieważ będzie on traktowany jako zakończenie komentarza. Komentarz może pojawić się praktycznie w dowolnym miejscu w dokumencie XML.
Komentarze Komentarz może się pojawić m.in. przed lub za elementem będącym korzeniem. Komentarz nie może się pojawić wewnątrz znacznika i wewnątrz innego komentarza. Przykład 6 <person> <!-- Alan Turing --> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession<!—prof2-->>mathematician</profession> <profession>cryptographer</profession> </person>
Komentarze Komentarze są przeznaczone dla ludzi i nie należy umieszczać w nich żadnych instrukcji przeznaczonych dla aplikacji. Instrukcje przetwarzania (Processing Instructions) Instrukcje przetwarzania są przeznaczone dla aplikacji, które mogą „czytać” dokument XML. <?cel instrukcja przetwarzania ?> Bezpośrednio po znaczniku <? występuje tzw. cel (target). Cel identyfikuje aplikację mającą dokonać przetwarzania. Przykład 7 <?php mysql_connect("database.unc.edu", "clerk", "password"); ?>
Instrukcje przetwarzania (Processing Instructions) Przykład 8 HTML <meta name="robots" content="noindex,nofollow"> XML <?robots index="yes" follow="no"?> Przykład 9 <?xml-stylesheet type="application/xml" href="people.xsl"?> Podobnie jak komentarze instrukcje przetwarzania mogą pojawić się przed lub za elementem będącym korzeniem. Instrukcje przetwarzania nie mogą pojawić się wewnątrz znacznika.
Deklaracja dokumentu XML Dokument XML powinien (ale nie musi) zaczynać się od deklaracji XML. Deklaracja XML jest instrukcją przetwarzania (gdzie cel=XML) posiadającą następujące atrybuty: • version– standardowo ma wartość "1.0" Atrybut ten jest obowiązkowym elementem deklaracji. • encoding– określa sposób kodowania tekstu w dokumencie XML. Standardowo dokumenty XML używają kodowania UTF-8. Atrybut ten nie jest obowiązkowy. Jeżeli jest pominięty przyjmowane jest domyślnie kodowanie UTF-8.
Deklaracja dokumentu XML • standalone – atrybut określa czy dla dokumentu XML określona jest Definicja Typu Dokumentu (DTD). Atrybut ten nie jest obowiązkowym elementem deklaracji. Jeżeli jest pominięty przyjmowana jest domyślnie wartość no. Przykład 10 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <person> Erwin Schrödinger </person> UWAGA: Deklaracja XML nie jest obowiązkowa w dokumencie XML, ale jeżeli jest musi być pierwszym elementem dokumentu.
Dokument prawidłowo sformatowany (well formed) Każdy dokument XML musi być prawidłowo sformatowany tzn. musi spełniać pewne warunki. Najważniejsze z nich to: 1) Każdy znacznik początkowy musi posiadać znacznik końcowy. 2) Elementy mogą być zagnieżdżone, ale nie mogą „nachodzić na siebie”. Przykład 10 <person> <name> <first_name>Alan<last_name> Turing</first_name></last_name> </name> </person>
Dokument prawidłowo sformatowany (well formed) 3) Dokument musi posiadać dokładnie jeden korzeń. Przykład 11 <person> <name> <first_name>Alan<first_name> <last_name>Turing</last_name> </name> </person> <profession>computer scientist</profession> Brak korzenia!!! 4) Wartości atrybutów muszą znajdować się między symbolami " . Przykład 12 <person born="1912-06-23" died="1954-06-07"/>
Dokument prawidłowo sformatowany (well formed) 5) Element nie może posiadać dwóch atrybutów o tej samej nazwie. 6) Komentarze i instrukcje przetwarzania nie mogą znajdować się wewnątrz znaczników. Przykład 13 <person<?php … ?>>Tom</person> 7) Znaki < i & nie mogą pojawić się w żadnym elemencie i atrybucie.
Definicja Typu Dokumentu - DTD DTD (ang. Document Type Definition) – rodzaj dokumentu definiujący formalną strukturę dokumentów XML. DTDokreśla składnię konkretnej aplikacji XML czyli: • definiuje każdy dopuszczalny element dokumentu, jego zbiór atrybutów i dopuszczalne wartości. • określa zagnieżdżanie i wymagalność poszczególnych elementów w dokumencie. Przykład 14 W dokumencie XHTML element li może pojawić się tylko jako dziecko elementów ollub ul. Informacja o tym zapisana jest właśnie w odpowiednim dokumencie DTD.
Definicja Typu Dokumentu - DTD Jeżeli dokument XML jest zgodny z określonym dla niego DTD mówimy wówczas że jest poprawny strukturalnie (w skrócie poprawny - ang. valid). Poprawność dokumentu XML nie jest wymagana (zależy to np. od twórcy dokumentu). Wymagane jest aby dokument był prawidłowo sformatowany. Jeżeli jednak dokument nie będzie poprawny aplikacja działająca w oparciu o dane w nim zapisane może nie działać poprawnie. UWAGA: Przyjęte jest, że w dokumencie XML zakazane jest wszystko co nie jest dozwolone przez związany z nim dokument DTD.
Definicja Typu Dokumentu - DTD Przykład 15 Rozważmy następujący dokument XML <person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person> Jak może wyglądać DTD dla tego dokumentu?
Deklaracja Typu Dokumentu Poprawny dokument XML musi zawierać deklaracje związanego z nim DTD. Przykład 16 <!DOCTYPE person SYSTEM "http://www.cafeconleche.org/dtds/person.dtd"> Deklaracja ta mówi, że korzeniem dokumentu jest element personoraz, że DTD dla tego dokumentu znajduje się pod adresem http://www.cafeconleche.org/dtds/person.dtd Deklaracja typu dokumentu znajduje się zawsze na początku dokumentu zaraz po deklaracji XML i przed korzeniem dokumentu.
Deklaracja Typu Dokumentu Przykład 17 <?xml version="1.0" standalone="no"?> <!DOCTYPE person SYSTEM "http://www.cafeconleche.org/dtds/person.dtd"> <person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person> Jeżeli dokument DTD znajduje się w tym samym folderze co dokument XML: <!DOCTYPE person SYSTEM "person.dtd">
Deklaracja Typu Dokumentu Deklaracja typu dokumentu zwykle znajduje się w oddzielnym pliku. Można ją jednak umieścić w dokumencie XML. Przykład 18 <?xml version="1.0"?> <!DOCTYPE person [ <!ELEMENT first_name (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT profession (#PCDATA)> <!ELEMENT name (first_name,last_name)> <!ELEMENT person (name,profession*)> ]> <person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person>
Deklaracje Elementów Deklaracja elementu ma następującą postać: <!ELEMENT nazwa_elementu zawartość_elementu> nazwa_elementu – określa nazwę elementu. zawartość_elementu – określa dzieci elementu i ich uporządkowanie. Zawartość elementu Tekst- najprostszą zawartością elementu jest zwykły tekst. Oznaczamy go przez #PCDATA. Przykład 19 <!ELEMENT phone_number (#PCDATA)>
Deklaracje Elementów Dzieci– deklarowany przez nas element może posiadać dzieci. Przykład 20 <!ELEMENT name (first_name, last_name)> Deklaracja ta oznacza, że element name posiada dzieci (kolejność ważna!!!): first_name , second_name Dla powyższej deklaracji elementu name poprawny jest dokument: <name> <first_name>Madonna</first_name> <last_name>Ciconne</last_name> </name> Nie jest poprawny dokument: <name> <last_name>Ciconne</last_name> <first_name>Madonna</first_name> </name>
Deklaracje Elementów W DTD możemy określić liczbę dzieci danego elementu wykorzystując następujące oznaczenia: ? – zero lub jeden element * - zero lub więcej elementów + - jeden lub więcej elementów Przykład 20 <!ELEMENT name (first_name, middle_name?, last_name?)> Element first_name jest wymagany. Elementmiddle_namemoże nie wystąpić lub wystąpić tylko raz. Element last_name może nie wystąpić lub wystąpić tylko raz.
Deklaracje Elementów Dla powyższej deklaracji następujący dokument XML nie jest poprawny. <name> <first_name>George</first_name> <middle_name>Herbert</middle_name> <middle_name>Walker</middle_name> <last_name>Bush</last_name> </name> <name> <last_name>Ciconne</last_name> <first_name>Madonna</first_name> </name> Przykład 21 <!ELEMENT name (first_name,middle_name*,last_name?)> Elementmiddle_namemoże nie wystąpićlub wystąpić wiele razy.
Deklaracje Elementów Może się zdarzyć, że dwa różne przykłady tego samego elementu będą zawierały różne elementy-dzieci. Przykład 22 <!ELEMENT transport (train|bus|car)> Dzieckiem elementu transportmoże być trainlubbuslubcar. Elementy mogą mieć bardziej skomplikowane definicje. Przykład 23 <!ELEMENT center ((x, y)|(r,))> Dziećmi elementu center mogą być x iylubri.
Deklaracje Elementów Przykład 25 <!ELEMENT a (b|(c+,d))> Dzieckiem elementu amoże być: b lub jedno lub wielecid Przykład 26 <!ELEMENT definition (#PCDATA|term)*> Dzieckiem elementu definitionmoże byćtekst zawierający dowolną ilość elementówterm.
Deklaracje Elementów Poniższy dokument jest poprawny ze względu na powyższą deklarację: <definition>The <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 a Turing machine is true for all equivalent machines no matter how implemented. </definition> Element pusty deklarujemy następująco: <!ELEMENT image EMPTY>
Deklaracje Elementów I na koniec DTD dla dokumentu z przykładu 15 tzn: <person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person> DTD: <!ELEMENT person (name, profession*)> <!ELEMENT name (first_name, last_name)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT profession (#PCDATA)>