Zaawansowane Aplikacje Internetowe XML DTD Schema Dawid Weiss

  • Slides: 41
Download presentation
Zaawansowane Aplikacje Internetowe XML, DTD, Schema Dawid Weiss

Zaawansowane Aplikacje Internetowe XML, DTD, Schema Dawid Weiss

Plan wykładu ● ● XML • Czym jest XML? , krótka historia języka XML

Plan wykładu ● ● XML • Czym jest XML? , krótka historia języka XML • Dlaczego XML jest użyteczny? • Jak wygląda XML? • Prezentacja elementów języka • Parsery języka XML Walidacja XML – DTD/ Schema • Czemu służy walidacja? • Jak wygląda DTD? • Jak wygląda Schema?

Czym jest XML? ● www. w 3. org/XML • “XML is a simple, very

Czym jest XML? ● www. w 3. org/XML • “XML is a simple, very flexible text format derived from SGML. Originally designed to meet the challenges of large-scale electronic publishing, XML is also playing an increasingly important role in the exchange of a wide variety of data on the Web and elsewhere” ● ● XML definiuje strukturę dokumentu, pozostawiając interpretację znaczenia elementów tej struktury programiście XML jest sposobem meta-opisu, dowolnej innej struktury danych

Czym jest XML? – struktura a znaczenie <? xml version="1. 0" encoding="UTF-8" ? >

Czym jest XML? – struktura a znaczenie <? xml version="1. 0" encoding="UTF-8" ? > <person identity-nr="ab 385639"> <birth-date year="1997" month="2" day="12" /> <first-name>Dawid</first-name> <surname>Weiss</surname> </person> <? xml version="1. 0" encoding="UTF-8" ? > <xxxxxx-xx="xxxx"> <xxxxx-xxxx="xxxx" xxxxx="x" xxx="xx" /> <xxxxx-xxxx>xxxxx</xxxxx-xxxx> <xxxxxxx>xxxxx</xxxxxxx> </xxxxxx>

Krótka historia XML ● XML powstał jako „uproszczenie” SGML • Standard Generalized Markup Language

Krótka historia XML ● XML powstał jako „uproszczenie” SGML • Standard Generalized Markup Language (~1960/70), standard ISO • SGML jest bardzo rozbudowany, kosztowny w implementacji i długotrwały w opanowaniu • XML – podzbiór SGML, 1998 (specyfikacja tylko ok. 20 stronicowa) ● ● XML szybko się rozprzestrzenił, powstają parsery dla wielu języków Technologie „follow-up”: Xpath, Xpointer, XSLT, XSL: FO, Xlink. . .

Dlaczego XML jest pożyteczny? ● XML jest zrozumiały dla ludzi (jest plikiem tekstowym) •

Dlaczego XML jest pożyteczny? ● XML jest zrozumiały dla ludzi (jest plikiem tekstowym) • uwaga: chyba, że struktura dokumentu nie ma sensu: <? xml version="1. 0" encoding="UTF-8" ? > <a><b c="dudu" /></a> ● XML ułatawia pracę programisty • Parsery • Walidacja • Łatwo rozszerzalny ● XML jest „trendy” : )

Dlaczego XML jest użyteczny, c. d. ● Fragment dokumentu z napisem „hello world” zapisanego

Dlaczego XML jest użyteczny, c. d. ● Fragment dokumentu z napisem „hello world” zapisanego z Open. Office (w XML) i MS Word (w formacie własnym)

Elementy języka: prolog ● XML jest plikiem tekstowym zwykle rozpoczynającym się od prologu <?

Elementy języka: prolog ● XML jest plikiem tekstowym zwykle rozpoczynającym się od prologu <? xml version=” 1. 0” encoding=”UTF-8”? > ● ● Wszystkie parsery muszą wspierać przynajmniej UTF-8 i UTF-16 Prolog jest opcjonalny, ale powinien być wyspecyfikowany

Elementy języka: tagi ● Struktura jest zdefiniowana przez tagi (ang. markup) • Tag to

Elementy języka: tagi ● Struktura jest zdefiniowana przez tagi (ang. markup) • Tag to sekwencja alfanumerycznych znaków zawartych między '<' i '>' • Tag otwierający: <person> • Tag zamykający: </person> • Tag pusty (bez ciała): <person /> • Przykłady: • <fee>129</fee> • <age>79</age> • <marital-status>married</marital-status>

Elementy języka: atrybuty ● Atrybuty są częścią struktury i pozwalają na związanie z tagami

Elementy języka: atrybuty ● Atrybuty są częścią struktury i pozwalają na związanie z tagami par nazwa-wartość • Jedynie tagi otwierające mogą posiadać atrybuty • Nazwa atrybutu jest unikalna w obrębie jednego tagu • niepoprawny przykład: <person age=” 79” age=” 50” /> ● Przykłady • <fee currency=”usd”>129</fee> • <person marital-status=”married” age=” 79” />

Pierwszy dokument XML

Pierwszy dokument XML

Elementy języka: instrukcje sterujące ● ● Instrukcje sterujące nie są częścią dokumentu, ale są

Elementy języka: instrukcje sterujące ● ● Instrukcje sterujące nie są częścią dokumentu, ale są wykrywane i sygnalizowane przez parsery XML Instrukcja sterująca wygląda następująco: <? my processing instruction is here ? > ● Prolog w XML jest przykładem instrukcji sterującej

Elementy języka: komentarze ● ● Komentarze to bloki tekstowe występujące między sekwencjami znaków: '<!--'

Elementy języka: komentarze ● ● Komentarze to bloki tekstowe występujące między sekwencjami znaków: '<!--' i '-->' Przykłady: <person> <!-- here goes definition of a person --> <surname>Weiss<!-- who is this guy? --></surname> </person> • Komentarze nie mogą być deklarowane w definicji tagów • W komentarzach nie może pojawić się sekwencja „--”

Elementy języka: tekst, czyli Piąty Element ● Tekst może wystąpić wszędzie między tagami <poem>

Elementy języka: tekst, czyli Piąty Element ● Tekst może wystąpić wszędzie między tagami <poem> <author> <surname>Białoszewski</surname> <first-name>Miron</first-name> </author> <title>Być to. . . </title> <contents> być to źle a nie? </contents> </poem>

Tekst, c. d. ● ● Spacje mogą być, na życzenie programisty, zignorowane przez parsery

Tekst, c. d. ● ● Spacje mogą być, na życzenie programisty, zignorowane przez parsery XML Jeśli zachodzi potrzeba umieszczenia znaków specjalnych (<>&), należy posłużyć się albo encjami, albo blokiem CDATA • Wszystkie znaki w bloku CDATA są przekazywane do parsera XML dokładnie tak, jak zostały zapisane

Blok CDATA <poem> <author> <surname>Białoszewski</surname> <first-name>Miron</first-name> </author> <title>Namuzowywanie<title> <contents><![CDATA[Muzo Natchniuzo tak ci końcówkuję z

Blok CDATA <poem> <author> <surname>Białoszewski</surname> <first-name>Miron</first-name> </author> <title>Namuzowywanie<title> <contents><![CDATA[Muzo Natchniuzo tak ci końcówkuję z niepisaniowości natreść mi ości i uzo]]></contents> </poem>

Kodowanie znaków w XML ● Prolog mówi parserowi jakiego kodowania należy użyć w interpretacji

Kodowanie znaków w XML ● Prolog mówi parserowi jakiego kodowania należy użyć w interpretacji dokumentu • Nazwy stron kodowych: IETF RFC 1766 • Domyślna 'UTF-8' (Unicode) ● Przykład: prosty plik XML z literką „ą”

Przykład: UTF-16 (ą=0 x 0105) <? xml version="1. 0" encoding="UTF-16"? > <tag>ą</tag>

Przykład: UTF-16 (ą=0 x 0105) <? xml version="1. 0" encoding="UTF-16"? > <tag>ą</tag>

Przykład: ISO 8859 -2 (ą = 0 x. B 1) <? xml version="1. 0"

Przykład: ISO 8859 -2 (ą = 0 x. B 1) <? xml version="1. 0" encoding="iso 8859 -2"? > <tag>ą</tag>

Encje w tekście ● ● ● Ponieważ niektóre znaki ('<', '&', '>') mają dla

Encje w tekście ● ● ● Ponieważ niektóre znaki ('<', '&', '>') mają dla parsera specjalne znaczenie, więc trzeba je albo zakodować, albo umieścić w bloku CDATA Encje: '&' + entity_name + '; ' Przykład: <? xml version="1. 0" encoding="UTF-8"? > <tag> © Dawid Weiss & Krzysztof Kowalczykiewicz </tag> © Dawid Weiss & Krzysztof Kowalczykiewicz

Parsery XML ● ● Moduły programowe, które ułatwiają interpretację plików XML Dwie strategie: DOM

Parsery XML ● ● Moduły programowe, które ułatwiają interpretację plików XML Dwie strategie: DOM i SAX [pull/ push] • DOM (Document Object Model) • Obiektowa reprezentacja dokumentu • Łatwiejsza w obsłudze, ale wymaga pamięci i sparsowania całego dokumentu XML • SAX (Simple API for XML) • Interfejs oparty na zdarzeniach • Interpretacja ‘w locie’; zdarzenia są przekazywane do kodu programu, przetworzona część pliku nie jest pamiętana

Parsery XML ● Parsers for Java: • • • Xerces Saxon Piccolo Crimson (obsolete).

Parsery XML ● Parsers for Java: • • • Xerces Saxon Piccolo Crimson (obsolete). . . • Parsery dla C++ (i C) • Xerces-C • Libxml

Zadanie domowe (1) ● Napisać aplikację opartą o interfejs SAX i DOM, która wypisze

Zadanie domowe (1) ● Napisać aplikację opartą o interfejs SAX i DOM, która wypisze osobę, której wiek jest większy niż 25 lat • Przykładowy plik wejściowy: <? xml version="1. 0" encoding="UTF-8" ? > <people> <person> <first-name>Dawid</first-name> <surname>Weiss</surname> <age>20</age> </person> <first-name>Krzysztof</first-name> <surname>Kowalczykiewicz</surname> <age>40</age> </person> </people>

Walidacja XML ● Dokument XML określamy jako poprawny (ang. well formed), jeśli jego struktura

Walidacja XML ● Dokument XML określamy jako poprawny (ang. well formed), jeśli jego struktura jest poprawna w sensie składni języka XML ● ● Parser XML nie wskaże błędów przy interpretacji takiego pliku Dokument XML określamy jako ‘valid’, jeśli jego struktura jest poprawna i jest on poprawny w sensie składni elementów zdefiniowanej za pomocą DTD lub języka XML Schema

DTD ● ● DTD jest tekstowym opisem tego, jak tagi i zawartość pliku XML

DTD ● ● DTD jest tekstowym opisem tego, jak tagi i zawartość pliku XML powinna być zorganizowana DTD pozwala na specyfikację następujących elementów • • • tagi atrybuty encje bloki PCDATA (parsed character data) bloki CDATA (character data – not to be processed by the parser)

Elementy języka DTD <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT people (person*) >

Elementy języka DTD <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT people (person*) > <people> <person id="dw 102"> <first-name>Dawid</first-name> <surname>Weiss</surname> <age>20</age> </person> <person id="dw 103"> <first-name>Krzysztof</first-name> <surname>Kowalczykiewicz</surname> <age>40</age> </person> </people>

Elementy języka DTD (c. d. ) <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT

Elementy języka DTD (c. d. ) <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT people (person*) > <!ELEMENT person (first-name, surname, age) > <people> <person id="dw 102"> <first-name>Dawid</first-name> <surname>Weiss</surname> <age>20</age> </person> <person id="dw 103"> <first-name>Krzysztof</first-name> <surname>Kowalczykiewicz</surname> <age>40</age> </person> </people>

Elementy języka DTD (c. d. ) <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT

Elementy języka DTD (c. d. ) <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT people (person*) > <people> <!ELEMENT person (first-name, <person id="dw 102"> surname, age) > <first-name>Dawid</first-name> <!ELEMENT first-name (#PCDATA) > <surname>Weiss</surname> <age>20</age> <!ELEMENT surname (#PCDATA) > </person> <!ELEMENT age (#PCDATA) > <person id="dw 103"> <first-name>Krzysztof</first-name> <surname>Kowalczykiewicz</surname> <age>40</age> </person> </people>

Elementy języka DTD (c. d. ) <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT

Elementy języka DTD (c. d. ) <!ELEMENT element-name category> or <!ELEMENT element-name (element-content)> <!ELEMENT people (person*) > <!ELEMENT person (first-name, surname, age) > <people> <person id="dw 102"> <first-name>Dawid</first-name> <surname>Weiss</surname> <age>20</age> <!ATTLIST person id ID #REQUIRED> </person> <person id="dw 103"> <!ELEMENT first-name (#PCDATA) > <first-name>Krzysztof</first-name> <!ELEMENT surname (#PCDATA) > <surname>Kowalczykiewicz</surname> <!ELEMENT age (#PCDATA) > <age>40</age> </person> </people>

DTD: jak go wskazać parserowi XML? ● DTD załączone z dokumentem <? xml version="1.

DTD: jak go wskazać parserowi XML? ● DTD załączone z dokumentem <? xml version="1. 0" encoding="UTF-8" ? > <!DOCTYPE people [ <!ELEMENT people (person*) > <!ELEMENT person (first-name, surname, age) > <!ATTLIST person id ID #REQUIRED> <!ELEMENT first-name (#PCDATA) > <!ELEMENT surname (#PCDATA) > <!ELEMENT age (#PCDATA) > ]> <people> <person id="dw 102"> <first-name>Dawid</first-name> <surname>Weiss</surname> <age>20</age> </person> <person id="dw 103"> <first-name>Krzysztof</first-name> <surname>Kowalczykiewicz</surname> <age>40</age> </person> </people>

DTD: jak go wskazać parserowi XML? ● DTD wskazane jako plik w systemie <?

DTD: jak go wskazać parserowi XML? ● DTD wskazane jako plik w systemie <? xml version="1. 0" encoding="UTF-8" ? > <!DOCTYPE people SYSTEM "people. dtd" > <people> <person id="dw 102"> <first-name>Dawid</first-name> <surname>Weiss</surname> <age>20</age> </person> <person id="dw 103"> <first-name>Krzysztof</first-name> <surname>Kowalczykiewicz</surname> <age>40</age> </person> </people>

DTD: jak go wskazać parserowi XML? ● <? xml version="1. 0" encoding="UTF-8" DTD wskazane

DTD: jak go wskazać parserowi XML? ● <? xml version="1. 0" encoding="UTF-8" DTD wskazane <!DOCTYPE article jako „publiczny” plik PUBLIC "-//PP//DTD EXAMPLE 1//PL" ? > "http: //www. xxx. pl/example. dtd" <people> <person id="dw 102"> <first-name>Dawid</first-name> <surname>Weiss</surname> <age>20</age> </person> <person id="dw 103"> <first-name>Krzysztof</first-name> <surname>Kowalczykiewicz</surname> <age>40</age> </person> </people>

Zadanie domowe (2) ● ● ● Proszę przeczytać tutorial do DTD ze strony: http:

Zadanie domowe (2) ● ● ● Proszę przeczytać tutorial do DTD ze strony: http: //www. w 3 schools. com/dtd/default. asp Proszę eksperymentować z DTD i przykładami Parser (walidujący) i przykłady będą dostępne na stronie: http: //www. cs. put. poznan. pl/dweiss/tmp

Język XML Schema ● Argumenty przeciwko DTD • Jest „dziwny” • Nie jest wystarczająco

Język XML Schema ● Argumenty przeciwko DTD • Jest „dziwny” • Nie jest wystarczająco precyzyjny ● XML Schema jest „jak DTD”, lecz specyfikowane w języku XML • Wspiera typy danych • Wspiera warunki na wartości atrybutów • Wspiera dziedziczenie typów • Argumenty przeciwko XML Schema • Jest trudniejszy do nauczenia

XML Schema – jak tego użyć? ● ● Plik XML Schema można zweryfikować przy

XML Schema – jak tego użyć? ● ● Plik XML Schema można zweryfikować przy pomocy XML Schema jest dość skomplikowany. Polecany jest edytor wizualny, np. XML Spy

<? xml version="1. 0" encoding="UTF-8"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema"

<? xml version="1. 0" encoding="UTF-8"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" element. Form. Default="qualified"> <xs: element name="people"> <xs: complex. Type> <xs: sequence> <xs: element ref="person" min. Occurs="0" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name="person"> <xs: complex. Type> <xs: sequence> <xs: element ref="first-name"/> <xs: element ref="surname"/> <xs: element name="age"> <xs: simple. Type> <xs: restriction base="xs: int"> <xs: min. Inclusive value="0"/> <xs: max. Inclusive value="150"/> </xs: restriction> </xs: simple. Type> </xs: element> </xs: sequence> <xs: attribute name="id" type="xs: ID" use="required"/> </xs: complex. Type> </xs: element> <xs: element name="first-name" type="xs: string"/> <xs: element name="surname" type="xs: string"/> </xs: schema>

XML namespaces ● Przykład* <BOOK> <TITLE>XML Developer's Guide</TITLE> <PRICE currency="US Dollar">44. 95</PRICE> <AUTHOR> <TITLE>Ms</TITLE>

XML namespaces ● Przykład* <BOOK> <TITLE>XML Developer's Guide</TITLE> <PRICE currency="US Dollar">44. 95</PRICE> <AUTHOR> <TITLE>Ms</TITLE> <NAME>Ambercrombie Kim</NAME> </AUTHOR> </BOOK> • Oba tagi TITLE mają inne znaczenie, jednak parser potraktuje je identycznie • Specyfikacja XML Namespaces pozwala na wyodrębnienie kontekstu dla elementów XML * quoted from Microsoft's documentation

XML namespaces ● Przykład <? xml version="1. 0" ? > <BOOK xmlns="http: //www. dawidweiss.

XML namespaces ● Przykład <? xml version="1. 0" ? > <BOOK xmlns="http: //www. dawidweiss. com/ns/books"> <TITLE>XML Developer's Guide</TITLE> <PRICE currency="US Dollar">44. 95</PRICE> <authors: AUTHOR xmlns: authors="http: //www. dawidweiss. com/ns/authors <authors: TITLE>Ms</authors: TITLE> <authors: NAME>Ambercrombie Kim</authors: NAME> </authors: AUTHOR> </BOOK>

Więcej informacji o XML. . . ● XML 1. 0 recommendation (W 3 C)

Więcej informacji o XML. . . ● XML 1. 0 recommendation (W 3 C) • http: //www. w 3. org/TR/REC-xml ● XML tutorial (W 3 C) • http: //www. w 3 schools. com/xml/default. asp ● All. The. Web, Google, inne wyszukiwarki (jest mnóstwo informacji o XML)