Za pomocą XML-a komunikować się może praktycznie każdy z każdym i wszystko ze wszystkim, co jest zresztą powszechnie wykorzystywane - w końcu właśnie w tym celu ten język powstał. Kolejnym atutem XML-a jest jego prosta budowa oparta na znacznikach. Poza tym jest łatwiejszy w czytaniu dla człowieka niż np. JSON - nie stanowi żadnego problemu "przeczytanie" prostego dokumentu XML bez użycia żadnych parsujących narzędzi.
W artykule tym po krótce omówimy sobie strukturę dokumentów XML, a w następnych artykułach przeanalizujemy tworzenie, odczyt i przetwarzanie dokumentów XML za pomocą PHP oraz Javascriptu.
Definicja standardu
Każdy dokument XML zaczynamy od definicji standardu XML dokumentu i podania kodowania znaków dla niego:
- <?xml version="1.0" encoding="UTF-8"?>
Możemy pominąć podawanie tych parametrów, przyjęte zostaną wtedy wartości domyślne, takie jak powyżej, jednakże przyjęło się, że podajemy taką definicję na początku każdego dokumentu.
Przykład prostego dokumentu XML
- <?xml version="1.0" encoding="UTF-8"?>
- <books category="fantasy">
- <book>
- <title>Hobbit</title>
- <author>J.R.R. Tolkien</author>
- </book>
- <book>
- <title>Wieża Jaskółki</title>
- <author>Andrzej Sapkowski</author>
- </book>
- </books>
Znaczniki
Struktura dokumentu opiera się na znacznikach, w których opisujemy poszczególne elementy. Znacznik taki ma postać:
- <znacznik>jakaś zawartość</znacznik>
Przykładowo, opisując tytuł książki, możemy opisać go znacznikiem:
- <title>Pan Tadeusz</title>
Każdy znacznik może posiadać atrybuty go opisujące, które definiujemy następująco:
- <znacznik atrybut1="wartość1" atrybut2="wartość2" [...]>
Przykładowo:
- <person name="Jan Kowalski" age="28">
Znaczniki można w sobie zagnieżdzać, tj. każdy znacznik może posiadać w sobie kolejne znaczniki. Mówimy wtedy, że znacznik położony wyżej jest rodzicem znacznika położonego niżej, a znacznik położony niżej w hierarchi jest dzieckiem znacznika, w którym się zawiera. Popatrzmy na przykład z książką:
- <book>
- <title>Pan Tadeusz</title>
- <author>Adam Mickiewicz</author>
- </book>
Znaczniki <title> i <author> są dziećmi znacznika <book> (zawierają się w nim), jednocześnie znacznik <book> jest tutaj ich rodzicem. Zagnieżdżać możemy oczywiście głębiej, popatrzmy na przykład:
- <shop>
- <books category="poemat">
- <book>
- <title>Pan Tadeusz</title>
- <author>
- <first_name>Adam</first_name>
- <last_name>Mickiewicz</last_name>
- </author>
- </book>
- </books>
- </shop>
Składnia i restrykcje
XML jest bardzo restrykcyjny jeśli chodzi o składnię:1. W każdym dokumencie musi istnieć jeden nadrzędny, główny znacznik, w którym zawierać się będą pozostałe.
Znacznik główny nazywamy korzeniem - ang. root. W przypadku powyżej takim root-em dokumentu jest <shop></shop>.
2. Wszystkie znaczniki muszą zostać zamknięte w odpowiedniej kolejności - tak jak zostały otwarte.
Przykład niepoprawny:
- <books>
- <book>
- <title>Pan Tadeusz</title>
- <author>Adam Mickiewicz</author>
- </books>
- </book>
Przykład poprawny:
- <books>
- <book>
- <title>Pan Tadeusz</title>
- <author>Adam Mickiewicz</author>
- </book>
- </books>
3. Wszystkie puste znaczniki, a więc takie które nie posiadają znacznika zamykającego:
- <znacznik></znacznik>
muszą zostać domknięte za pomocą:
- <znacznik />
4. Nazwa znacznika może składać się ze znaków alfanumerycznych (litery a-z, A-Z, cyfry 0-9), nie powinna zawierać polskich znaków. W nazwie znacznika możemy użyć trzech znaków specjalnych:
- podkreślnika - _
- myślnika - -
- i kropki - .
6. Wszystkie znaczniki HTML ujęte pomiędzy znaczniki XML muszą zostać zamienione na encje.
7. Nigdzie w dokumencie (poza otwieraniem i zamykaniem znaczników) nie wolno nam użyć znaków:
- < (lt)
- > (gt)
- & (ampersand)
Musimy zamienić je na encje:
- < na <
- > na >
- & na &
9. Komentarze w dokumencie XML umieszczamy podobnie jak w HTML-u:
- <!-- komentarz -->
10. Wszystko to co ma nie być przetwarzane przez parser XML umieszczamy w bloku:
- <![CDATA[
- ...
- ]]>
Walidacja
Dokument XML przygotowany lub wygenerowany niepoprawnie nie zostanie sparsowany. W sieci istnieje cała masa stron oferujących sprawdzanie poprawności składni dokumentów XML, są to tzw. walidatory. Przykładowo jeden z nich: https://validator.w3.org/ - walidator oferuje możliwość sprawdzenia dokumentu XML po podaniu jego URL-a, pliku lokalnego lub dokumentu wklejonego bezpośrednio do formularza. A na tej stronie wygenerujemy sobie widok drzewka z dokumentu XML: http://codebeautify.org/xmlviewerPrzestrzenie nazw
Przestrzenie nazw (namespaces) zostały stworzone w celu zdefiniowania sposobu opisu znaczników, które mogą mieć różne znaczenie w zależności od typu elementu. Przykładowo - znacznik <title> może mieć jasno określone znaczenie dla danego typu elementu, ale dla innego typu może już oznaczać coś innego.Inny przykład: w jednym dokumencie może znaleźć się opis książki oraz opis faktury za nią. W obu przypadkach istnieć może znacznik <author>, tyle tylko, że w przypadku książki oznacza on autora książki, a w przypadku faktury osobę ją wystawiającą. Jak aplikacja przetwarzająca takiego XML-a ma teraz to odróżnić i nie stwierdzić, że osobą wystawiającą fakturę za "Pana Tadeusza" jest np. Adam Mickiewicz?
Dlatego właśnie wprowadzono nazewnictwo oparte na przestrzeniach nazw. Kolejną korzyścią jest to, iż w jednym dokumencie możemy wykorzystać tyle przestrzeni ile tylko chcemy, tak więc przykładowy znacznik <title> wykorzystać możemy w jednym dokumencie w kilku różnych kontekstach - różnych dla każdej z przestrzeni nazw.
Przestrzeń nazw z jakiej będziemy korzystać określamy za pomocą:
- xmlns:PREFIX = "URI_DO_SPECYFIKACJI"
gdzie:
- xmlns - to nazwa specjalnego atrybutu, którym określamy przestrzeń (xmlns to skrót od XML NameSpace)
- PREFIX - określa skróconą nazwę przestrzeni, czyli jej prefix, który dodawać będziemy później do znaczników
- URI_DO_SPECYFIKACJI - adres prowadzący do opisu danej przestrzeni nazw. W zasadzie może on nawet prowadzić do nikąd, choć wg zaleceń prowadzić powinien on do dokumentu opisującego daną przestrzeń.
Przykładowa definicja przestrzeni nazw:
- <b:book xmlns:b="http://books.com/ns">
- <b:author>Adam Mickiewicz</b:author>
- <b:title>Pan Tadeusz</b:title>
- </b:book>
Jak widać korzystamy tutaj z trzech znaczników:
- <book>
- <author>
- <title>
Każdy z nich deklarowany jest w przestrzeni nazw:
- http://books.com/ns
której skrótowym prefixem jest:
- b
Nazwę znacznika w danej przestrzeni definiujemy na zasadzie:
- <PREFIX:ZNACZNIK>
w naszym przykładzie:
- <b:book>
- <b:author>
- <b:title>
Należy tutaj pamiętać, że również i znaczniki zamykające muszą posiadać prefiksy przestrzeni nazw, o ile taki wystąpił w znaczniku otwierającym.
Przestrzeń nazw obowiązuje od miejsca jej zadeklarowania, tak więc nie możemy najpierw użyć znaczników z danej przestrzeni, a dopiero później jej zadeklarować. Ponadto - przestrzeń nazw obowiązuje jedynie dla znacznika, w którym została określona oraz we wszystkich znacznikach w nim zawartych (bez względu na stopien zagnieżdżenia). Zdefiniowanie zatem przestrzeni w głównym elemencie dokumentu spowoduje, że przestrzeń będzie obowiązywać dla całego dokumentu, gdyż wszystkie pozostałe znaczniki się w nim zawierają.
Można także stworzyć przestrzeń nazw domyślną dla wszystkich elementów zawierających.
W przypadku takim nie musimy już podawać prefixa przestrzeni przy znacznikach dzieci.
Deklaracja przestrzeni domyślnej odbywa się również bez podawania prefixu.
Przykład:
- <book xmlns="http://books.com/ns">
- <author>Adam Mickiewicz</author>
- <title>Pan Tadeusz</title>
- <book>
W powyższym przykładzie wszystkie znaczniki zawarte pomiędzy <book></book> znajdują się domyślnie w przestrzeni nazw http://books.com/ns.
Przestrzenie nazw mogą również dotyczyć atrybutów:
- <b:book xmlns:b="http://books.com/ns" b:hardcover="yes">
- <b:author>Adam Mickiewicz</b:author>
- <b:title>Pan Tadeusz</b:title>
- </b:book>
Jeśli dla danego znacznika nie jest zdefiniowana żadna przestrzeń nazw to mówimy, ze występuje on w domyślnej, globalnej przestrzeni nazw.
Świetny blog, dobrze wszystko objaśnione
OdpowiedzUsuń______________________
https://www.aptusshop.pl/sklepy-internetowe-poznan.php
VmellumplanzeDes Moines Renee Campbell https://marketplace.visualstudio.com/items?itemName=riarili-pa.Descargar-Ship-Simulator-Extremes-gratuita
OdpowiedzUsuńveydisportpa
dalapos_de1985 Christine Tran install
OdpowiedzUsuńClick
Programs
missaigaben