Biblioteki dzielone, XML i readline

Podobne dokumenty
Szablony funkcji i szablony klas

Zasoby, pliki graficzne

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Weryfikatory, zasoby graficzne

Schemat konstrukcja pliku Makefile

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Wprowadzenie do szablonów klas

Wprowadzenie do szablonów szablony funkcji

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Wprowadzenie do szablonów szablony funkcji

Qt sygnały i designer

Praca z aplikacją designer

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

Plan dzisiejszego wykładu. Narzędzia informatyczne w językoznawstwie. XML - Definicja. Zalety XML

Wprowadzenie do technologii XML

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

Autotools. Bogdan Kreczmer.

Rola języka XML narzędziem

JAVA W SUPER EXPRESOWEJ PIGUŁCE

LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Wartości domyślne, przeciażenia funkcji

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

Wykład 8: klasy cz. 4

WYKŁAD 1 METAJĘZYK SGML CZĘŚĆ 1

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Wartości domyślne, przeciażenia funkcji

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

LAB 7. XML EXtensible Markup Language - Rozszerzalny Język Znaczników XSD XML Schema Definition Definicja Schematu XML

XML Schema. Bartłomiej Świercz. Łódź, 19 listopada 2005 roku. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz XML Schema

Wyjątki (exceptions)

Operacje wejścia/wyjścia odsłona pierwsza

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

PARADYGMATY PROGRAMOWANIA Wykład 4

XML extensible Markup Language. Paweł Chodkiewicz

1 Atrybuty i metody klasowe

Przesłanianie nazw, przestrzenie nazw

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Podstawy programowania skrót z wykładów:

DYNAMICZNE PRZYDZIELANIE PAMIECI

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy Programowania Obiektowego

Style programowania - krótki przeglad

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Pola i metody statyczne

Programowanie obiektowe

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

SOAP i alternatywy. 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift.

WYKŁAD 2 DTD DOCUMENT TYPE DEFINITION CZĘŚĆ 1

GStreamer. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

METODY REPREZENTACJI INFORMACJI

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

29. Poprawność składniowa i strukturalna dokumentu XML

Podstawy XML-a. Zaawansowane techniki programowania

Wprowadzenie do UML, przykład użycia kolizja

Programowanie 2. Język C++. Wykład 3.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Aplikacje internetowe laboratorium XML, DTD, XML Schema, XSL

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wprowadzenie do technologii XML

Operacje wejścia/wyjścia (odsłona druga) - pliki

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Model semistrukturalny

Programowanie obiektowe zastosowanie języka Java SE

DTD - encje ogólne i parametryczne, przestrzenie nazw

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

XML DTD XML Schema CSS

Wstęp do programowania. Wykład 1

Konstruktor kopiujacy

Hermetyzacja oraz pola i metody statyczne

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Zaawansowane aplikacje WWW - laboratorium

Część 4 życie programu

Zadanie 2: Arytmetyka symboli

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Mechanizm dziedziczenia

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Kurs WWW Język XML, część I

Aplikacje internetowe laboratorium XML, DTD, XSL

Czujniki PSD i dalmierze triangulacyjne

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Język ludzki kod maszynowy

Programowanie obiektowe w języku

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zasady programowania Dokumentacja

Java jako język programowania

Zaawansowany kurs języka Python

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Dokument poprawnie sformułowany jest zgodny z ogólnymi zasadami składniowymi:

Transkrypt:

Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2017 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową.

Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net

Plan prezentacji 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Plan prezentacji Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki statyczne są bezpośrednio konsolidowane z kodem programu.

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki statyczne są bezpośrednio konsolidowane z kodem programu. Zalety: w momencie startu aplikacji wiadomo, że są dostępne wszystkie niezbędne elementy i mają one właściwą wersję, uniknięcie problemu sprawdzania kolejnych zależności (ang. dependency hell), wszystko zawarte jest w jednym wykonywalnym pliku, start aplikacji może być szybszy, ale nie musi to być regułą.

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki statyczne są bezpośrednio konsolidowane z kodem programu. Zalety: w momencie startu aplikacji wiadomo, że są dostępne wszystkie niezbędne elementy i mają one właściwą wersję, uniknięcie problemu sprawdzania kolejnych zależności (ang. dependency hell), wszystko zawarte jest w jednym wykonywalnym pliku, start aplikacji może być szybszy, ale nie musi to być regułą. Wady: duży rozmiar pliku wykonywalnego, duża zajętość pamięci, gdyż może w niej znajdować się wiele kopii tej samej biblioteki, za każdym razem, gdy startuje kolejna instancja tej samej aplikacji, do pamięci muszą być ładowane kolejne kopie tych samych bibliotek.

Przykładowy projekt Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Przykładowy projekt Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote inc -c -o obj/complex.o src/complex.cpp g++ -Wall -iquote inc -c -o obj/matrix.o src/matrix.cpp g++ -Wall -iquote inc -c -o obj/main.o src/main.cpp g++ -o prog obj/complex.o obj/matrix.o obj/main.o

Tworzymy bibliotekę statyczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Tworzymy bibliotekę statyczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Tworzymy bibliotekę statyczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Tworzymy bibliotekę statyczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote inc -c -o obj/complex.o src/complex.cpp g++ -Wall -iquote inc -c -o obj/matrix.o src/matrix.cpp ar rcs lib/libcomplexmatrix.a obj/complex.o obj/matrix.o

Tworzymy bibliotekę statyczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote inc -c -o obj/complex.o src/complex.cpp g++ -Wall -iquote inc -c -o obj/matrix.o src/matrix.cpp ar rcs lib/libcomplexmatrix.a obj/complex.o obj/matrix.o

Wykorzystanie biblioteki statycznej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Wykorzystanie biblioteki statycznej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Wykorzystanie biblioteki statycznej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Wykorzystanie biblioteki statycznej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote tool/inc -c -o obj/main.o src/main.cpp

Wykorzystanie biblioteki statycznej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote tool/inc -c -o obj/main.o src/main.cpp g++ -o prog -Ltool/lib obj/main.o -lcomplexmatrix

Plan prezentacji Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki dynamiczne konsolidowane są z kodem programu w trakcie jego ładowania lub już w trakcie działania.

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki dynamiczne konsolidowane są z kodem programu w trakcie jego ładowania lub już w trakcie działania. Zalety: binarny plik programu jest stosunkowo mały, jedna biblioteka może być dzielona między różne aplikacje, które pracują jednocześnie, jeżeli rezyduje już w pamięci, to uruchomienie nowej instancji programu nie wymaga jej załadowania.

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki dynamiczne konsolidowane są z kodem programu w trakcie jego ładowania lub już w trakcie działania. Zalety: binarny plik programu jest stosunkowo mały, jedna biblioteka może być dzielona między różne aplikacje, które pracują jednocześnie, jeżeli rezyduje już w pamięci, to uruchomienie nowej instancji programu nie wymaga jej załadowania. Wady: konieczność konsolidowania programu z biblioteką po załadowaniu kodu programu do pamięci, konieczność sprawdzania wzajemnych zależności między bibliotekami. system musi wiedzieć, gdzie są biblioteki aby załadować je w trakcie działania programu.

Konwencje nazw Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje libnazwa.so podstawowa nazwa pliku biblioteki

Konwencje nazw Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje libnazwa.so podstawowa nazwa pliku biblioteki libnazwa.so.4 nazwa z numerem wersji

Konwencje nazw Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje libnazwa.so podstawowa nazwa pliku biblioteki libnazwa.so.4 nazwa z numerem wersji libnazwa.so.4.2.7 nazwa z numerem pobocznym rewizji danej wersji

Konwencje nazw Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje libnazwa.so podstawowa nazwa pliku biblioteki libnazwa.so.4 nazwa z numerem wersji libnazwa.so.4.2.7 nazwa z numerem pobocznym rewizji danej wersji Numery poboczne wersji nie są widoczne dla aplikacji. Nazwy biblioteki bez numeru wersji oraz z numerem tworzy się jako linki symboliczne do nazwy z pełną numeracją, tzn. z numerem wersji oraz numerem pobocznym rewizji danej wersji.

Konwencje nazw Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje libnazwa.so podstawowa nazwa pliku biblioteki libnazwa.so.4 nazwa z numerem wersji libnazwa.so.4.2.7 nazwa z numerem pobocznym rewizji danej wersji Numery poboczne wersji nie są widoczne dla aplikacji. Nazwy biblioteki bez numeru wersji oraz z numerem tworzy się jako linki symboliczne do nazwy z pełną numeracją, tzn. z numerem wersji oraz numerem pobocznym rewizji danej wersji. Przykład: lrwxrwxrwx 1 root root 14 2012-04-30 17:01 /usr/lib/libyaml-0.so -> libyaml-0.so.2 lrwxrwxrwx 1 root root 18 2012-04-30 17:01 /usr/lib/libyaml-0.so.2 -> libyaml-0.so.2.0.1 -rw-r--r-- 1 root root 116032 2009-12-14 22:47 /usr/lib/libyaml-0.so.2.0.1

Lokalizacje bibliotek Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki dzielone przechowywane są zazwyczaj tam, gdzie są również wersje bibliotek statycznych. Zbiór przeszukiwanych lokalizacji może modyfikować administrator systemu. /etc/ld.so.cache zawiera binarny zapis przeszukiwanych ścieżek /etc/ld.so.conf zawiera tekstowy zapis lokalizacji, które mają być przeszukiwane Każdorazowa zmiana wpisu w ld.so.conf wymaga uruchomienia programu ldconfig. Na podstawie wpisów w ld.so.conf tworzy on nową zawartość pliku ld.so.cache.

Lokalizacje bibliotek Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki dzielone przechowywane są zazwyczaj tam, gdzie są również wersje bibliotek statycznych. Zbiór przeszukiwanych lokalizacji może modyfikować administrator systemu. /etc/ld.so.cache zawiera binarny zapis przeszukiwanych ścieżek /etc/ld.so.conf zawiera tekstowy zapis lokalizacji, które mają być przeszukiwane Każdorazowa zmiana wpisu w ld.so.conf wymaga uruchomienia programu ldconfig. Na podstawie wpisów w ld.so.conf tworzy on nową zawartość pliku ld.so.cache.

Lokalizacje bibliotek Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Biblioteki dzielone przechowywane są zazwyczaj tam, gdzie są również wersje bibliotek statycznych. Zbiór przeszukiwanych lokalizacji może modyfikować administrator systemu. /etc/ld.so.cache zawiera binarny zapis przeszukiwanych ścieżek /etc/ld.so.conf zawiera tekstowy zapis lokalizacji, które mają być przeszukiwane Każdorazowa zmiana wpisu w ld.so.conf wymaga uruchomienia programu ldconfig. Na podstawie wpisów w ld.so.conf tworzy on nową zawartość pliku ld.so.cache.

Tworzymy bibliotekę dynamiczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Tworzymy bibliotekę dynamiczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Tworzymy bibliotekę dynamiczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Tworzymy bibliotekę dynamiczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -Iinc -fpic -c -o obj/complex.o src/complex.cpp g++ -Wall -Iinc -fpic -c -o obj/matrix.o src/matrix.cpp g++ -shared -o lib/libcomplexmatrix.so obj/complex.o obj/matrix.o

Tworzymy bibliotekę dynamiczną Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -Iinc -fpic -c -o obj/complex.o src/complex.cpp g++ -Wall -Iinc -fpic -c -o obj/matrix.o src/matrix.cpp g++ -shared -o lib/libcomplexmatrix.so obj/complex.o obj/matrix.o

Wykorzystanie biblioteki dzielonej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Wykorzystanie biblioteki dzielonej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje

Wykorzystanie biblioteki dzielonej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote tool/inc -c -o obj/main.o src/main.cpp

Wykorzystanie biblioteki dzielonej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote tool/inc -c -o obj/main.o src/main.cpp

Wykorzystanie biblioteki dzielonej Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje g++ -Wall -iquote tool/inc -c -o obj/main.o src/main.cpp g++ -o prog -Ltool/lib obj/main.o -lcomplexmatrix

Plan prezentacji Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje #include <dlfcn.h> void dlopen(const char filename, int flag); char dlerror(void ); void dlsym(void handle, const char symbol); int dlclose(void handle);

Podstawowe własności Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje Kompilacja biblioteki musi być realizowana z opcją -fpic. Pozwala to utworzyć relokowalny kod. W poleceniu konsolidacji trzeba pamiętać o opcji -shared oraz -ldl. Funkcja init( ), o ile istnieje, wykonuje się tylko raz.

Interfejs biblioteki Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje extern C { const char GetCmdName(void); void PrintSyntax(void); Interp4Command CreateCmd(void);

Interfejs biblioteki Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje extern C { const char GetCmdName(void); void PrintSyntax(void); Interp4Command CreateCmd(void); const char GetCmdName(void) { return Rotate ;

Interfejs biblioteki Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje extern C { const char GetCmdName(void); void PrintSyntax(void); Interp4Command CreateCmd(void); void PrintSyntax(void) { Interp4Rotate::PrintSyntax( );

Interfejs biblioteki Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje extern C { const char GetCmdName(void); void PrintSyntax(void); Interp4Command CreateCmd(void); Interp4Command CreateCmd(void) { return Interp4Rotate::CreateCmd( );

Interfejs biblioteki Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje extern C { const char GetCmdName(void); void PrintSyntax(void); Interp4Command CreateCmd(void); const char Interp4Rotate::GetCmdName( ) const { return ::GetCmdName( );

Plan prezentacji 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Podstawowe cechy XML (extensible Markup Language) Rozszerzalny Język Znaczników XML jest tylko składnia przeznaczona do opisu danych. Poza konkretną aplikacją dane zapisane w XML nie mają większego sensu, gdyż zazwyczaj tylko dana aplikacja wie jak je interpretować. Standard XML został opracowany i zdefiniowany przez World Wide Web Consortium (W3C). Najistotniejsze cechy XML: bazuje na tekstowym formacie plików jest niezależny od platformy, umożliwia strukturalizację danych.

Geneza XML XML bazuje na SGML (Standard Generalized Markup Language). Wprowadzenie XML wiązało się z chęcią uproszczenia SGML.

Geneza XML XML bazuje na SGML (Standard Generalized Markup Language). Wprowadzenie XML wiązało się z chęcią uproszczenia SGML. SGML HTML XML

Geneza XML XML bazuje na SGML (Standard Generalized Markup Language). Wprowadzenie XML wiązało się z chęcią uproszczenia SGML. SGML HTML XML XHTML

Różnice między XML a HTML Przeznaczenie: XML jest używany do opisu danych, HTML jest używany przede wszystkim w celu zobrazowania informacji.

Różnice między XML a HTML Przeznaczenie: XML jest używany do opisu danych, HTML jest używany przede wszystkim w celu zobrazowania informacji. Różnice interpretacji składni: XML Rozróżnia małe i duże litery Rygorystycznie wymagane zamykanie wszystkich znaczników Każdy atrybut musi mieć wartość ujętą w cudzysłowy lub apostrofy. HTML Brak różnicy w interpretacji małych i dużych liter. Nie wszystkie znaczniki muszą być zamykane, np <p>. Wartości atrybutów nie muszą być ujęte w cudzysłowy lub apostrofy. Atrybuty nie muszą mieć wartości.

Inne cechy XML Nazwy znaczników nie mogą się rozpoczynać od przedrostka xml lub xsl (niezależnie od wielkości liter), Dane XML mogą być zapisywane w pełnym zestawie znaków UNICODE. Można używać przestrzeni nazw.

Budowa dokumentu XML document ::= prolog element Misc* Prolog Treść Epilog

Budowa dokumentu XML document ::= prolog element Misc* Prolog <?xml version="1.0"> Treść Epilog

Budowa dokumentu XML document ::= prolog element Misc* Prolog <?xml version="1.0" encoding="utf-8" standalone="yes"?> Treść Epilog

Budowa dokumentu XML document ::= prolog element Misc* Prolog <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!DOCTYPE cataloge [... ]> Treść Epilog

Budowa dokumentu XML document ::= prolog element Misc* Prolog Treść <ActionsSet> <Action Name="Move" > <Parameter Name="speed" Value="35" /> <Parameter Name="dist" Value="200" /> <Parameter Name="safeZone" Value="30" /> </Action> </ActionsSet> Epilog

Budowa dokumentu XML document ::= prolog element Misc* Prolog Treść Epilog Jest opcjonalny. Zawiera końcowe komentarze i instrukcje. Epilogiem jest wszystko to, co występuje za głównym elementem dokumentu.

Elementy <ActionsSet> <Action Name="Move" > <Parameter Name="speed" Value="35" /> </Action> </ActionsSet> Musi być zachowany ścisły porządek znaczników otwierających i zamykających. Nie jest dopuszczalna konstrukcja typu: <b>hello<i>world</b></i>

Atrybuty Tworzenie bibliotek dynamicznie konsolidowanych <ActionsSet> <Action Name="Move" > <Parameter Name="speed" Value="35" /> </Action> </ActionsSet> Atrybuty muszą mieć wartość. Wartości atrybutów muszą być ujęte w cudzysłowy lub apostrofy. Wewnątrz wartości nie mogą występować znaki < i &. Zamiast nich można użyć < oraz %amp; Jeśli konieczne jest użycie znaków (cudzysłów) oraz (apostrof), to należy zastosować skrót odpowiednio &quot lub &a

Komentarze <ActionsSet> <Action Name="Move" > <!-- Komentarz --> <Parameter Name="speed" Value="35" /> </Action> </ActionsSet> Wewnątrz komentarza nie można użyć dwóch minusów -- Linia nie może być zakończona znakiem minus -. Parser XML nie ma obowiązku analizować komentarza.

DTD Document-Type Definition <ActionsSet> <Action Name="Move" > <Parameter Name="speed" Value="35" /> <Parameter Name="dist" Value="200" /> <Parameter Name="safeZone" Value="30" /> </Action> </ActionsSet>

DTD Document-Type Definition <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!DOCTYPE ActionsSet [ <!ELEMENT ActionsSet (Action+)> <!ELEMENT Action (Parametr+)> <!ATTLIST Action Name CDATA #REQUIRED> <!ELEMENT Parameter> <!ATTLIST Parametr Name CDATA #REQUIRED> <!ATTLIST Parametr Value CDATA #REQUIRED> ]> <ActionsSet> <Action Name="Move" > <Parameter Name="speed" Value="35" /> <Parameter Name="dist" Value="200" /> <Parameter Name="safeZone" Value="30" /> </Action> </ActionsSet>

Plan prezentacji 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

ogólna charakterystyka jest językiem opartym na XML. Jest on stworzony w celu opisu języków opartych na XML oraz modułów danych. definiuje nazwy elementów i atrybutów dla danej klasy dokumentów XML, jak też całą strukturę dokumentu. Realizuje te same zadanie, do którego był wykorzystywany DTD. Ma jednak znacznie większe możliwości. Oprócz tego jest strukturą XML w odróżnieniu od DTD.

ogólna charakterystyka Dodatkowe możliwości w stosunku do DTD: definiowanie typów prostych i złożonych, definiowanie typów pochodnych poprzez zawężanie typu bazowego, przestrzenie nazw, możliwość definiowania kontekstu elementów i atrybutów, który określa dopuszczalne typy atrybutów. W nazwach plików, które zawierają definicje stosuje się powszechnie rozszerzenie.xsd ( Definition).

Przykład dokumentu XML i XML dokument: <?xml version="1.0"?> <Person> Mark Kowalski </Person>

Przykład dokumentu XML i XML dokument: <?xml version="1.0"?> <Person> Mark Kowalski </Person> dokument: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="person" type="xs:string"/> </xs:schema>

Przykład dokumentu XML i XML dokument: <?xml version="1.0"?> <Person> <Forename>Jan</Forename> <Surname>Kowalski</Surname> </Person>

Przykład dokumentu XML i dokument: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="forename" type="xs:string"/> <xs:element name="surname" </xs:sequence> </xs:complextype> </xs:element> </xs:schema> type="xs:string"/>

Przykład dokumentu XML i XML dokument: <?xml version="1.0"?> <Person Forename="Jan" Surname="Kowalski"/>

Przykład dokumentu XML i XML dokument: <?xml version="1.0"?> <Person Forename="Jan" Surname="Kowalski"/> dokument: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="person"> <xs:complextype> <xs:sequence> </xs:sequence> <xs:attribute name="forename" type="xs:string"/> <xs:attribute name="surname" type="xs:string"/> </xs:complextype> </xs:element> </xs:schema>

Przykład dokumentu XML i Przykład zaczerpnięty z http://www.learn-xml-schema-tutorial.com

Kiedy dane, a kiedy atrybuty? Atrybuty nie powinny zmieniać charakteru danego obiektu. W tym kontekście w poprzednim przykładzie imię i nazwisko powinno występować w sekcji dane.

Modele rozbioru dokumentu XML DOM Document Object Model SAX Simple API for XML SAX2 bardziej rozbudowana wersja modelu SAX Umożliwia zarejestrowanie nowych hendlerów zdarzeń lepiej odzwierciedlających strukturę dokumentu. Pozwala zmienić zachowanie parsera poprzez wymuszenie oceny poprawności dokumentu (wykorzystanie informacje zawartej w opisie DTD) lub jej zaniechania.

Modele rozbioru dokumentu XML DOM Document Object Model SAX Simple API for XML SAX2 bardziej rozbudowana wersja modelu SAX Umożliwia zarejestrowanie nowych hendlerów zdarzeń lepiej odzwierciedlających strukturę dokumentu. Pozwala zmienić zachowanie parsera poprzez wymuszenie oceny poprawności dokumentu (wykorzystanie informacje zawartej w opisie DTD) lub jej zaniechania.

Modele rozbioru dokumentu XML DOM DOM Document Object Model Na podstawie dokumentu XML generowana jest drzewiasta struktura danych, która bezpośrednio odzwierciedla samą strukturę dokumentu.

Modele rozbioru dokumentu XML DOM DOM Document Object Model Zalety: Na podstawie dokumentu XML generowana jest drzewiasta struktura danych, która bezpośrednio odzwierciedla samą strukturę dokumentu. Utworzona struktura danych w naturalny sposób odzwierciedla strukturę dokumenu. Możliwy jest wielokrotny dostęp do zawartości dokumentu.

Modele rozbioru dokumentu XML DOM DOM Document Object Model Zalety: Na podstawie dokumentu XML generowana jest drzewiasta struktura danych, która bezpośrednio odzwierciedla samą strukturę dokumentu. Utworzona struktura danych w naturalny sposób odzwierciedla strukturę dokumenu. Możliwy jest wielokrotny dostęp do zawartości dokumentu.

Modele rozbioru dokumentu XML DOM DOM Document Object Model Zalety: Wady: Na podstawie dokumentu XML generowana jest drzewiasta struktura danych, która bezpośrednio odzwierciedla samą strukturę dokumentu. Utworzona struktura danych w naturalny sposób odzwierciedla strukturę dokumenu. Możliwy jest wielokrotny dostęp do zawartości dokumentu. Relatywnie wolne wczytywanie dokumentu. Dla każdego analizowanego elementu trzeba utworzyć odpowiadającą mu strukturę danych. Duża zapotrzebowanie na pamięć, w której musi znaleźć się lustrzana struktura danych reprezentująca cały dokument.

Modele rozbioru dokumentu XML DOM DOM Document Object Model Zalety: Wady: Na podstawie dokumentu XML generowana jest drzewiasta struktura danych, która bezpośrednio odzwierciedla samą strukturę dokumentu. Utworzona struktura danych w naturalny sposób odzwierciedla strukturę dokumenu. Możliwy jest wielokrotny dostęp do zawartości dokumentu. Relatywnie wolne wczytywanie dokumentu. Dla każdego analizowanego elementu trzeba utworzyć odpowiadającą mu strukturę danych. Duża zapotrzebowanie na pamięć, w której musi znaleźć się lustrzana struktura danych reprezentująca cały dokument.

Modele rozbioru dokumentu XML SAX SAX Simple API for XML W trakcie czytania dokumentu po napotkaniu elementów XML wywoływane są funkcje (o ile zostały dostarczone). Takie podejście wymusza programowanie zdarzeniowe. Definicje poszczególnych funkcji dostarcza programista.

Modele rozbioru dokumentu XML SAX SAX Simple API for XML Zalety: W trakcie czytania dokumentu po napotkaniu elementów XML wywoływane są funkcje (o ile zostały dostarczone). Takie podejście wymusza programowanie zdarzeniowe. Definicje poszczególnych funkcji dostarcza programista. Pozwala na analizowanie tylko tych elementów dokumentu dokumentów, które są istotne dla aplikacji. Pozwala na tworzenie tylko tych struktur danych, które odpowiadają informacji zawartej w dokumencie. Nie są tworzone struktury, które byłyby ściśle związane z samym dokumentem, a nie jego treścią.

Modele rozbioru dokumentu XML SAX SAX Simple API for XML Zalety: W trakcie czytania dokumentu po napotkaniu elementów XML wywoływane są funkcje (o ile zostały dostarczone). Takie podejście wymusza programowanie zdarzeniowe. Definicje poszczególnych funkcji dostarcza programista. Pozwala na analizowanie tylko tych elementów dokumentu dokumentów, które są istotne dla aplikacji. Pozwala na tworzenie tylko tych struktur danych, które odpowiadają informacji zawartej w dokumencie. Nie są tworzone struktury, które byłyby ściśle związane z samym dokumentem, a nie jego treścią.

Modele rozbioru dokumentu XML SAX SAX Simple API for XML Zalety: Wady: W trakcie czytania dokumentu po napotkaniu elementów XML wywoływane są funkcje (o ile zostały dostarczone). Takie podejście wymusza programowanie zdarzeniowe. Definicje poszczególnych funkcji dostarcza programista. Pozwala na analizowanie tylko tych elementów dokumentu dokumentów, które są istotne dla aplikacji. Pozwala na tworzenie tylko tych struktur danych, które odpowiadają informacji zawartej w dokumencie. Nie są tworzone struktury, które byłyby ściśle związane z samym dokumentem, a nie jego treścią. Do danego elementu dokumentu można odwołać się tylko raz. Jest to poważna wada w przypadku, gdy ewaluacja wyrażenia wymaga dostępu do całego dokumentu.

Plan prezentacji 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Parser dokumentów XML Xerces pakiet oprogramowania tworzony w ramach projektu Apache. Zawiera on zbiór bibliotek, które pozwalają na parsowanie, ocenę poprawności, serializację oraz manipulację opisami XML. Biblioteki dostępne są dla języków programowania C++, Java i Perl.

Parser dokumentów XML Xerces pakiet oprogramowania tworzony w ramach projektu Apache. Zawiera on zbiór bibliotek, które pozwalają na parsowanie, ocenę poprawności, serializację oraz manipulację opisami XML. Biblioteki dostępne są dla języków programowania C++, Java i Perl. Rozwijane projektu: (strona projektu: http://xerces.apache.org) Apache Xerces C++ Apache Xerces2 Java Apache Xerces Perl Apache XML Commons

Plan prezentacji 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Ogólny zarys przykładu int main(int argc, char args[ ]) { CommandsList CmdsList; if (!ReadActionsFromXMLFile( actions.xml,cmdslist)) return 1; CmdsList.Display( );

Ogólny zarys przykładu class CommandsList: public std::list<command > { ; public : CommandsList( ) { Clear( ); void Clear( ); void Add(Command pcmd); void Display( ) const ; int main(int argc, char args[ ]) { CommandsList CmdsList; if (!ReadActionsFromXMLFile( actions.xml,cmdslist)) return 1; CmdsList.Display( );

Ogólny zarys przykładu class CommandsList: public std::list<command > { void clear( ) { public : CommandsList( ) { Clear( ); void Clear( ); void Add(Command pcmd); void Display( ) const ; ; int main(int argc, char args[ ]) { CommandsList CmdsList; if (!ReadActionsFromXMLFile( actions.xml,cmdslist)) return 1; CmdsList.Display( );

Funkcja czytająca listę poleceń bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Funkcja czytająca listę poleceń bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Funkcja czytająca listę poleceń bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) { try { XMLPlatformUtils::Initialize(); catch (const XMLException& tocatch) { DisplayXMLMessage( Blad inicjalizacji\nkomunikat bledu: \n,tocatch); return false;... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Funkcja wyświetlająca komunikat void DisplayXMLMessage(const char scomment, const XMLException& Except) { char message = XMLString::transcode(Except.getMessage()); cerr << scomment << message << \n ; XMLString::release(&message); bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) { try { XMLPlatformUtils::Initialize(); catch (const XMLException& tocatch) { DisplayXMLMessage( Blad inicjalizacji\nkomunikat bledu: \n,tocatch); return false;...

Inicjalizacja bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) { try { XMLPlatformUtils::Initialize(); catch (const XMLException& tocatch) { DisplayXMLMessage( Blad inicjalizacji\nkomunikat bledu: \n,tocatch); return false;... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Usunięcie pomocniczych obiektów return true;

Tworzenie parsera i ustawianie własności bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Usunięcie pomocniczych obiektów return true;

Tworzenie parsera i ustawianie własności bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces SAX2XMLReader parser = XMLReaderFactory::createXMLReader(); parser >setfeature(xmluni::fgsax2corevalidation, true); parser >setfeature(xmluni::fgsax2corenamespaces, true);... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Usunięcie pomocniczych obiektów return true;

Tworzenie handlera zdarzeń bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Usunięcie pomocniczych obiektów return true;

Tworzenie handlera zdarzeń bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności DefaultHandler defaulthandler = new Parser4CommandsXMLFile(CmdsList); parser->setcontenthandler(defaulthandler); parser->seterrorhandler(defaulthandler);... // Wczytanie gramatyki... // Usunięcie pomocniczych obiektów return true;

Wczytywanie gramatyki bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Usunięcie pomocniczych obiektów return true;

Wczytywanie gramatyki bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń try {... // Wczytanie gramatyki... // Uruchomienie parsera // catch Przechwytywanie wyjątków... // Usunięcie pomocniczych obiektów return true;

Wczytywanie gramatyki bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń try { if (!pparser->loadgrammar( grammartwarz robota.xsd, xercesc::grammar::schemagrammartype,true)) { cerr <<!!! Blad czytania pliku grammar/twarz robota.xsd, << endl; return false;... // Uruchomienie parsera // catch Przechwytywanie wyjątków... // Usunięcie pomocniczych obiektów return true;

Wczytywanie gramatyki bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń try { if (!pparser->loadgrammar( grammartwarz robota.xsd, xercesc::grammar::schemagrammartype,true)) { cerr <<!!! Blad czytania pliku grammar/twarz robota.xsd, << endl; return false;... // Uruchomienie parsera // catch Przechwytywanie wyjątków... // Usunięcie pomocniczych obiektów Drugi parametr wywołania metody loadgrammar, mówi o tym czy gramatyka jest zapisana w języku XML Scheme, czy też DTD (ang. Document Type Definition). return true;

Uruchomienie parsera bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń try {... // Wczytanie gramatyki... // Uruchomienie parsera // catch Przechwytywanie wyjątków... // Usunięcie pomocniczych obiektów return true;

Uruchomienie parsera bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń try {... // Wczytanie gramatyki parser->parse(sfilename); // catch Przechwytywanie wyjątków... // Usunięcie pomocniczych obiektów return true;

Obsługa wyjątków bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń try {... // Wczytanie gramatyki... // Uruchomienie parsera // catch Przechwytywanie wyjątków... // Usunięcie pomocniczych obiektów return true;

Obsługa wyjątków bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń try {... // Wczytanie gramatyki... // Uruchomienie parsera catch (const XMLException& Except) { DisplayXMLMessage( Informacja o wyjatku:\n, Except); return false; catch (const SAXParseException& Except) { DisplaySAXMessage( Informacja o wyjatku:\n,except); return false; catch (...) { cout << Nieoczekiwany wyjatek\n ; return false;... // Usunięcie pomocniczych obiektów

Wyświetlanie komunikatu błędu void DisplaySAXMessage(const char scomment, const SAXParseException& Except) { char message = XMLString::transcode(Except.getMessage()); cerr << scomment << message << \n ; XMLString::release(&message); cerr << Lokalizacja bledu: << endl << wiersz: << Except.getLineNumber() << endl << kolumna: << Except.getColumnNumber() << endl; bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... catch (const XMLException& Except) { DisplayXMLMessage( Informacja o wyjatku:\n, Except); return false; catch (const SAXParseException& Except) {... DisplaySAXMessage( Informacja o wyjatku:\n,except); return false;

Funkcja czytająca listę poleceń bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Funkcja czytająca listę poleceń bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków delete delete return parser; defaulthandler; true;

Włączanie własności bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Włączanie własności bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces SAX2XMLReader parser = XMLReaderFactory::createXMLReader(); parser >setfeature(xmluni::fgsax2corevalidation, true); parser >setfeature(xmluni::fgsax2corenamespaces, true);... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Włączanie własności bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces SAX2XMLReader parser = XMLReaderFactory::createXMLReader(); parser >setfeature(xmluni::fgsax2corevalidation, true); parser >setfeature(xmluni::fgsax2corenamespaces, true); parser >setfeature(xmluni::fgxercesdynamic, false); parser >setfeature(xmluni::fgxercesschema, true); parser >setfeature(xmluni::fgxercesschemafullchecking, true); parser >setfeature(xmluni::fgxercesvalidationerrorasfatal, true); parser >setfeature(xmluni::fgxercesusecachedgrammarinparse,true);... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) XMLUni::fgXercesDynamic (domyślnie: false) XMLUni::fgXercesSchema (domyślnie: true) XMLUni::fgXercesSchemaFullChecking (domyślnie: false) XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false)

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) Gdy true to, z dokumentem musi być dołączana gramatyka, która będzie podstawą oceny poprawności składni dokumentu. XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) XMLUni::fgXercesDynamic (domyślnie: false) XMLUni::fgXercesSchema (domyślnie: true) XMLUni::fgXercesSchemaFullChecking (domyślnie: false) XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false)

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) Gramatyka dokumentu musi wspierać mechanizm przestrzeni nazw. XMLUni::fgXercesDynamic (domyślnie: false) XMLUni::fgXercesSchema (domyślnie: true) XMLUni::fgXercesSchemaFullChecking (domyślnie: false) XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false)

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) XMLUni::fgXercesDynamic (domyślnie: false) Jeśli true to poprawność dokumentu jest oceniana tylko wtedy, gdy jest dostarczony jest opis gramatyki dokumentu. XMLUni::fgXercesSchema (domyślnie: true) XMLUni::fgXercesSchemaFullChecking (domyślnie: false) XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false)

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) XMLUni::fgXercesDynamic (domyślnie: false) XMLUni::fgXercesSchema (domyślnie: true) Uaktywnia wsparcie parsera dla. XMLUni::fgXercesSchemaFullChecking (domyślnie: false) XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false)

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) XMLUni::fgXercesDynamic (domyślnie: false) XMLUni::fgXercesSchema (domyślnie: true) XMLUni::fgXercesSchemaFullChecking (domyślnie: false) Uaktywnia pełne parsowanie gramatyki dokumentu (może to być czasochłonne). XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false)

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) XMLUni::fgXercesDynamic (domyślnie: false) XMLUni::fgXercesSchema (domyślnie: true) XMLUni::fgXercesSchemaFullChecking (domyślnie: false) XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) Gdy true napotkane błędy będą traktowane jako fatalne i parser przerwie swoje działanie. W przypadku przeciwnym, parser będzie zgłaszał błędy, ale jego działanie będzie kontynuowane. XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false)

Znaczenie symboli własności Opis: http://xerces.apache.org/xerces-c/program-sax2-2.html#sax2features XMLUni::fgSAX2CoreValidation (domyślnie: false) XMLUni::fgSAX2CoreNameSpaces (domyślnie: true) XMLUni::fgXercesDynamic (domyślnie: false) XMLUni::fgXercesSchema (domyślnie: true) XMLUni::fgXercesSchemaFullChecking (domyślnie: false) XMLUni::fgXercesValidationErrorAsFatal (domyślnie: false) XMLUni::fgXercesUseCachedGrammarInParse (domyślnie: false) Użyj wczytaną gramatykę, jeśli została wcześniej wczytana.

Funkcja czytająca listę poleceń #include <xercescsax2sax2xmlreader.hpp> #include <xercescsax2xmlreaderfactory.hpp> #include <xercescsax2defaulthandler.hpp> #include <xercescutilxmlstring.hpp>... bool ReadActionsFromXMLFile(const char sfilename, CommandsList& CmdsList) {... // Inicjalizacja biblioteki Xerces... // Tworzenie obiektu parsera, i ustawieie własności... // Tworzenia handlera zdarzeń... // Wczytanie gramatyki... // Uruchomienie parsera i obsługa wyjątków... // Usunięcie pomocniczych obiektów return true;

Klasa parsera class Parser4CommandsXMLFile : public xercesc::defaulthandler { public : Parser4CommandsXMLFile(CommandsList &CmdList); virtual void startdocument( ); virtual void enddocument( ); virtual void startelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& attrs ); virtual void endelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname ); void fatalerror(const xercesc::saxparseexception&); ; void SetCmdsList(CommandsList &CmdsList) { pcmdslist = &CmdsList; void WhenEndElement(const std::string & ElemName); void WhenStartElement( const std::string & ElemName, const xercesc::attributes& Attrs ); void ProcessCommandAttrs(const xercesc::attributes& Attrs); void CreateCommand(const std::string & CommandName); void ProcessParameterAttrs(const xercesc::attributes& Attrs); private : CommandsList pcmdslist; Command pcmd;

Klasa parsera class Parser4CommandsXMLFile : public xercesc::defaulthandler { public : Parser4CommandsXMLFile(CommandsList &CmdList); virtual void startdocument( ); virtual void enddocument( ); virtual void startelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& attrs ); virtual void endelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname ); void fatalerror(const xercesc::saxparseexception&); ; void SetCmdsList(CommandsList &CmdsList) { pcmdslist = &CmdsList; void WhenEndElement(const std::string & ElemName); void WhenStartElement( const std::string & ElemName, const xercesc::attributes& Attrs ); void ProcessCommandAttrs(const xercesc::attributes& Attrs); void CreateCommand(const std::string & CommandName); void ProcessParameterAttrs(const xercesc::attributes& Attrs); private : CommandsList pcmdslist; Command pcmd;

Klasa parsera class Parser4CommandsXMLFile : public xercesc::defaulthandler { public : Parser4CommandsXMLFile(CommandsList &CmdList); virtual void startdocument( ); virtual void enddocument( ); virtual void startelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& attrs ); virtual void endelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname ); void fatalerror(const xercesc::saxparseexception&); ; void SetCmdsList(CommandsList &CmdsList) { pcmdslist = &CmdsList; void WhenEndElement(const std::string & ElemName); void WhenStartElement( const std::string & ElemName, const xercesc::attributes& Attrs ); void ProcessCommandAttrs(const xercesc::attributes& Attrs); void CreateCommand(const std::string & CommandName); void ProcessParameterAttrs(const xercesc::attributes& Attrs); private : CommandsList pcmdslist; Command pcmd;

Definicja metody wirtualnej fatalerror void Parser4CommandsXMLFile::fatalError(const xercesc::saxparseexception& Except) { char smessage = xercesc::xmlstring::transcode( Except.getSMessage( ) ); cout << Blad fatalny: << smessage << endl << linia: << Except.getLineNumber( ) << endl << kolumna: << Except.getColumnNumber() << endl; xercesc::xmlstring::release(&smessage);

Klasa parsera class Parser4CommandsXMLFile : public xercesc::defaulthandler { public : Parser4CommandsXMLFile(CommandsList &CmdList); virtual void startdocument( ); virtual void enddocument( ); virtual void startelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& attrs ); virtual void endelement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname ); void fatalerror(const xercesc::saxparseexception&); ; void SetCmdsList(CommandsList &CmdsList) { pcmdslist = &CmdsList; void WhenEndElement(const std::string & ElemName); void WhenStartElement( const std::string & ElemName, const xercesc::attributes& Attrs ); void ProcessCommandAttrs(const xercesc::attributes& Attrs); void CreateCommand(const std::string & CommandName); void ProcessParameterAttrs(const xercesc::attributes& Attrs); private : CommandsList pcmdslist; Command pcmd;

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname);

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <Command Name="Rotate" > <Parameter Name="Angle" Value="35" /> <Parameter Name="AngleSpeed" Value="200" /> </Command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <Command Name="Rotate" > <Parameter Name="Angle" Value="35" /> <Parameter Name="AngleSpeed" Value="200" /> </Command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <Command Name="Rotate" > <Parameter Name="Angle" Value="35" /> <Parameter Name="AngleSpeed" Value="200" /> </Command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <Command Name="Rotate" > <Parameter Name="Angle" Value="35" /> <Parameter Name="AngleSpeed" Value="200" /> </Command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <Command Name="Rotate" > <Parameter Name="Angle" Value="35" /> <Parameter Name="AngleSpeed" Value="200" /> </Command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <Command Name="Rotate" > <Parameter Name="Angle" Value="35" /> <Parameter Name="AngleSpeed" Value="200" /> </Command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); URI (Uniform Resource Identifier) jest to ciąg znaków, który identyfikuje określone zasoby w Internecie. Większość URI to zunifikowane identyfikatory domeny adresowej (Uniform Resource Locator URL). Rzadziej są nimi zunifkowane nazwy zasobów (Uniform Resource Name URN).

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); Elementy informacji o wewnętrznej strukturze Internetu: URN (Uniform Resource Name) jest to identyfikator danego zasobu. URC (Uniform Resource Characteristics) zawiera metainformacje o danym zasobie. URL (Uniform Resource Locator) informacja o lokalizacji danego zasobu.

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); Przykład: URN urn:isbn:0271460523

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); Przykład: URN urn:isbn:0271460523 URN ::= urn:<identyfikator Przestrzeni Nazw>:<Element Przestni Nazw>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); Zazwyczaj URI zawiera URL, który lokalizuje opis danej podprzestrzni nazw. URI {{ URL, URN

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <Command Name="Rotate" > <Parameter Name="Angle" Value="35" /> <Parameter Name="AngleSpeed" Value="200" /> </Command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList xmlns:h="http://www.w3.org/tr/html4/"> <h:command Name="Rotate" > <h:parameter Name="Angle" Value="35" /> <h:parameter Name="AngleSpeed" Value="200" /> </h:command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); <CommandsList> <h:command Name="Rotate" xmlns:h="http://www.w3.org/tr/html4/"> <h:parameter Name="Angle" Value="35" /> <h:parameter Name="AngleSpeed" Value="200" /> </h:command> </CommandsList>

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname); puri: plocalname: pqname: http://www.w3.org/tr/html4/ Command h:command

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::startElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqname, const xercesc::attributes& Attrs ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << +++ Poczatek elementu: << selemname << endl; WhenStartElement(sElemName, Attrs); xercesc::xmlstring::release(&selemname);

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::WhenStartElement( { if (ElemName == Command ) { ProcessCommandAttrs(Attrs); return ; ) const std::string &ElemName, const xercesc::attributes &Attrs if (ElemName == Parameter ) { ProcessParameterAttrs(Attrs); return ;

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::WhenStartElement( { if (ElemName == Command ) { ProcessCommandAttrs(Attrs); return ; ) const std::string &ElemName, const xercesc::attributes &Attrs if (ElemName == Parameter ) { ProcessParameterAttrs(Attrs); return ;

Gdy napotkany zostanie element XML... void Parser4CommandsXMLFile::ProcessCommandAttrs(const xercesc::attributes &Attrs) { if (Attrs.getLength( )!= 1) { cerr << Zla ilosc atrybutow dla \ Command\ << endl; throw 1; char sattrname = xercesc::xmlstring::transcode(attrs.getqname(0)); if (strcmp(sattrname, Name )) { cerr << Zla nazwa atrybutu dla Command << endl; throw 2; char scommandname = xercesc::xmlstring ::transcode(attrs.getvalue(static cast <XMLSize t>(0))); CreateCommand(sCommandName); xercesc::xmlstring::release(&scommandname); xercesc::xmlstring::release(&sattrname);

Gdy dochodzimy do końca elementu... void Parser4CommandsXMLFile::endElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqnname ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << Koniec elementu: << selemname << endl; WhenEndElement(sElemName); xercesc::xmlstring::release(&selemname);

Gdy dochodzimy do końca elementu... void Parser4CommandsXMLFile::endElement( const XMLCh const puri, const XMLCh const plocalname, const XMLCh const pqnname ) { char selemname = xercesc::xmlstring::transcode(plocalname); cout << Koniec elementu: << selemname << endl; WhenEndElement(sElemName); xercesc::xmlstring::release(&selemname);

Gdy dochodzimy do końca elementu... void Parser4CommandsXMLFile::WhenEndElement(const std::string & ElemName) { if (ElemName!= Command ) return ; assert( pcmd!= NULL); assert( pcmdslist!= NULL); pcmdslist >Add( pcmd); cout << Polecenie \ << GetCmdName( ) << \ zostalo dodane do listy. << endl; pcmd = NULL;

Plan prezentacji Program rlwrap Biblioteka readline 1 Tworzenie bibliotek dynamicznie konsolidowanych Biblioteki statyczne - cechy, zalety i wady Biblioteki dynamiczne - cechy, zalety i wady Podstawowe informacje 2 3 Program rlwrap Biblioteka readline

Program rlwrap Biblioteka readline Program rlwrap jak uzyskać historię poleceń rlwrap readline wrapper Sposób wywołania: rlwrap [opcje] polecenie Program rlwrap przechwytuje wejście standardowe danego polecenia i pośredniczy między użytkownikiem, a danym poleceniem. Umożliwia on zdefiniowanie własnej zachęty, dostarcza historię wprowadzanych napisów. Dostarcza również system dopełniania nazw. Program jest przezroczysty dla wykonywanego polecenia.

Program rlwrap Biblioteka readline Przykład użycia programu rlwrap #include <iostream> using namespace std; [interakcja.cpp] void WyswietlMenu( ) { cout << endl << a - Akcja << endl << m - Wyswietl Menu << endl << k - Koniec << endl << endl; int main( ) { char Opcja = m ; do { switch (Opcja) { case m : WyswietlMenu( ); break ; case a : cout << Szybka akcja!!! << endl; break ; while ( cin >> Opcja, Opcja!= k ) {

Przykład użycia programu rlwrap Program rlwrap Biblioteka readline