TIN Techniki Internetowe zima 2016-2017 Grzegorz Blinowski Instytut Informatyki Politechniki Warszawskiej
Plan wykładów 2 Intersieć, ISO/OSI, protokoły sieciowe, IP 3 Protokół IP i prot. transportowe: UDP, TCP 4 Model klient-serwer, techniki progr. serwisów 5 Protokoły aplikacyjne: telnet, ftp, smtp, nntp, inne 6 HTTP 7 HTML i okolice 8 XML 9, 10, 11 Aplikacje WWW, CGI, sesje, serwery aplikacji serwlety, integracja z backended SQL 12 Aspekty zaawansowane: wydajność, przenośność, skalowalność; klastering 13 SOAP
XML
XML Rola HTML? (przypomnienie): HTML opisuje wyłącznie formatowanie tj. sposób prezentacji dokumentu Meta-informacja nie jest w żaden sposób wyrażana w HTML HTML nie wyraża i nie opisuje też semantyki (znaczenia informacji) w HTML nie ma oddzielenia znaczenia tekstu i sposobu jego prezentacji Czego nie da się zrealizować w HTML? (przykłady): Jednoznaczego opisu dokumentów co oznacza tytuł? Wyszukiwania dokumentów np. wg. tytułu, autora lub innych atrybutów znaczeniowych W konsekwencji np. wymiany danych między aplikacjami
XML - pierwszy przykład <bibliography> <book ID= "MiM"> <authors> <author>bułhakow Michał</author > <translator>i. Lewandowska </translator> </authors > <title> Mistrz i Małgorzata </title > <publisher>czytelnik</publisher > <year>1992</ year> </ book >... </bibliography >
XML - pierwszy przykład <bibliography> Nazwa elementu ELEMENT... <book ID= "MiM"> <authors> <author>bułhakow Michał</author > <translator>i. Lewandowska </translator> </authors > <title> Mistrz i Małgorzata </title > <publisher>czytelnik</publisher > <classification type="fiction"/> <year>1992</ year> </ book > </bibliography > Pusty element Wartość atrybutu Nazwa atrybutu
XML - drzewo book bibliography book... XML może też reprezentować: relacyjne bazy danych authors title struktury obiektowe author Bułhakow translator Lewandowska Dokument XML może być przekształcony w drzewo obrazujące hierarchiczne zależności elementów... Mistrz i Małgorzata <bibliography> <book ID= "MiM"> <authors> <author>bułhakow Michał</author > <translator>i. Lewandowska </translator> </authors > <title> Mistrz i Małgorzata </title > <publisher>czytelnik</publisher > <classification type="fiction"/> <year>1992</year> </ book > </bibliography >
XML i inne notacje tekstowe XML porządkuje systemy reprezentacji danych w Internecie (i nie tylko) W sensie czysto teoretycznym XML nie wnosi wiele nowego - koncepcje stosowane w XML znane są od co najmniej 30-40 lat: XML w LISP: (books (book (author Bułhakow ) (title Mistrz i Małgorzata ) (citation (line W białym płaszczu z ) (line ) )))
XML - Zalety Może być tworzony przy pomocy najprostszych narzędzi tekstowych Prosty w automatycznej analizie (prosty parser) Dokument zawiera "w sobie" drzewo rozbioru składniowego (parse tree) Dokument może zawierać bezpośrednio w swojej treści opis schematu danych (DTD) Pozwala na całkowitą separację treści od prezentacji (XML+XSL(T)) Jest niezależny od systemów operacyjnych, konkretnego oprogramowania, itd.
Definicja struktury dok. XML Co to znaczy "zdefiniujemy strukturę"? Określimy zestaw dopuszczalnych: elementów, atrybutów, itd. zdefiniujemy dopuszczalne zawartości elementów (np.: tekst, inne), przypiszemy atrybuty do elementów Jak zdefiniujemy strukturę? dokument XML bez określonej struktury - dobre do prostych "nie publicznych" zastosowań, DTD Document Type Definition, XML Schema Inne, np.: Relax NG (OASIS), Schematron, ISO DSDL (obejmuje Relax NG i Schematron)
Poprawność składni XML Koniec ze złymi nawykami (z HTML-a)! Dokument musi być poprawny syntaktycznie - składniowo ("well-formed"): wartości atrybutów ujęte w apostrofy lub cudzysłowy Niepusty element musi mieć znacznik otwierający i zamykający Znaczniki muszą być poprawnie zagnieżdżone (nie ma nakładających się elementów) Dokument musi być poprawny strukturalnie - semantycznie: struktura dokumentu zgodna ze strukturą zdefiniowaną w definicji typu dokumentu, w odpowiednich elementach obecne wszystkie wymagane atrybuty.
Składnia XML Znaki: Unicode Deklaracja XML: <?xml version="1.0" encoding="iso-8859-2" standalone="no"?> Znaczniki: <tag attributename="attribute-value"> </tag> Znacznik elementu pustego: <br> </br> -> <br/>
DTD XML - gramatyka XML DTD: bezkontekstowa (CFG) <!ELEMENT bibliography book*> <!ELEMENT book (authors,classification?,title)> <!ELEMENT authors author+> <!ELEMENT ElementName ContentModel> Gramatyka CFG bibliography book authors book* authors,classification?,title author+ lhs = element (name) rhs = wyr. reg. złożone z elementów + stringów (PCDATA)
DTD - Document Type Definition Definicja nazw elementów i struktury: Sekwencja 0 lub więcej Dekl. typu elementu Sekwencja 1 lub więcej <!ELEMENT bibliography book*> <!ELEMENT book (authors, classification?, title)> <!ELEMENT authors author+> <!ELEMENT author (#PCDATA)> <!ELEMENT classification EMPTY> <!ELEMENT title (#PCDATA)> <!ATTLIST classification type ENTITY #REQUIRED> <!ATTLIST paper ID ID> Dekl. listy atrybutów Ciąg znaków "Parsed Character Data"
PCDATA i CDATA PCDATA - Parsed character data nie może zawierać znaków i sekwencji: "<", "&", "]]>" CDATA - Character data dane nie analizowane (ignorowane) przez parser Przykład: <![CDATA[ function matchwo(a,b) {. } ]]>
DTD - podstawy składni Deklaracja DOCTYPE (nagłówek dokumentu): <!DOCTYPE nazwa id-zewnętrzny [ deklaracje ]> Deklaracja elementu: <!ELEMENT nazwa (reguła)> <!ELEMENT ElementName ContentModel> Deklaracja atrybutów: <!ATTLIST element nazwa-attr typ-attr wart-domyślna nazwa-attr typ-attr wart-domyślna...>
DTD - definicje elementów Deklaracja <element e> liczność: R? R* R+ R 1 R 2..., R n R 1, R 2,..., R n #PCDATA EMPTY (#PCDATA e*)* ANY Znaczenie Dokładnie jeden <element e> Zero lub jedno R Zero lub więcej R Jedno lub więcej R Dokładnie jedno z R i Sekwencja R, kolejność ma znacznie Ciąg znaków Pusty Zawartość mieszana Cokolwiek
DTD - grupowanie elementów <!ELEMENT book ((author editor), title, isbn)> <!ELEMENT author (first, last)> <!ELEMENT foo (a b (c, d, e, (f g (h, i))))> Ograniczenia: Wewnątrz grupy nie można mieszać sekwencji i wyboru: Źle: <!ELEMENT foo (a b, c)> Dobrze: <!ELEMENT foo (a (b, c))> Dobrze : <!ELEMENT foo ((a b), c))> gramatyka musi być deterministyczna Źle : <!ELEMENT foo ((a, b) (a, c))>
DTD - Definicje atrybutów <person ID="bm"> Jan Nowak </person>... <bibliography> <book ID= "MiM"> <authors> <author authorref="bm">bułhakow Michał</author > <translator>i. Lewandowska </translator> </authors > <title> Mistrz i Małgorzata </title > <classification type="fiction"/> <publisher>czytelnik</publisher > <year>1992</ year> </book > Identyfikator obiektu Wewnątrz-dokumentowe odwołanie typu IDREF Odwołanie do zewn. Encji
Typ DTD - definicje atrybutów Znaczenie ID Identyfikator (token) unikalny w dokum. IDREF Odwołanie do identyfikatora ID IDREFS Odwołanie do identyfikatorów ID ENTITY Zewnętrzna encja (obraz, wideo, ) ENTITIES Zewnętrzne encje CDATA Ciąg znaków NMTOKEN Leksem (name token) NMTOKENS Leksemy NOTATION Dane inne niż XML Enumeration Wyliczenie opcji Conditional SectionINCLUDE & IGNORE Atrybuty mogą być: REQUIRED (wymagane), IMPLIED (opcjonalne) mogą mieć też wartości domyślne, które mogą być FIXED (stałe)
DTD - Definicje atrybutów - przykłady <!ATTLIST pudelko dlugosc CDATA "0"> <!ATTLIST pudelko szerokosc CDATA "0"> <!ATTLIST krawedz widoczna (tak nie) "nie"> <!ATTLIST osoba stan.cywilny (wolny zonaty zamezna wdowiec wdowa rozwiedziony rozwiedziona nieznany) #IMPLIED> Każda osoba ma identyfikator osoba.id Osoba może mieć zdefiniowanego szefa Identyfikator szefa jest określony jako odwołanie do zdefiniowanego identyfikatora <!ATTLIST osoba osoba.id ID #REQUIRED> <!ATTLIST osoba szef.ref IDREF #IMPLED> <osoba osoba.id= 110 >Jan Kowalski</osoba> <osoba osoba.id= 120 szef.ref= 110 >Jan Nowak</osoba>
Encje Encja (entity): Nazwany tekst lub inna dana fizyczna reprezentacja obiektu informacyjnego, uogólniony "plik", jednostka fizycznej budowy dokumentu, uogólnienie pojęcia "makro". Dokument to nie plik i to nie encja: encja dokumentu ( document entity ), zawartość dokumentu może znajdować się w wielu encjach (reprezentowanych np. przez pliki).
Encje Typy encji: ogólne - w dok. XML zastępują ciąg znaków parametryczne - występują wyłącznie w def. typu dokumentu i są rozwijane wg. definicji we wcześniejszym DTD, odpowiadają prostym makrodefnicjom w preprocesorze C zewnętrzne - pozwalają na "wstawienie" zewnętrznego dokumentu XML do dok. bieżącego binarne - pozwalają na zadeklarowanie danych nietekstowych
Encje ogólne Encje ogólne predefinowane (znakowe): & & < < > > ' ' " " <!ENTITY nazwa "tekst"> Przykład: <!ENTITY copyright "&#A9;"?> Używamy zamiast ciągu znaków, np. wtedy gdy wystąpił by konflikt z zarezerwowanymi znakami parsera W dekl. encji nie mogą wystąpić odwołania wzajemne!
Encje parametryczne <!ENTITY % nazwa tekst> Przykład: <!ENTITY % pcdata "(#PCDATA)"> <!ELEMENT author %pcdata;> <!ENTITY % expandme "INCLUDE">.. <![ %expandme; [ ELEMENT description (#PCDATA)> ]]> Rozwijane między znakami % i ; Rodzaj "makrodefinicji" Są rozwijane wyłącznie w obrębie DTD Porównaj z definicją INCLUDE, IGNORE! W deklaracjach encji parametrycznych nie mogą wystąpić odwołania wzajemne!
DTD - Definicje warunkowe Włączanie i wyłączanie fragmentów DTD: <![INCLUDE[ <!ELEMENT book (authors, classification?, title)]> ]]> <![IGNORE[ <!ELEMENT book (authors, classification?, title)]> ]]> Konstrukcje te mają praktyczny sens w połączeniu z encjami parametrycznymi
Encje binarne / nieprzetwarzalne (unparsed entity) Przykład: <!ENTITY %obraz1 SYSTEM "http://www.xyz.pl/img1.gif" NDATA GIF89a> Deklaracja Notacji <!Notation GIF89a SYSTEM "-//CompuServe/NOTATION Grafic Interchange Format 89a//EN"> Encje binarne pozwalają na zadeklarowanie danych nietekstowych Notacje używane w połączeniu z encjami binarnymi uzupełniają informację o typach encji binarnych Notacje informują parser z jakim rodzajem danych nietekstowych ma do czynienia Parser nie analizuje danych binarnych, ale może je przekazać do zewnętrznego programu
Encje ogólne: wewnętrzne i zewętrzne Encje wewnętrzne: DTD: <!ENTITY mb "Michał Bułhakow"> Instancja dokumentu: &mb; urodził się w 1891 roku. Encje zewnętrzne: DTD: <!ENTITY abstr1 SYSTEM "file:///abstrakt.xml"> <!ENTITY abstr2 SYSTEM "file:///intro.xml"> <!ENTITY intro SYSTEM "file:///wstep.xml"> Instancja dokumentu: <paper> &abstr1; &abstr2; &intro; </paper> URL, pokazuje na zewnętrzny plik Logicznie odpowiada wstawieniu zawartości pliku
Rodzaje encji - podsumowanie Encje ogólne Encje parametryczne Encje przetwarzane Encje binarne Encje przetwarzane Encje binarne Encje wewnętrzne Encje zewnętrzne
DOCTYPE Deklaracja DTD może mieć dwie postacie: <!DOCTYPE RootElement SYSTEM DTD_URI? [InternalDeclarations]? > <!DOCTYPE RootElement PUBLIC PUBLIC_ID URI [InternalDeclarations]? > Pierwsza postać jest używana gdy DTD jest "lokalne" w stosunku do danego dokumentu Druga postać jest używana dla ogólnie znanych i przyjętych DTD (np. XHTML)
DOCTYPE SYSTEM <!DOCTYPE RootElement SYSTEM DTD_URI? [InternalDeclarations]? > RootElement - nadrzędny element tego DTD DTD_URI - położenie DTD URI może być względne lub bezwzględne (w sensie ścieżki) Deklaracje wewnętrzne - patrz wcześniej Przykłady: <!DOCTYPE BookList SYSTEM "bookstore.dtd"> <!DOCTYPE BookList SYSTEM http://www.xyz.edu.pl:8888/abc/bookstore.dtd >
DOCTYPE PUBLIC <!DOCTYPE RootElement PUBLIC PUBLIC_ID URI [InternalDeclarations]? > Ta postać używana dla ogólnie znanych, zestandaryzowanych DTD DTD wykraczające poza kręgi jednej organizacji PUBLIC_ID Ogólnie znany, niezmienny URI jak w SYSTEM
Umieszczanie DTD W encji dokumentu: deklaracje encji deklaracje notacji W zewnętrznej encji - definicje wspólne dla wszystkich dokumentów danego typu: elementy atrybuty encje parametryczne I tu, i tu (metoda mieszana) przedefiniowywanie encji parametrycznych, przedefiniowywanie atrybutów, dodawanie nowych atrybutów,
DTD w encji dokumentu <!DOCTYPE bibliography SYSTEM [ <!ELEMENT bibliography book*> <!ELEMENT book (authors, classification?, title)> <!ELEMENT authors author+> <!ELEMENT author (#PCDATA)>... ]> <bibliography> <book> <authors> <author>bułhakow Michał</ author > </authors > <title> Mistrz i Małgorzata </ title >...
bibliografia.dtd: DTD w zawnętrznej encji <!ELEMENT bibliography book*> <!ELEMENT book (authors, classification?, title)> <!ELEMENT authors author+> <!ELEMENT author (#PCDATA)>... Moja-bib.xml: <!DOCTYPE bibliography SYSTEM "bibliografia.dtd"> <bibliography> <book> <authors> <author>bułhakow Michał</author > </authors > <title> Mistrz i Małgorzata </title >
<bibliography> <book class="fikcja"> <authors> <author>&mb;</author > </authors > TIN zima 2016-2017, Grzegorz Blinowski DTD zewnętrzne i wewnętrzne Bibliografia.dtd: (zewnętrzny podzbiór DTD) <!ELEMENT bibliography book*> <!ELEMENT book (authors, classification?, title)> <!ELEMENT authors author+> <!ELEMENT author (#PCDATA)>... Moja-bib.xml: <!DOCTYPE bibliography SYSTEM "bibliografia.dtd"[ <!ENTITY mb "Michał Bułhakow"> Wewnętrzny <!ATTLIST book class #IMPLIED> podzbiór DTD ]>
DTD/XML Terminalogia - Pamiętajmy! DTD - to nie plik.dtd: DTD tworzą zarówno DTD zewnętrzne jak i definicje z DTD wewnętrznego Dokument XML to nie plik.xml: dokument = definicja języka + oznakowanie + dane, instancja dokumentu = tekst zgodny ze zdefiniowanym językiem.
Przestrzenie nazw XML
XML - Przestrzenie nazw "Czyste" DTD - Nazwy elementów i atrybutów tworzone są dowolnie może to prowadzić do niejednoznaczoności: Geometria: <element>circle</element> Chemia: <element>oxygen</element> Jak zapewnić unikalność nazw? Wprowadzić "prefiksy"!
XML - Przestrzenie nazw Jak zapewnić unikalność nazw? Wprowadzić "prefiksy": <h:html xmlns:xdc="http://www.xml.com/books" xmlns:h="http://www.w3.org/html/1998/html4"> <h:head><h:title>book Review</h:title></h:head>... <xdc:bookreview> <xdc:title>xml: A Primer</xdc:title>... </h:html> Bez ryzyka pomyłki możemy mieszać różne "słowniki" Uwaga: przestrzeń nazw tylko identyfikuje słownik, definicja to kwestia odrębna
XML Schema
XML Schema Wady DTD: odrębny język (czy nie byłoby przyjemnie zdefiniować strukturę XML w XML?) Brak: przestrzeni nazw, typów danych, dziedziczenia Zalety DTD Elastyczny, semi-strukturalny Szeroko przyjęty Bazuje na SGML
XML Schema http://www.w3.org/2001/xmlschema XML Schema definiuje: nowe elementy poprzez tagi: <element name= nazwa-elementu...> dla tak zdefiniowanego elementu określamy jego typ (to co może się znaleść między tagami <e>... </e>: n.p.: <element name=... type= string > nowe atrybuty podobnie... aby powiedzieć więcej o zawartości elementu stosujemy typy proste... aby móc wielokrotnie wykorzystać raz zdefiniowane elementy stosujemy typy elementów
XML Schema - Typy Atrybut type - definicja typu: <element name="name" type="string"/> Podelement complextype lub simpletype: <element name="order"> <complextype>... </complextype> <element> Typy proste definiują zbiory wartości atomowych (nie posiadających wewnętrznej struktury XML). Typy proste: wszystkie typy wbudowane (np. string), oraz typy stworzone na ich bazie Typów prostych używa się ich do określania poprawnych wartości atrybutów i zawartości elementów.
XML Schema Typy proste: string, boolean, integer, float, datetime, ID, IDREF, CDATA, Typy złożone: sequence, choice, group, all. Niektóre typy proste: ID, IDREF, CDATA są zastrzeżone tylko dla atrybutów. Kontrola krotności elementów podrzędnych: minoccurs, maxoccurs. Kontrola użycia atrybutów: atrybut use o dopuszczalnych wartościach: required, optional lub prohibited.
XML Schema typy złożone <xsd:element name="person"> <xsd:complextype> <xsd:sequence> <xsd:element name="firstname" type="xsd:string" minoccurs="1" maxoccurs="2"/> <xsd:element name="surname" type="xsd:string"/> <xsd:element name="gender" type="xsd:string"/> <xsd:element name="age" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:id" use="required"/> </xsd:complextype> </xsd:element>
XML Schema - tworzenie typów prostych Własne typy proste można tworzyć przy pomocy aspektów (facets): enumeration, length, minlength, maxlength. list, mininclusive, maxinclusive, minexclusive, maxexclusive, pattern, union, P. Typ utworzony poprzez restrykcję typu prostego: <xsd:element name="wiek"> <xsd:simpletype> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value="0"/> <xsd:maxinclusive value="140"/> </xsd:restriction> </xsd:simpletype> </xsd:element>
XML Schema - tworzenie typów prostych Wyrażenia regularne w def. typów prostych: <xsd:attribute name="kod"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:pattern value="[0-9]{2}-[0-9]{3}"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute>
XML Schema - model mieszany Model mieszany DTD nie pozwala na ograniczenie liczby oraz kolejności podelementów. W XML Schema typ o modelu mieszanym definiuje się jak każdy inny typ: <xsd:element name="event"> <xsd:complextype mixed="true"> <xsd:sequence> <xsd:element name="eventtype" type="xsd:string"/> <xsd:element name="date" type="xsd:string"/> <xsd:element name="duration" type="xsd:string" maxoccurs="2"/> </xsd:sequence> </xsd:complextype> </xsd:element>
XML Schema - deklaracje i typy typ anonimowy: <xsd:simpletype> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value="0"/> <xsd:maxinclusive value="140"/> </xsd:restriction> </xsd:simpletype> typ nazwany: <xs:simpletype name="stringtype"> <xs:restriction base="xs:string"/> </xs:simpletype> <xs:complextype name="shiptotype"> <xs:sequence> <xs:element name="name" type="stringtype"/> <xs:element name="address" type="stringtype"/> </xs:sequence> </xs:complextype>
XML Schema - rozszerzenia typu definicyjnego <xsd:complextype name="publication"> <xsd:sequence> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="date" type="xsd:year"/> </xsd:sequence> </xsd:complextype> <xsd:complextype name="paper"> <xsd:complexcontent> <xsd:extension base="publication"> <xsd:sequence> <xsd:element name="publisher" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexcontent> </xsd:complextype>
XML Schema - deklaracja globalne i lokalne <xsd:complextype name="publication"> <xsd:sequence> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="date" type="xsd:year"/> <xsd:element ref="isbn"/> </xsd:sequence> </xsd:complextype> <xsd:element name="isbn"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{2}-\d{3}"/> </xsd:restriction> </xsd:simpletype> </xsd:element>
XML Schema - deklaracje i typy DTD - deklaracja elementu definiuje jednocześnie typ jego zawartości. DTD - w przypadku gdy mamy przypisać ten sam model zawartości wielu elementom musimy powtórzyć definicję modelu (można też użyć encji parametrycznych). XML Schema - typ zawartości - definiujemy nadając nazwę, a następnie przypisujemy do dowolnie wielu elementów I/lub atrybutów. Typ anonimowy można zdefiniować bezpośrednio w deklaracji elementu (jak DTD)
XML - DTD (zestawienie) DTD: Wywodzi się z SGML XML Schema: Zaprojektowany na potrzeby XML-a Specyficzna składnia Składnia XML 10 typów danych 41+ typów danych Brak kontroli tekstowej zawartości elementów Zaawansowana kontrola tekstowej zawartości elementów Mieszany model zawartości Możliwość definiowania własnych typów danych.
XPath, XPointer
XPath Dokument XML ma postać hierarchiczną i może być reprezentowany w postaci drzewa, węzły: elementy, atrybuty, komentarze,... XPATH - język pozwalający na "poruszanie się" po dokumencie XML jak po drzewie XPath = XSLT XPointer ta część Xpointer, która została użyta w XSLT (dalej) Status - rekomendacja W3C
XPath Poruszanie się w hierarchii elementów: /book/chapter - poczynając od korzenia chapter/section - relatywnie /book//section - nie jest bezpośrednim przodkiem */section - dowolny przodek../chapter - wyżej o poziom w hierarchii book[indeks]/chapter - indeks musi być rodzeństwem chapter book[@title="mistrz I małgorzata]/chapter - wybór wg. wartości atrybutu tak naprawdę powyższe konstrukcje są skrótowe - posługujemy się wyrażeniami Xppath:. = self::node().. = parent::node() // = /descendant-or-self::node()/ @ = attribute::
XPATH - poruszanie się po drzewie Krok w sieżce składa się z: kierunku, testu węzła, predykatu Kierunki w ścieżce: child descendant parent ancestor following-sibling preceding-sibling following preceding attribute namespace self descendand-or-self ancestor-or-self Test węzła: nazwa węzła, * wszystkie w. podstawowego typu node() text() comment() Ścieżki: /book/section/ /child::book/child::section (child:: możemy pominąć).//para self::node()/descendant-orself::node()/child::para /doc/chapter[5]section[2]
Przetwarzanie XML Parser XML: analizuje dokument XML, przekazuje wyniki analizy Sprawdza poprawność leksykalną i syntaktyczną Może, ale nie musi sprawdzić poprawności semantycznej (zgodności z modelem) Dostępne parsery XML: b. wiele systemów darmowych i komercyjnych dość typowe - "model parsera" (API) niezależny w dużej mierze od języka programowania i dostępny dla wielu języków (C++, Java, Python, Perl)
Przetwarzanie XML Parser nie walidujący (prosty) sprawdza wyłącznie syntaktyczną poprawność, tj. zgodność z XML nie sprawdza zgodności z DTD (XML Schema) ewentualna kontrola poprawności - po stronie programisty Parser walidujący sprawdzi zgodność z daną definicją (DTD, XML Schema,...) Wynik działania parsera reprezentacja dokumentu w postaci drzewa lub hierarchii obiektów, n.p. - Document Object Model (DOM) Strumień zdarzeń - otwarty/zamknięty element, atrybut, etc. - Simple API for XML - SAX
SAX (parser zdarzeniowy) Definiujemy funkcję callback SetContentHandler() Wywołujemy funkcję parse() Parser przetwarza tekst XML wywołując dostarczone przez programistę funkcje callback: startdocument(), enddocument(), startelement(), endelement(), characters(), ignorablewhitespaces Programista może dowiedzieć się więcej o przetwarzanym elemencie, atrybucie korzystając z funkcji: getlength(), getvalue()
import org.xml.sax.*; import org.xml.sax.helpers.*; class SAXHandler extends DefaultHandler { public void startdocument() { System.out.println("BEGIN"); } public void enddocument() { System.out.println("Koniec."); } public void startelement(string namespaceurl, String localname, String qname, Attributes atts) { System.out.print("[ELEMENT: " + localname); } public void endelement(string namespaceurl, String localname, String qname) { System.out.print(localName + " ELEMENT]" ); }
public class SAXExample { public static void main(string[] args) throws Exception { String uri; if(args.length == 0) { throw new Exception("File name?"); } else { uri = args[0]; } } } XMLReader parser = XMLReaderFactory.createXMLReader(); SAXHandler handler = new SAXHandler(); parser.setcontenthandler(handler); parser.parse(uri);
SAX - wady, zalety Zalety: Jednoprzebiegowy, Szybki Mała zajętość pamięci (w szczególności np. plik XML nie musi być cały w pamięci) Dane nieistotne mogą być ignorowane Wady: Nie umożliwia modyfikacji i ponownego wygenerowania dokumentu Szereg rutynowych czynności zrzuconych na programistę, np. budowa drzewa (o ile jest w danym zastosowaniu konieczne) Nie przetwarza i nie waliduje modelu (DTD, XMLSchema)
Parser libxml2 Darmowe narzędzie dostępne dla szeregu platform (Windows, Linux, Unix) Kod źródłowy i API C xmldocptr doc; xmlnodeptr cur; doc = xmlparsefile(docname); if (doc == NULL ) { fprintf(stderr,"niepoprawny dokument\n"); return; } cur = xmldocgetrootelement(doc); if (cur == NULL) { fprintf(stderr,"pusty dokument\n"); xmlfreedoc(doc); return; } if (xmlstrcmp(cur->name, (const xmlchar *) "story")) { fprintf(stderr,"niepoprawny dokument, root node!= <story>"); xmlfreedoc(doc); return; }
Parser libxml2 Iterowanie po drzewie dokumentu: cur = cur->xmlchildrennode; while (cur!= NULL) { if ((!xmlstrcmp(cur->name, (const xmlchar *)"keyword"))) { } key = xmlnodelistgetstring(doc, cur->xmlchildrennode, 1); printf("keyword: %s\n", key); xmlfree(key); cur = cur->next; } Tekst wewnątrz elementu jest jego potomkiem
libxml2 Libmxl2 umożliwia też: Nawigację w drzewie poprzez wyrażenia XPATH Modyfikację drzewa rozbioru Modyfikację elementów Modyfikację atrybutów Zapis drzewa w postaci XML
DOM (Document Object Model) Parser DOM tworzy hierarchię obiektów: document, element, attribute, text, comment API DOM (W3C DOM API) jest w dużej mierze niezależne od języka programowania: get... first/last child, prev/next sibling, childnodes, insertbefore, replace, getelementsbytagname Bazowy model parsera DOM: budowanie dokumentów, nawigacja w strukturze dokumentów, dodawanie elementów i atrybutów, modyfikacje elementów i atrybutów, usuwanie elementów/atrybutów i ich zawartości.
DOM - obiekty parsera Typ Node - węzeł XML: element, tekst,... Właściwości: attributes, childnodes, firstchild, lastchild, parentnode, nodename, nodetype, nodevalue, Operacje: appendchild(n), clonenode(b), removechild(n), haschildnodes(), Typ NodeList pomocniczy lista węzłow (length, item(i)) Type Element Document: Właściwości: documentelement, doctype Operacje: createelement(), createtextnode,...
DOM - wady, zalety Zalety: Pozwala na arbitralne "chodzenie" po drzewie dokumentu Uniwersalny Pozwala na modyfikację i ponowne generowanie dokumentu Istnieją wersje walidujące Wady: Wolny i pamięciożerny Zbyt rozbudowany do prostych aplikacji
Dostępne (wybrane) parsery XML XP (James Clark) - Java, prosty, niewalidujący Expat (James Clark) - Java, C/C++, Python, Perl (xml::parser) Xerces (walidujący, Java, C++ i Perl), Oracle XML Parser for Java (walidujący, DOM), XML4C - IBM XML Parser for C++ (walidujący, DOM), Microsoft XML Core Services (MSXML 4.0, komponent COM)
XML - Standardy Pochodne XML (Extensible Markup Language) XML Namespaces XML DTDs, XML Schema RDF (Resource Description Framework) XSL (Extensible Style Sheet Language) XPath (=XSLT XPointer), XLink XQL, XML-QL (XML Query Language) XMAS (XML Matching And Structuring language) XMLP (XML Protocol (SOAP)) OWL (Web Ontology Language) excelon,...
XML - przykłady formatów http://www.oasis-open.org/cover/xml.html#applications Advertising: adxml place an ad onto an ad network or to a single vendor Literature: Gutenberg convert the world s great literature into XML Directories: dirxml Novell s Directory Services Markup Language (DSML) Web Servers: apachexml parsers, XSL, web publishing Travel: opentravel information for airlines, hotels, and car rental places News: NewsML creation, transfer and delivery of news Human Resources: XML-HR standardization of HR/electronic recruiting XML definitions International Dvt: IDML improve the mgt. and exchange of info. for sustainable development Voice: VoxML markup language for voice applications Wireless: WAP (Wireless Application Protocol) wireless devices on the World Wide Web Weather: OMF Weather Observation Markup Format (simulation) Geospatial: ANZMETA distributed national directory for land information Banking: MBA Mortgage Bankers Association of America --> credit report, loan file, underwriting Healthcare: HL7 DTDs for prescriptions, policies & procedures, clinical trials Math: MathML (Mathematical Markup Language) Surveys: DDI (Data Documentation Initiative) codebooks in the social and behavioral sciences
XML - przykłady formatów CommerceNet eco Framework XML specs. to support interoperability among e-businesses Commerce One Common Business Library (CBL): set of business components, docs. In DTD, XDR, SOX BizTalk Microsoft spec. based on XML schemas cxml (Commerce XML) -- tag-sets for e-procurement into BizTalk Electronic Data Interchange (EDI) RosettaNet Common format for online ordering FpML (Financial products Markup Language): sharing of financial data (interest rate & foreign exchange products) Open Buying on the Internet (OBI) OBI high volume b2b purchasing transactions over the Internet (Office Depot, Lockheed, barnesandnoble, AX... E-commerce and XML VISA Invoices The Visa Extensible Markup Language (XML) Invoice Specification provides a comprehensive list of data elements contained in most invoices, including: Buyer/Supplier, Shipping, Tax, Payment, Currency, Discount, and Line Item Detail. B2B Integration code360 XML-Broker is middleware software that manages XML based transactions
XML - Podsumowanie XML nie jest językiem programowania XML to sposób zapamiętywania danych wraz z ich strukturą w dokumencie tekstowym: bezpłatny, otwarty, elastyczny, niezależny od platformy XML to zbiór mechanizmów do tworzenia języków specyficznych dla zastosowań. Użycie XML-a nie zwalnia od konieczności analizy, projektowania,...
XML - Podsumowania c.d. - Zastosowania Interfejs maszyna - człowiek Prezentacja Formatowanie dokumentów na potrzeby danej platformy (PC - GDI/text, PDA, telefon,...) Metoda komunikacji maszyna - maszyna: uzyskiwanie informacji w dobrze znanej (standardowej postaci) - np. notowania giełdowe, zapytania do baz danych, itp komunikacja "ad hoc" między aplikacjami automatyczne tworzenie i przetwarzanie dokumentów dokumenty tworzone "w locie"