XML

Transkrypt

XML
TIN – zima 2016-2017, Grzegorz Blinowski
TIN
Techniki Internetowe
zima 2016-2017
Grzegorz Blinowski
Instytut Informatyki
Politechniki Warszawskiej
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
XML
TIN – zima 2016-2017, Grzegorz Blinowski
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
TIN – zima 2016-2017, Grzegorz Blinowski
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 >
TIN – zima 2016-2017, Grzegorz Blinowski
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
TIN – zima 2016-2017, 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
<bibliography>
<book ID= "MiM">
<authors>
<author>Bułhakow Michał</author >
<translator>I. Lewandowska </translator>
Dokument XML może być
przekształcony w drzewo
obrazujące hierarchiczne
zależności elementów
</authors >
<title> Mistrz i Małgorzata </title >
<publisher>Czytelnik</publisher >
<classification type="fiction"/>
<year>1992</year>
</ book >
</bibliography >
TIN – zima 2016-2017, 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 2016-2017, 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 2016-2017, 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 (OASIS), Schematron, ISO
DSDL (obejmuje Relax NG i Schematron)
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
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/>
TIN – zima 2016-2017, Grzegorz Blinowski
DTD XML - gramatyka
bezkontekstowa (CFG)
XML DTD:
<!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)
TIN – zima 2016-2017, Grzegorz Blinowski
DTD - Document Type Definition
Definicja nazw
elementów i struktury:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ATTLIST
<!ATTLIST
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 2016-2017, 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:
<![CDATA[
function matchwo(a,b)
{
….
}
]]>
TIN – zima 2016-2017, Grzegorz Blinowski
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
...>
TIN – zima 2016-2017, Grzegorz Blinowski
DTD - definicje elementów
Deklaracja
<element e>
liczność: R?
R*
R+
R1 | R2 | ..., | Rn
R1, R2, ..., Rn
#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 Ri
Sekwencja R, kolejność ma znacznie
Ciąg znaków
Pusty
Zawartość mieszana
Cokolwiek
TIN – zima 2016-2017, Grzegorz Blinowski
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:
Dobrze:
Dobrze :
<!ELEMENT foo (a | b , c)>
<!ELEMENT foo (a | (b, c))>
<!ELEMENT foo ((a | b), c))>
• gramatyka musi być deterministyczna
Źle : <!ELEMENT foo ((a, b) | (a, c))>
TIN – zima 2016-2017, Grzegorz Blinowski
DTD - Definicje atrybutów
<person ID="bm"> Jan Nowak </person>
...
<bibliography>
Identyfikator obiektu
<book ID= "MiM">
<authors>
Wewnątrz-dokumentowe
odwołanie typu IDREF
<author authorRef="bm">Bułhakow Michał</author >
<translator>I. Lewandowska </translator>
</authors >
Odwołanie do zewn.
<title> Mistrz i Małgorzata </title >
Encji
<classification type="fiction"/>
<publisher>Czytelnik</publisher >
<year>1992</ year>
</book >
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
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>
TIN – zima 2016-2017, 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 2016-2017, 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 2016-2017, Grzegorz Blinowski
Encje ogólne
Encje ogólne predefinowane (znakowe):
&amp;
&
&lt;
<
&gt;
>
&apos;
'
&quot;
"
<!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!
TIN – zima 2016-2017, Grzegorz Blinowski
Encje parametryczne
<!ENTITY % nazwa tekst>
Przykład:
<!ENTITY % pcdata "(#PCDATA)">
<!ELEMENT author %pcdata;>
<!ENTITY % expandme "INCLUDE">
..
<![ %expandme; [
ELEMENT description (#PCDATA)>
]]>
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 2016-2017, Grzegorz Blinowski
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
TIN – zima 2016-2017, Grzegorz Blinowski
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
TIN – zima 2016-2017, Grzegorz Blinowski
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:
URL, pokazuje na
zewnętrzny plik
DTD:
<!ENTITY abstr1 SYSTEM "file:///abstrakt.xml">
<!ENTITY abstr2 SYSTEM "file:///intro.xml">
<!ENTITY intro SYSTEM "file:///wstep.xml">
Logicznie odpowiada
Instancja dokumentu:
<paper>
wstawieniu zawartości pliku
&abstr1;
&abstr2;
&intro;
</paper>
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
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)
TIN – zima 2016-2017, Grzegorz Blinowski
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”>
TIN – zima 2016-2017, Grzegorz Blinowski
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
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
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 >
...
TIN – zima 2016-2017, Grzegorz Blinowski
DTD w zawnętrznej encji
bibliografia.dtd:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
...
bibliography book*>
book (authors, classification?, title)>
authors author+>
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 >
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
]>
<bibliography>
<book class="fikcja">
<authors>
<author>&mb;</author >
</authors >
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
Przestrzenie nazw XML
TIN – zima 2016-2017, Grzegorz Blinowski
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"!
TIN – zima 2016-2017, Grzegorz Blinowski
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
TIN – zima 2016-2017, Grzegorz Blinowski
XML Schema
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
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
TIN – zima 2016-2017, Grzegorz Blinowski
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.
•
TIN – zima 2016-2017, 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 2016-2017, Grzegorz Blinowski
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>
TIN – zima 2016-2017, 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:
<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>
TIN – zima 2016-2017, Grzegorz Blinowski
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>
TIN – zima 2016-2017, 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:
<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>
TIN – zima 2016-2017, Grzegorz Blinowski
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>
TIN – zima 2016-2017, Grzegorz Blinowski
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>
TIN – zima 2016-2017, Grzegorz Blinowski
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>
TIN – zima 2016-2017, 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 2016-2017, 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
Mieszany model zawartości
●
●
Zaawansowana kontrola
tekstowej zawartości
elementów
Możliwość definiowania
własnych typów danych.
TIN – zima 2016-2017, Grzegorz Blinowski
XPath, XPointer
TIN – zima 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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,"pusty dokument\n");
xmlFreeDoc(doc);
return; }
if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
fprintf(stderr,"niepoprawny dokument, root node != <story>");
xmlFreeDoc(doc);
return; }
TIN – zima 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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 2016-2017, 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"