XML XML czyli Extensible Markup Language (rozszerzalny język znaczników) można traktować jak stosunkowo prosty i elastyczny format tekstowy wywodzący się z SGML. Pierwotnie został zaprojektowany aby umożliwiać publikację dokumentów elektronicznych na wielką skalę. XML odgrywa znaczącą rolę w ramach wymiany różnego rodzaju danych w sieci WWW i nie tylko. XML to język, który został utworzony przez W3C, czyli World Wide Web Consortium, czyli podstawową organizację, która zajmuje się formułowaniem standardów sieciowych. XML jest oparty o znaczniki posiadające formę podobną jak w przypadku języka HTML. Jednak w odróżnieniu od HTML, w którym lista znaczników była narzucona, ogólna koncepcja XML zakłada możliwość tworzenia własnych znaczników i formułowania w ten sposób nowych języków. Dlatego też XML traktowany jest jako tzw. metajęzyk znaczników, ponieważ umożliwia tworzenie nowych języków znacznikowych. Kiedyś większość aplikacji posiadała swoje własne, często binarne niekompatybilne ze sobą formaty plików konfiguracyjnych, zbiorów danych wejściowych i innych. Ich obsługa i przetwarzanie wymagały wiele wysiłku ze strony programisty. XML-owa, znacznikowa koncepcja zapisu danych, zastąpiła tradycyjne rozwiązania. Można zauważyć, że w bardzo wielu programach komputerowych porzucono tradycyjne formaty na rzecz plików w formacie XML. Przykładem tego mogą być choćby pliki opisujące konfigurację projektów C++ Builder lub Delphi. Cech XML: jest językiem rozszerzalnym czyli można w ramach niego tworzyć własne nazwy znaczników i ich zbiory formułując w ten sposób nowe języki, lub choćby formaty danych; umożliwia tworzenie nowych języków, które określa się jako aplikacje XML; dane XML zapisywane są z reguły w formacie tekstowym, co niesie ze sobą wiele zalet, choćby taką, że mogą być one łatwo przenoszone pomiędzy różnymi programami czy systemami operacyjnymi; położony jest duży nacisk na oddzielenie formatu od zawartości; pliki XML powinny zawierać właściwe dane, natomiast ich wygląd i opis prezentacji często formułowany jest za pomocą innych technik np. CSS lub XSL. plik1.xml <?xml version="1.0" encoding="utf-8" standalone="yes"?> <DOKUMENT> <TYTUL> Witaj w XML </TYTUL> <KOMUNIKAT> Pierwszy dokument XML </KOMUNIKAT> </DOKUMENT> demonstruje prosty dokument XML. Wykorzystano 3 różne znaczniki zdefiniowane na jego potrzeby (DOKUMENT, TYTUL, KOMUNIKAT). Oprócz nich w dokumencie znalazła się także wartości tekstowe ( Witaj w XML, Pierwszy dokument XML ). 13 października 2015 Strona 1
WALIDACJA I PARSOWANIE Jedną z bardzo istotnych cech XML odróżniających go od niektórych innych języków takich jak np. HTML, jest to, że dokument musi być poprawnie sformułowany (well-formed) aby mógł być przetwarzany. Jeśli błędy wystąpią w dokumencie XML, to od razu na wstępie zostanie od odrzucony przez oprogramowanie przetwarzające. Dokument jest poprawnie sformułowany jeśli wypełnia reguły składniowe XML. Miejsce sprawdzania poprawności sformułowania w ramach etapów przetwarzania XML pokazuje rysunek. W pierwszej kolejności po wczytaniu dokumentu moduł parsera dokonuje sprawdzenia poprawności sformułowania jego zawartości. Najważniejsze kwestie w zakresie poprawnego formułowania dokumentu to: Rozpoczyna się deklaracją XML <?xml version="1.1" standalone="yes"?> Znacznik początkowy <coś> posiada zawsze znacznik końcowy </coś> Elementy puste kończą znaki /> np. <pusty /> Zawiera dokładnie jeden element główny, który zawiera wszystkie inne elementy Elementy nie mogą się przeplatać <imie> Agata </imie> Wartości atrybutów zawarte są w cudzysłowach lub <IMG SRC="poranek.jpg" alt= to jest obrazek poranek /> <element text="cudzysłów pojed. to ' a podw. to " "> Znaków < i & używaj tylko do otwierania znaczników i encji używaj zamienników < i & <h1> Tom & Jery </h1> dla <h1> Tom & Jery </h1> Używaj tylko encji predefiniowanych: & < > ' " Uwaga: każdy znak można zapisać jako &# i dziesiętny lub szesnastkowy kod znaku w Unicode np.: dla znaku Nazwy znaczników i atrybutów muszą zaczynać się od litery lub podkreślenia dalej mogą być litery, cyfry, podkreślenia, znaki i kropki. Komentarze oznaczamy: <!-- to jest komentarz --> 13 października 2015 Strona 2
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"?> Wszystkie instrukcje przetwarzania zaczynają się <? i kończą?>. Ustawienie standalone="yes" określa że dokument jest samodzielny, czyli nie odwołuje się do tzw. encji zewnętrznych ani ich nie zawiera. W niektórych przypadkach można pominąć deklarację XML. Jest to zależne od wymagań programu, który będzie przetwarzał dokumenty. Dokument XML może zawierać większą liczbę instrukcji przetwarzania. Często wykorzystuje się je po to, by przekazać oprogramowaniu polecenie wykonania pewnej czynności związanej z przetwarzaniem XML np. wykorzystanie procesora XSLT do przetworzenia elementów, lub podłączenie i sformatowanie dokumentu za pomocą arkusza CSS. Ponieważ nie ma ograniczeń co do składni instrukcji przetwarzania, w dokumentach można stosować własne instrukcje, które mogą być obsługiwane za pomocą oprogramowania np. takiego które sami opracowujemy. Przykładem oryginalnej instrukcji przetwarzania mogła by być : <?wyszukaj nazwa="google" jezyk="pl"?> Poprawny dokument XML plik2.xml <?xml version="1.0" encoding="utf-8" standalone="yes"?> <DC nr_spotkania="2"> <pozdrowienie> Witajcie na kolejnych zajeciach!!! </pozdrowienie> <temat> XML & DTD </temat> <!-- komentarz w XML --> <zakres> <z> przykladowe dokumenty XML </z> > <z> arkusze stylow w XML </z> <z> przyklad najprostszego przeksztalcenia XSL dla XML <!-- komentarz w XML -- </z> <z> DTD konstrukcja </z> </zakres> <zadanie_zaliczajace/> <![CDATA[[dane ignorowane przez parser ('&','<')]]]> </DC> Sekcje CDATA pozwalają na zapisywanie w węzłach tekstowych znaków specjalnych bez stosowania referencji do znaków czy encji. Jedynym zabronionym w sekcji CDATA ciągiem znaków jest ]]>, który zawsze zamyka sekcję. Ten ciąg znaków jest także zabroniony w zawartości tekstowej 13 października 2015 Strona 3
dokumentu XML (dzięki temu w sekcji CDATA można zacytować dokument XML nie zawierający sekcji CDATA). Atrybuty czy elementy? Wartości atrybutów muszą być ujęte w cudzysłów: Nie ma sztywnych zasad jakie informacje umieszczać w elementach, a jakie w atrybutach. atrybuty nie mogą zawierać wielu wartości (elementy mogą) atrybuty nie mogą zawierać struktury drzewa (elementy mogą) atrybuty nie są łatwo rozszerzalne (dla przyszłych zmian) Atrybuty są trudne do odczytania i utrzymania. Najlepiej wykorzystywać elementy dla danych, a atrybuty dla informacji, które opisują dane. Rozbicie atrybutów na dane atomowe w przyszłości może ułatwić nawigację po dokumencie. Metadane (dane o danych) powinny być przechowywane jako atrybuty, a dane powinny być przechowywane w elementach. 13 października 2015 Strona 4
Parsowanie dokumentu XML w przeglądarce : plik3.xml <?xml version="1.0" encoding="utf-8"?> <pytanietestowe> <tresc> Do czego w HTML mozna uzyc konstrukcji: <div class="underline"> </tresc> <odpowiedza pkt="0">do podkreslenia tekstu</odpowiedza> <odpowiedzb pkt="1">do rozpoczecia nowego bloku tekstu z zastosowaniem klasy stylu o nazwie "underline"</odpowiedzb> <odpowiedzc pkt="-0.5">do wprowadzenia linii poziomej</odpowiedzc> </pytanietestowe> Użycie sekcji CDATA kończy problem plik3a.xml <?xml version="1.0" encoding="utf-8"?> <pytanietestowe> <tresc> <![CDATA[ Do czego w HTML moze byc wykorzystana konstrukcja: <div class="underline"> ]]> </tresc> <odpowiedza pkt="0">do podkreslenia tekstu</odpowiedza> <odpowiedzb pkt="1">do rozpoczecia nowego bloku tekstu z zastosowaniem klasy stylu o nazwie "underline"</odpowiedzb> <odpowiedzc pkt="-0.5">do wprowadzenia linii poziomej</odpowiedzc> </pytanietestowe> 13 października 2015 Strona 5
Na serwerze Pascal zostały zainstalowane narzędzia wspierające tworzenie dokumentów XML i ich przetwarzanie. osoby.xml <?xml version="1.0" encoding="utf-8"?> <dane> <imie>adam</imie> <nazwisko>kowalski</nazwisko> <imie>marek</imie> <nazwisko>abacki</nazwisko> <imie>andrzej</imie> <nazwisko>babacki</nazwisko> </dane> Sprawdzanie poprawności (parsowanie) dokumentu XML z wykorzystaniem programu xmllint. xmllint osoby.xml DTD DTD (ang. Document Type Definition) opisuje formalną strukturę dokumentu XML stanowi jego gramatykę. Reguły zawarte w pliku DTD m.in.: definiują elementy (np. nazwę elementu i miejsce występowania) charakteryzują typy danych elementów określają liczbę wystąpień elementu określają sposoby zagnieżdżeń tzw. hierarchiczną strukturę dokumentu Dokument XML spełniający wszystkie (!) reguły zawarte w DTD to dokument poprawny strukturalnie (ang. valid document). Na kod DTD w głównej mierze składają się definicje dopuszczalnych w dokumencie elementów. Nie jest istotna kolejność definiowania elementów. Ogólna składnia definicji elementu w DTD wygląda następująco: <!ELEMENT nazwaelementu (model_zawartości)> Dopuszczalna zawartość elementu: (#PCDATA) dowolna zawartość tekstowa EMPTY element pusty ANY dowolna zawartość (pusta lub nie) Wskaźniki liczby wystąpieńokreślają dozwoloną liczbę wystąpień danego elementu w dokumencie XML 13 października 2015 Strona 6
* 0 lub więcej wystąpień + 1 lub więcej wystąpień? 0 lub 1 wystąpienie, sekwencja alternatywa Atrybuty: <!ATTLIST nazwa_elementu nazwa_atrybutu typ_atrybutu kwalifikator_wartości wartość_domyślna... nazwa_atrybutu typ_atrybutu kwalifikator_wartości wartość_domyślna> typ_atrybutu ID - unikatowa (w ramach dokumentu) wartość identyfikatora, IDREF - wskaźnik do innego elementu (identyfikowanego z wykorzystaniem atrybutu typu ID), IDREFS - zbiór wskaźników (rozdzielone znakami białymi) do innych elementów (identyfikowanego z wykorzystaniem atrybutu typu ID), NMTOKEN - ciąg dozwolonych znaków, NMTOKENS - ciąg wartości NMTOKEN oddzielonych spacjami, (a b c) - jedna z podanych wartości (typ wyliczeniowy). kwalifikator_wartości #REQUIRED - wartość wymagana, musi zostać podana, #IMPLIED - wartość nie musi zostać podana, #FIXED - wartość stała. Dla dokumentu osoby.xml <!ELEMENT dane ( osoba* )> <!ELEMENT osoba ( imie, nazwisko )> <!ELEMENT imie (#PCDATA)> <!ELEMENT nazwisko (#PCDATA)> Deklaracje DTD można zawrzeć zarówno w dokumencie XML jak i w dokumencie zewnętrznym. Wewnętrzne DTD osoby_dtd.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE dane [ <!ELEMENT dane ( osoba* )> <!ELEMENT osoba ( imie, nazwisko )> <!ELEMENT imie (#PCDATA)> <!ELEMENT nazwisko (#PCDATA)> ]> <dane> <imie>adam</imie> <nazwisko>kowalski</nazwisko> korzeń dokumentu XML 13 października 2015 Strona 7
<imie>marek</imie> <nazwisko>abacki</nazwisko> <imie>andrzej</imie> <nazwisko>babacki</nazwisko> </dane> Zewnętrzne DTD osoby_dtd_plus.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE dane SYSTEM "osoby.dtd" > <dane> <imie>adam</imie> <nazwisko>kowalski</nazwisko> <imie>marek</imie> <nazwisko>abacki</nazwisko> <imie>andrzej</imie> <nazwisko>babacki</nazwisko> </dane> parametr SYSTEM zawiera względny lub bezwzględny adres URI do naszego pliku DTD osoby.dtd <!ELEMENT dane ( osoba* )> <!ELEMENT osoba ( imie, nazwisko )> <!ELEMENT imie (#PCDATA)> <!ELEMENT nazwisko (#PCDATA)> Kontrola poprawności walidacji dokumentu XML dokumentem DTD z wykorzystaniem programu xmllint. XML i DTD w jednym dokumencie XML xmllint valid osoby_dtd.xml XML i DTD w osobnych dokumentach xmllint valid osoby_dtd_out.xml XML i DTD w osobnych dokumentach. XML nie posiada informacji o DTD xmllint -dtdvalid osoby.dtd osoby.xml 13 października 2015 Strona 8
XML Schema XML Schema to standard umożliwiający dokładne opisanie drzewiastej struktury dokumentu XML oraz typów danych znajdujących się w elementach i atrybutach. Jest następcą DTD XML Schema rozszerza jego możliwości. XML Schema pozwala (w odróżnieniu od DTD) na określenie wzorców i typów zawartości zarówno elementów jak i atrybutów. Istnieje wiele typów zawartości, które można zawężać, oraz rozszerzać w zależności od potrzeb. W schematach XML Schema musi wystąpić: deklaracja XML; element główny (korzeń) schematu wraz z określeniem odpowiedniej przestrzeni nazw; definicja typów; deklaracja elementów i atrybutów. deklaracja XML osoby.xsd element główny wraz z określeniem przestrzeni nazw <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <!-- deklaracja znacznikow --> <xsd:element name="dane" type="dane-typ"/> deklaracje elementów <xsd:element name="nazwisko" type="xsd:string"/> <xsd:element name="imie" type="xsd:string"/> <!-- definicje typiow zlozonych --> <xsd:complextype name="dane-typ"> <xsd:sequence> <xsd:element name="osoba" type="osoba-typ" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> <xsd:complextype name="osoba-typ"> <xsd:sequence> <xsd:element ref="imie" maxoccurs="unbounded"/> <xsd:element ref="nazwisko"/> </xsd:sequence> </xsd:complextype> </xsd:schema> definicja typów Elementy proste: <nazwisko>kowalski</nazwisko> <wiek>20</wiek> <data_ur>1995-09-09</data_ur> Deklaracje XML Schema opisujące powyższy przykład <xsd:element name="nazwisko" type="xsd:string"/> <xsd:element name="wiek" type="xsd:integer"/> <xsd:element name="data_ur" type="xsd:date"/> Ograniczenie typu prostego zawiera parametr base, który definiuje ograniczenie na element wiek <xsd:element name="wiek"> <xsd:simpletype> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value="0"/> <xsd:maxinclusive value="120"/> </xsd:restriction> </xsd:simpletype> 13 października 2015 Strona 9
</xsd:element> Kontrola poprawności walidacji dokumentu XML dokumentem XML Schema z wykorzystaniem z programu xmllint. xmllint --schema osoby.xsd osoby.xml Encje wewnętrzne i zewnętrzne w dokumentach XML Encja ma swoją nazwę i wartość - fragment dokumentu. Aby można użyć danej encji należy ją zadeklarować w DTD (nie dotyczy to pięciu encji predefiniowanych) Encje predefiniowane: < < > > & & ' ' " " Procesor XML w trakcie przetwarzania dokumentu podstawia w miejsce referencji do encji odpowiednie wartości. Referencja do encji ogólnej w dokumencie ma postać &nazwa_encji; i może wystąpić poza DTD, natomiast deklaracja w DTD: <!ENTITY nazwa-encji wartość-encji> Można deklarować wiele encji o tej samej nazwie, jednak wykorzystana zostanie pierwsza. Wartość encji może być podana bezpośrednio w deklaracji ujęta w znaki " lub ', wtedy encję nazywamy wewnętrzną. Można też zadeklarować encję zewnętrzną - jest to uogólnienie pliku, czyli dodatkowy zasób dostępny dla procesora XML. Do identyfikacji encji zewnętrznej służy identyfikator systemowy lub identyfikator publiczny. Domyślnie encja po wstawieniu jest przetwarzana jako XML, powinna być fragmentem XML dającym się sparsować (jeśli jest znacznik otwierający, powinien być zamykający itp.), ponadto może zaczynać się od deklaracji analogicznej do deklaracji XML, podającej wersję XML i kodowanie. <!ENTITY wewnetrzna "zawartość encji"> <!ENTITY zewnetrzna_id_systemowy SYSTEM "http://www.serwis.com/opis.xml"> Przykład dokumentów XML z encjami (lista.xml, grupa1.xml i grupa2.xml). <?xml version="1.0" standalone="no"?> <!DOCTYPE lista [ <!ENTITY title "Lista osob" > <!ENTITY grupa1 SYSTEM "grupa1.xml"> <!ENTITY grupa2 SYSTEM "grupa2.xml"> ]> 13 października 2015 Strona 10
<lista> <title>&title;</title> &grupa1; &grupa2; </lista> <grupa> <imie>adam</imie> <nazwisko>kowal</nazwisko> <imie>marek</imie> <nazwisko>abacki</nazwisko> </grupa> <grupa> <imie>adam</imie> <nazwisko>cabacki</nazwisko> <imie>marek</imie> <nazwisko>dadacki</nazwisko> </grupa> Sprawdzanie poprawności dokumentu XML z wykorzystaniem programu xmllint. xmllint --noent lista.xml XML CSS Prezentacja zawartości dokumentów XML'owych w przeglądarkach jest możliwa przy wykorzystaniu technologii CSS i XSL. W pierwszej przypadku wystarczy wykorzystać kaskadowe arkusze styli (Cascading Style Sheets, CSS) do przetworzenia zawartości dokumentu XML, natomiast w drugim przypadku należy posłużyć się rozbudowaną technologią XSLT/XSL (extensible Stylesheet Language - Transformations).W pierwszej metodzie dokument XML jest sekwencyjnie przetwarzany przez przeglądarkę w oparciu o dołączony dokument CSS. Specyfikacja CSS stanowi język formatowania do elementów dokumentu pozwalający autorom i użytkownikom dołączać odpowiednie style do tych struktur. Przykład pliku CSS formatującego opisywany dokument XML osoby.css osoba { display: block; text-align:left } imie { font-style:italic } nazwisko { font-weight:bold } W celu wykorzystanie pliku CSS należy umieścić w dokumencie XML po linii deklaracji (jeżeli występują deklaracje typu, to też po nich) następujące polecenie. <?xml-stylesheet type="text/css" href="osoby.css"?> 13 października 2015 Strona 11
Zadanie Zaproponować i opracować strukturę pliku XML do przechowywania informacji o bibliotece, w której przechowujemy książki.poprawność wprowadzonych danych będzie kontrolowana przez odpowiedni plik DTD oraz Schema. Następnie należy przygotować odpowiedni plik CSS umożliwiający wyświetlenie danych w postaci listy posiadającej następujące pola: lp, tytuł książki, imię i nazwisko autora(autorów), wydawnictwo oraz cenę. 13 października 2015 Strona 12