Czym jest XML ?


  • XML jest skórtem od EXtensible Markup Language
  • XML został stworzony do przenoszenia danych, nie do ich prezentacji
  • Znaczniki w XML nie są zdefiniowane. Trzeba samemu zdefiniować własne
  • XML jest pomyślany jako język samoopisujący się
  • Dokument XML zawiera tekst, nie może zawierać danych binarnych
  • XML jest oparty o model dokumentu jako drzewa, którego węzłami są elementy a liśćmi - pola tekstowe.
Celem stworzenia języka XML nie było zastąpienie HTML'a. Języki te zostały stworzone z myślą o innych celach: XML został stworzony do przenoszenia i przechowywania danych, z uwzglednieniem tego co te dane opisują, natomiast nadrzędnym celem HTML jest prezentacja danych z naciskiem na to jak te dane wyglądają. idź do góry

Znaczniki


Znaczniki XML wyglądają podobnie do znaczników HTML, tzn. znacznik startowy rozpoczyna się od znaku "<", a znacznik końcowy od "</". Oba kończą się znakiem ">".
Pomiędzy tymi znakami znajduje się nazwa znacznika, która może być dowolnie definiowana. Powinna ona odnosić się i opisywać zawartość znacznika, a nie sposób jego prezentacji.
 <TAG_NAME>
   TAG_CONTENT
 </TAG_NAME>
W XML mogą występować elementy nie zawierające żadnej treści, tzw. empty tags. W takim przypadku ich zapis może zostać uproszczony do postaci jednego znacznika.
 <EMPTY_TAG_NAME />
Przykład:
 1 <rozklad>
 2   <miejscowosc>Poznań</miejscowosc> 
 3   <linia>
 4       <numer>5</numer>
 5       <poczatek>Górczyn</poczatek>
 6       <koniec>Miłostowo</koniec>
 7   </linia>
 8   <linia>
 9       <numer>105</numer>
10       <poczatek>Rondo Rataje</poczatek>
11       <koniec>Piątkowo</koniec>
12   </linia>
13 </rozklad>

[pokaż zawartość pliku] [pobierz plik] idź do góry

Atrybuty


Znaczniki XML mogą posiadać atrybuty. Jest to para nazwa-wartość, która jest powiązana ze znacznikiem startowym elementu. Nazwy są oddzielone od wartości znakiem "=". Wartość powinna być otoczona pojedynczym lub podwójnym apostrofem.
 <TAG_NAME ATTRIBUTE_NAME="VALUE">
  TAG_CONTENT
</TAG_NAME>
Częstym pytaniem jest pytanie o to czy daną informację powinniśmy zapisywać jako atrybut, czy może jako element podrzędny. Niestety nie ma prostej i jednoznacznej odpowiedzi na tego typu pytania. Przyjmuje się, że atrybuty służą do zapisywania meta-informacji, natomiast elementy podrzędne wykorzystywane powinny być do przechowywania informacji właściwej. Problem polega jednak na tym, że czasem trudno jest ustalić co jest informacją właściwą, a co meta-informacją.
Istnieją jednak ograniczenia, które mogą być pewną wskazówką w tej kwestii. Po pierwsze dany element nie może mieć dwóch lub więcej atrybutów o tej samej nazwie. Po drugie, atrybuty mogą przyjmować tylko wartości w postaci ciągu znaków, co jest w wielu sytuacjach poważnym ograniczeniem. Przykład:
 1 <rozklad okres="letni">
 2   <miejscowosc>Poznań</miejscowosc> 
 3   <linia status="remontowana" typ="tramwaj">
 4       <numer>5</numer>
 5       <poczatek>Górczyn</poczatek>
 6       <koniec>Miłostowo</koniec>
 7   </linia>
 8   <linia typ="autobus">
 9       <numer>105</numer>
10       <poczatek>Rondo Rataje</poczatek>
11       <koniec>Piątkowo</koniec>
12   </linia>
13 </rozklad>


[pokaż zawartość pliku] [pobierz plik] idź do góry

Nazwy XML


  • Nazwy elementów i atrybutów XML mogą zawierać dowolny znak alfanumeryczny.
  • Mogą też zawierać następujące znaki specjalne: "_", "-", ".". Inne nie wymienione znaki są niedozwolone.
  • Wyjątkiem jest ":", którego użycie jest ściśle zdefiniowane i ograniczone do tzw. przestrzeni nazw.
  • Nazwy XML muszą rozpoczynać się od litery, ideogramu lub znaku podkreślenia. (Nie mogą rozpoczynać się od cyfry lub znaków: "-" lub ".".)
  • Długość nazwy XML nie jest w żaden sposób ograniczona.
  • Wielkość liter w nazwie ma znaczenie.
Przykład 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> 
Natomiast poniższe przykłady są nie poprawne (znaki nie spełniające reguł zostały wyróżnione).
 <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>  <-- spacja w nazwie atrybutu 
 <4-lane>I-610</4-lane>
idź do góry

Encje


Encje są czymś w rodzaju szablonów tekstu. Pozwalają uprościć częste wpisywanie jakiegoś tekstu a tym samym także pomyłek. To również najlepszy sposób, na umieszczenie w kodzie tzw. „niedozwolonych znaków”. W XML występuje 5 predefiniowanych encji, służących zapisywaniu w treści dokumentu znaków specjalnych:
  • &lt; - znak mniejszości, <
  • &amp; - znak ampersand, &
  • &gt; - znak większości, >
  • &quot; - znak cudzysłowu, "
  • &apos; - znak apostrofu, '
W treści elementu muszą być używane jedynie dwie pierwsze encje jeśli odpowiadające im znaki występują we wspomnianej treści. Zastosowanie pozosotałych jest opcjonalne.
 <Tresc_pytania>
    Znak "&lt;" oznacza ... 
 </Tresc_pytania>
lub
 <Element Atrybut="To jest &quot;ciekawa&quot; wartość">
    ...
 </Element>
idź do góry

Przestrzenie nazw


Język XML pozwala ze sobią mieszać różne bazowane na XML języki, np. XHTML , SVG , MathML , Atom , RDF , itp. Dopóki zbiór znaczników tych języków jest rozłączny sprawa jest prosta. Problemy zaczynają się w sytuacji, gdy dany znacznik ma różne znaczenie w więcej niż jednym meta języku. W takim przypadku konieczne jest wykorzystanie przestrzeni nazw, które stanowią niejako uzupełnienie nazwy elemenu dzięki czemu usuwają niejednoznaczność jego interpretacji.
Tak więc przestrzenie nazw pozwalają używać dowolnie wielu słowników znaczników w jednym dokumencie i to w sposób dość elastyczny. Aby wykorzystać określoną przestrzeń nazw należy zastosować następującą składnię
 <TAG_NAME xmlns:PREFIX="URI" >
    TAG_CONTENT
 </TAG_NAME>
Atrybut xmlns definiuje jakiej przestrzeni nazw będzie używał dany element i jego elementy podrzędne np. :
 <xml xmlns="http://www.w3.org/1999/XSL/Transform">
Jeśli naprzemiennie wykorzystywanych jest więcej przestrzeni nazw, można zdefiniować dla każdej z nich przedrostek np. :
 <root xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:svg="http://www.w3.org/2000/svg" >
      <xsl:element> 
         ...
      </xsl:element>
      <svg:element>
         ...
      </svg:element>
 </root>
idź do góry

Instrukcje przetwarzające


Instrukcje przetwarzania (tzw. processing instruction) zawierają informacje potrzebne dla aplikacji przetwarzających dokument XML. Aby odróżnić je od zwykłego elementu, są one umieszczane w bloku, który jest ograniczony znakami "<?" i "?>". Słowo występujące po znaczniku otwierającym jest słowem kluczowym, które jest rozpoznawane przez aplikację docelową. Dalsza część informacji jest przetwarzana przez tą właśnie aplikację. Format zapisu tych danych może być różny, w zależności od wykorzystywanej aplikacji.

Poniżej kilka przykładów:
 połączenie z arkuszem CSS 
 <?xml-stylesheet type="text/css" href="default.css" ?>  
 
 połączenie z arkuszem XSL 
 <?xml-stylesheet type="text/xml" href="default.xsl" ?>   
 
 instrukcja "wstaw stronę" dla programu DTP  
 <?DTPEditor do:page-break ?>  
  
idź do góry

Deklaracja


Na początku dokumentu może (ale nie musi) występować deklaracja XML, która służy do podania wersji standardu XML, standardu kodowania użytego do zapisania dokumentu i informacji czy dany dokument nie zawiera odwołań do źródeł zewnętrznych.
 <?xml version="1.0" encoding="ASCII" standalone="yes"?>
Jeśli w dokumencie brak jest deklaracji to przyjmuje się, że dane zostały zapisane w standarcie UTF-8, a dokument zawiera odwołania do źródeł zewnętrznych, czyli poniższa deklaracja, jest równoważna ustawieniom domyślnie przyjmowanym.
 <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
idź do góry

Poprawność składniowa


Dokument jest poprawny składniowo (ang. well-formed) jeśli jest zgodny z gramatyką XML i spełnia tzw. "well-formedness constraints" wymienione w specyfikacji XML .

Przykładowe reguły, które muszą zostać spełnione aby dokument był poprawny składniowo:
  • Dla każdego znacznika początkowego, musi istnieć odpowiadający mu znacznik końcowy.
  • Elementy muszą się w sobie zagnieżdżać, a nie krzyżować lub nakładać.
  • Może istnieć tylko jeden element główny.
  • Wartości atrybutów muszą być zawarte w znakach apostrofów
  • Element nie może zawierać dwóch atrybutów o tej samej nazwie
  • Komentarze i instrukcje przetwarzające nie mogą występować wewnątrz znaczników.
idź do góry

Poprawność strukturalna


Dokument XML jest poprawny strukturalnie (ang. valid) jeśli jest zgodny z definicją struktury. Jeśli nie jest powiedziane inaczej, chodzi o DTD , a dokument ma spełniać tzw. "validity constraints" wymienione w specyfikacji XML . Tych samych terminów używa się także do określenia zgodności ze schematem XML Schema bądź innych standardów np Relax NG . idź do góry