TIN – zima 2015-2016, Grzegorz Blinowski
TIN Techniki Internetowe zima 2015-2016
Grzegorz Blinowski Instytut Informatyki Politechniki Warszawskiej
TIN – zima 2015-2016, Grzegorz Blinowski
Plan wykładów 2 3 4 5 6 7 8 9, 10, 11 12 13
Intersieć, ISO/OSI, protokoły sieciowe, IP Protokół IP i prot. transportowe: UDP, TCP Model klient-serwer, techniki progr. serwisów Protokoły aplikacyjne: telnet, ftp, smtp, nntp, inne HTTP HTML i okolice XML Aplikacje WWW, CGI, sesje, serwery aplikacji serwlety, integracja z backended SQL Aspekty zaawansowane: wydajność, przenośność, skalowalność; klastering SOAP
TIN – zima 2015-2016, Grzegorz Blinowski
XML
TIN – zima 2015-2016, Grzegorz Blinowski
XML • Co jest nie tak z 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
TIN – zima 2015-2016, Grzegorz Blinowski
XML - pierwszy przykład Bułhakow Michał I. Lewandowska Mistrz i Małgorzata Czytelnik 1992 ...
TIN – zima 2015-2016, Grzegorz Blinowski
XML - pierwszy przykład
Nazwa elementu
ELEMENT
Bułhakow Michał I. Lewandowska Mistrz i Małgorzata Czytelnik 1992 ...
Pusty element Wartość atrybutu Nazwa atrybutu
TIN – zima 2015-2016, Grzegorz Blinowski
XML - drzewo bibliography book authors author
Bułhakow
...
book
XML może też reprezentować: – relacyjne bazy danych – struktury obiektowe
title translator
Lewandowska
...
Mistrz i Małgorzata Bułhakow Michał I. Lewandowska
Dokument XML może być przekształcony w drzewo obrazujące hierarchiczne zależności elementów
Mistrz i Małgorzata Czytelnik 1992
TIN – zima 2015-2016, Grzegorz Blinowski
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 (line …) …)))
z
…” )
TIN – zima 2015-2016, Grzegorz Blinowski
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.
TIN – zima 2015-2016, Grzegorz Blinowski
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, Schematron, ISO DSDL
TIN – zima 2015-2016, Grzegorz Blinowski
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.
TIN – zima 2015-2016, Grzegorz Blinowski
Składnia XML • Znaki: Unicode • Deklaracja XML: –
• Znaczniki: – –
• Znacznik elementu pustego: –
->
TIN – zima 2015-2016, Grzegorz Blinowski
DTD XML - gramatyka bezkontekstowa (CFG)
XML DTD:
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)
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - Document Type Definition Definicja nazw elementów i struktury:
Sekwencja 0 lub więcej
Dekl. typu elementu
Sekwencja 1 lub więcej
bibliography book*> book (authors, classification?, title)> authors author+> author (#PCDATA)> classification EMPTY> title (#PCDATA)> classification type ENTITY #REQUIRED> paper ID ID> Dekl. listy atrybutów
Ciąg znaków "Parsed Character Data"
TIN – zima 2015-2016, Grzegorz Blinowski
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:
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - podstawy składni Deklaracja DOCTYPE (nagłówek dokumentu):
Deklaracja elementu:
Deklaracja atrybutów:
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - definicje elementów Deklaracja liczność: R? R* R+ R1 | R2 | ..., | Rn R1, R2, ..., Rn
#PCDATA EMPTY (#PCDATA e*)* ANY
Znaczenie Dokładnie jeden Zero lub jedno R Zero lub więcej R Jedno lub więcej R Dokładnie jedno z Ri
Sekwencja R, kolejność ma znacznie Ciąg znaków Pusty Zawartość mieszana Cokolwiek
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - grupowanie elementów
Ograniczenia: • Wewnątrz grupy nie można mieszać sekwencji i wyboru: Źle: Dobrze: Dobrze :
• gramatyka musi być deterministyczna Źle :
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - Definicje atrybutów Jan Nowak ... Identyfikator obiektu
Wewnątrz-dokumentowe odwołanie typu IDREF
Bułhakow Michał I. Lewandowska Odwołanie do zewn. Mistrz i Małgorzata Encji Czytelnik 1992
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - definicje atrybutów Typ
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 Wyliczenie opcji Enumeration Conditional Section INCLUDE & IGNORE
Atrybuty mogą być: REQUIRED (wymagane), IMPLIED (opcjonalne) mogą mieć też wartości domyślne, które mogą być FIXED (stałe)
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - Definicje atrybutów przykłady
• Każda osoba ma identyfikator osoba.id • Osoba może mieć zdefiniowanego szefa • Identyfikator szefa jest określony jako odwołanie do zdefiniowanego identyfikatora Jan Kowalski Jan Nowak
TIN – zima 2015-2016, Grzegorz Blinowski
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).
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
Encje ogólne Encje ogólne predefinowane (znakowe): &
&
'
'
"
"
Przykład: • 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!
TIN – zima 2015-2016, Grzegorz Blinowski
Encje parametryczne Przykład: .. ]]>
Porównaj z definicją INCLUDE, IGNORE!
•
Rozwijane między znakami % i ;
• • •
Rodzaj "makrodefinicji" Są rozwijane wyłącznie w obrębie DTD W deklaracjach encji parametrycznych nie mogą wystąpić odwołania wzajemne!
TIN – zima 2015-2016, Grzegorz Blinowski
DTD - Definicje warunkowe Włączanie i wyłączanie fragmentów DTD: ]]> ]]>
Konstrukcje te mają praktyczny sens w połączeniu z encjami parametrycznymi
TIN – zima 2015-2016, Grzegorz Blinowski
Encje binarne / nieprzetwarzalne (unparsed entity)
Przykład: Deklaracja Notacji
• 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
TIN – zima 2015-2016, Grzegorz Blinowski
Encje ogólne: wewnętrzne i zewętrzne Encje wewnętrzne: DTD: Instancja dokumentu: &mb; urodził się w 1891 roku.
Encje zewnętrzne:
URL, pokazuje na zewnętrzny plik
DTD: Logicznie odpowiada Instancja dokumentu: wstawieniu zawartości pliku &abstr1; &abstr2; &intro;
TIN – zima 2015-2016, Grzegorz Blinowski
Rodzaje encji - podsumowanie
Encje ogólne
Encje parametryczne
Encje przetwarzane
Encje binarne
Encje przetwarzane
Encje binarne
Encje wewnętrzne
Encje zewnętrzne
TIN – zima 2015-2016, Grzegorz Blinowski
DOCTYPE • Deklaracja DTD może mieć dwie postacie:
• 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)
TIN – zima 2015-2016, Grzegorz Blinowski
DOCTYPE SYSTEM
– 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:
TIN – zima 2015-2016, Grzegorz Blinowski
DOCTYPE PUBLIC
• 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
TIN – zima 2015-2016, Grzegorz Blinowski
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,
TIN – zima 2015-2016, Grzegorz Blinowski
DTD w encji dokumentu ... ]> Bułhakow Michał Mistrz i Małgorzata ...
TIN – zima 2015-2016, Grzegorz Blinowski
DTD w zawnętrznej encji bibliografia.dtd:
bibliography book*> book (authors, classification?, title)> authors author+> author (#PCDATA)>
Moja-bib.xml: Bułhakow Michał Mistrz i Małgorzata
TIN – zima 2015-2016, Grzegorz Blinowski
DTD zewnętrzne i wewnętrzne Bibliografia.dtd: (zewnętrzny podzbiór DTD) ... Moja-bib.xml: podzbiór DTD ]> &mb;
TIN – zima 2015-2016, Grzegorz Blinowski
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.
TIN – zima 2015-2016, Grzegorz Blinowski
Przestrzenie nazw XML
TIN – zima 2015-2016, Grzegorz Blinowski
XML - Przestrzenie nazw • "Czyste" DTD - Nazwy elementów i atrybutów tworzone są dowolnie • może to prowadzić do niejednoznaczoności: – Geometria: circle – Chemia: oxygen • Jak zapewnić unikalność nazw? • Wprowadzić "prefiksy"!
TIN – zima 2015-2016, Grzegorz Blinowski
XML - Przestrzenie nazw • Jak zapewnić unikalność nazw? • Wprowadzić "prefiksy": Book Review ... XML: A Primer ... • Bez ryzyka pomyłki możemy mieszać różne "słowniki" • Uwaga: przestrzeń nazw tylko identyfikuje słownik,
definicja to kwestia odrębna
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema http://www.w3.org/2001/XMLSchema
• XML Schema definiuje: – nowe elementy poprzez tagi: – dla tak zdefiniowanego elementu określamy jego typ (to co może się znaleść między tagami ... : n.p.: – nowe atrybuty podobnie
• ... aby powiedzieć więcej o zawartości elementu dostępne są typy proste • ... aby móc wielokrotnie wykorzystać raz zdefiniowane elementy dostępne są typy elementów
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema - Typy Atrybut type - definicja typu:
Podelement complexType lub simpleType: ... 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. •
TIN – zima 2015-2016, Grzegorz Blinowski
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.
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema - Typy c.d.
TIN – zima 2015-2016, Grzegorz Blinowski
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:
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema - tworzenie typów prostych Wyrażenia regularne w def. typów prostych:
TIN – zima 2015-2016, Grzegorz Blinowski
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:
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema - deklaracje i typy typ anonimowy:
typ nazwany:
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema - rozszerzenia typu definicyjnego
TIN – zima 2015-2016, Grzegorz Blinowski
XML Schema - deklaracja globalne i lokalne
TIN – zima 2015-2016, Grzegorz Blinowski
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)
TIN – zima 2015-2016, Grzegorz Blinowski
XML - DTD (zestawienie) DTD:
XML Schema:
•
Wywodzi się z SGML
•
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.
TIN – zima 2015-2016, Grzegorz Blinowski
XHTML
TIN – zima 2015-2016, Grzegorz Blinowski
XHTML - podstawy • XHTML - Extensible Hypertext Markup Language – XHTML ma zastąpić HTML – XHTML jest prawie identyczny z HTML 4.01 – XHTML to bardziej rygorystyczna składniowo i czystsza wersja HTML
• XHTML 1.0 – HTML 4.01 specyfikowany jako XML DTD
• Obecnie HTML5 “przejął” XHTML
TIN – zima 2015-2016, Grzegorz Blinowski
XHTML - reguły • Elementy XHTML muszą być poprawnie zagnieżdżone: bold, italic - źle!!!
• Dokumenty XHTML muszą być w pełni sformułowane: ... ...
• Nazwy znaczników muszą być pisane małymi literami • Wszystkie elementy XHTML muszą być domknięte – Elementy puste:
, , – Uwaga - niektóre przeglądarki wymagają spacji przed zamykającym /
TIN – zima 2015-2016, Grzegorz Blinowski
XHTML - reguły • Nazwy atrybutów muszą być pisane małymi literami: – Przykład:
• Wartości atrybutów muszą być ujęte w cydzysłowy – Przykład :
• "Minimalizacja" atrybutów jest zakazana – Przykład : , nie może być zapisane jako:
• Atrybut id zastępuje atrybut name: – Źle: – Dobrze: – Lepiej:
TIN – zima 2015-2016, Grzegorz Blinowski
XHTML - odmiany • Trzy podstawowe DTD dla XHTML to: – Strict (ścisły) • Czyste oznakowanie, bez atrybutów "wizualnych" (font, color, size) • Używać wyłacznie CSS (Cascading Style Sheets) do definicji wyglądu dokumentu
– Transitional (przejściowy) • W zgodzie z mieszaniną standardowego formatowania HTML oraz CSS • Zezwala na przestarzałe konstrukcje HTML
– Frameset • Zgodne z HTML frames
TIN – zima 2015-2016, Grzegorz Blinowski
XHTML - odmiany • Każdy dokument zgodny z XHTML musi rozpoczynąc się deklaracją DOCTYPE ze wskazaniem DTD: – – –
• HTML5:
TIN – zima 2015-2016, Grzegorz Blinowski
XHTML - narzędzia • HTML TIDY (Dave Raggett) http://www.w3.org/People/Raggett/tidy/ darmowe narzędzie pracujące pod UNIX-em służące do walidacji oraz "czyszczenia" dokumentów XHTML • W3C HTML Validation Tool http://validator.w3.org/ narzędzie on-line przeprowadzające walidację (ale nie poprawiające) dokumentów XHTML
TIN – zima 2015-2016, Grzegorz Blinowski
XPath, XPointer
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
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::
TIN – zima 2015-2016, Grzegorz Blinowski
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]
TIN – zima 2015-2016, Grzegorz Blinowski
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)
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
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()
TIN – zima 2015-2016, Grzegorz Blinowski
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]" ); }
TIN – zima 2015-2016, Grzegorz Blinowski
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); }
}
TIN – zima 2015-2016, Grzegorz Blinowski
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)
TIN – zima 2015-2016, Grzegorz Blinowski
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,"empty document\n"); xmlFreeDoc(doc); return; } if (xmlStrcmp(cur->name, (const xmlChar *) "story")) { fprintf(stderr,"niepoprawny dokument, root node != story"); xmlFreeDoc(doc); return; }
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
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.
TIN – zima 2015-2016, Grzegorz Blinowski
DOM - obiekty parsera • Document: – Właściwości: documentElement, doctype – Operacje: createElement(), createTextNode, ...
• 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
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
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)
TIN – zima 2015-2016, Grzegorz Blinowski
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, ...
TIN – zima 2015-2016, Grzegorz Blinowski
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
• • • • •
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,
• • •
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
development
underwriting…
sciences
TIN – zima 2015-2016, Grzegorz Blinowski
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
TIN – zima 2015-2016, Grzegorz Blinowski
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, ...
TIN – zima 2015-2016, Grzegorz Blinowski
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"