Zaawansowane Aplikacje Internetowe XML DTD Schema Dawid Weiss
- Slides: 41
Zaawansowane Aplikacje Internetowe XML, DTD, Schema Dawid Weiss
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 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" ? > <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 (~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) • 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 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 <? 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 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 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
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: '<!--' 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> <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 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 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 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: 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 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 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 dla C++ (i C) • Xerces-C • Libxml
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 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 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*) > <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 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 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 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. 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 <? 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 <!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: //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 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 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" 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> <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. 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) • 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)
- Slidetodoc
- Document object model
- Internal dtd
- Dtd vs schema
- Barbara tomkowiak
- Protok
- Eniac ciekawostki
- Dawid bernini
- Dawid (rzeźba berniniego)
- święty dawid patron
- Swiety dawid patron
- Mirw
- Yciorys
- Dawid kwiatkowski proste plagiat
- Maciej aleksy dawidowski aleksy dawidowski
- Schema l
- Xml schema root element
- Dtd
- Visual studio
- Book name
- Dtd
- Dtd idrefs
- Adbs
- Dtd in web technology
- Income tax expense
- Dtd
- Dtd
- Dtd
- Dtd atributos
- Abdurazik
- Whats dtd
- Dtd
- Andrzej wróblewski obrazy
- 5fs of abdominal distension
- You better wise up janet weiss
- Deanna weiss
- Weiss reflex
- Snsf postdoc mobility
- Lee weiss cmu
- Ureterosigmoidostomii
- Michele weiss
- Daniel a weiss