[[
✎ pl:miw:miw08_prolog_xml
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Opis ====== Wojciech Szymański <wojtek.szym@gmail.com> Omówić metody parsowania, generowania i przetwarzania XML/SGML w Prologu. Należy również zająć się reprezentacjami pochodnymi opartymi na XML, np. RDF. Porównać dostępne rozwiązania i implementacje, np: * SWI * inne, np. YAP, Amzi. Wsparcie dla * XSD * namespaces * XSL * DOM ====== Spotkania ====== [[pl:miw:miw08_prolog_xml:spotkania|Spotkania]] ====== Sprawozdanie ====== ===== Wstęp - ogólne informacje ===== Celem projektu było omówienie metod parsowania, generowania oraz przetwarzania XML/SGML w Prologu. Należało porównać i przetestować dostępne rozwiązania oraz sprawdzić czy posiadają wsparcie dla DOM, XSD, XSL oraz namespaces. Istotną częścią projektu była implementacja własnego API przeznaczonego do tworzenia dokumentów XML w SWI-Prolog. Okazało się bowiem, że dostępne rozwiązania posiadają przede wszystkim dobre mechanizmy parsowania dokumentu (tworzenia postaci prologowej) oraz jego przetwarzania - zamiany postaci prologowej na dokument XML, natomiast nie posiadają wsparcia dla generowania XML opartego o standard DOM. ===== Parsowanie i przetwarzanie prostych dokumentów XML w prologu ===== Istnieje wiele implementacji prologu posiadających wsparcie dla generowania i przetwarzania dokumentów XML. Dostępne są zarówno wersje płatne, które można przetestować (np. 30-dniowe wersje) oraz wersje bezpłatne. W celu przetestowania parsowania oraz przetwarzania plików XML przygotowano następujący, prosty plik XML: <code xml> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tylor</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> <TITLE>Greatest Hits</TITLE> <ARTIST>Dolly Parton</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>RCA</COMPANY> <PRICE>9.90</PRICE> <YEAR>1982</YEAR> <TITLE>Still got the blues</TITLE> <ARTIST>Gary More</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Virgin redords</COMPANY> <PRICE>10.20</PRICE> <YEAR>1990</YEAR> </code> Przetestowano następujące implementacje prologu: SWI-Prolog, BProlog, Amzi! Prolog, EZY Prolog, MINERVA, JIProlog oraz YAP Prolog. ==== SWI-Prolog ==== SWI-Prolog posiada pakiet //**sgml2pl**// - [[http://www.swi-prolog.org/packages/sgml2pl.html|SWI-Prolog SGML/XML parser]]. Pakiet ten posiada możliwości parsowania dokumentów XML wraz z namespaces oraz plików XML opartych o model DOM. Podstawowym predykatem służącym do parsowania jest: //**load_xml_file(+File,-ListOfContents)**//. Natomiast predykat służący do przetworzenia postaci prologowej na postać xml ma postać: //**xml_write(+Stream, +Term, +Options)**//. Po wpisaniu w prologu: <code prolog> ?- load_xml_file('cd.xml',T). </code> otrzymano: <code prolog> T = [element('CD', [], [ element('TITLE', [], ['Empire Burlesque']), element('ARTIST', [], ['Bob Dylan']), element('COUNTRY', [], ['USA']), element('COMPANY', [], ['Columbia']), element('PRICE', [], ['10.90']), element('YEAR', [], [...]), element(..., ..., ...)|...])] </code> W celu przetworzenia z powrotem postaci prologowej do postaci XML wpisujemy: <code prolog> ?- load_xml_file('cd.xml',L),tell('cd1.xml'),open('cd1.xml',write,S),xml_write(S,L,[]),told,close(S). </code> i otrzymujemy dokument XML o nazwie cd1 stanowiący kopię dokumentu cd.xml (Dokument został sparsowany, a następnie zapisany do pliku o nowej nazwie ). ==== BProlog ==== Udało się zainstalować BProlog oraz załadować biblioteke 'xml.pl'. Po sparsowaniu pliku 'cd.xml' otrzymano reprezentacje tego pliku xml w postaci termu w prologu. Sposób działania: * Komenda cd(Dir) ustala ścieżke w której pracujemy, np. cd('C:/BProlog/Tools'). Tam muszą znajdować sie zarówno pilik xml jak i plik biblioteki 'xml.pl'. * Komenda cl(File) kompiluje i ładuje program, np. cl('xml.pl') kompiluje i ładuje biblioteke 'xml.pl' * Dalej posługujemy się predykatami zawartymi w biblotece, np. xml2pl('cd.xml','nowy.pl') tworzy plik nowy.pl zawierający postać prologową pliku cd.xml. Poniżej przedstawiono wygenerowaną postać w prologu: <code prolog> xml( [version="1.0", encoding="ISO-8859-1", standalone="no"], [ doctype( 'CD', system( "cd.dtd" ) ), element( 'CD', [], [ element( 'TITLE',[],[pcdata("Empire Burlesque")] ), element( 'ARTIST',[],[pcdata("Bob Dylan")] ), element( 'COUNTRY',[],[pcdata("USA")] ), element( 'COMPANY',[],[pcdata("Columbia")] ), element( 'PRICE',[],[pcdata("10.90")] ), element( 'YEAR',[],[pcdata("1985")] ), element( 'TITLE',[],[pcdata("Hide your heart")] ), element( 'ARTIST',[],[pcdata("Bonnie Tylor")] ), element( 'COUNTRY',[],[pcdata("UK")] ), element( 'COMPANY',[],[pcdata("CBS Records")] ), element( 'PRICE',[],[pcdata("9.90")] ), element( 'YEAR',[],[pcdata("1988")] ), element( 'TITLE',[],[pcdata("Greatest Hits")] ), element( 'ARTIST',[],[pcdata("Dolly Parton")] ), element( 'COUNTRY',[],[pcdata("USA")] ), element( 'COMPANY',[],[pcdata("RCA")] ), element( 'PRICE',[],[pcdata("9.90")] ), element( 'YEAR',[],[pcdata("1982")] ), element( 'TITLE',[],[pcdata("Still got the blues")] ), element( 'ARTIST',[],[pcdata("Gary More")] ), element( 'COUNTRY',[],[pcdata("UK")] ), element( 'COMPANY',[],[pcdata("Virgin redords")] ), element( 'PRICE',[],[pcdata("10.20")] ), element( 'YEAR',[],[pcdata("1990")] ) ] ) ] ). </code> ==== Amzi! Prolog ==== Wersja prologu Amzi! jest możliwa do ściągnięcia jako wersja "Free (Never Expires)". Za inne wersje trzeba płacić. Do tej pory nie udało się skorzystać z biblioteki podanej w [[http://www.amzi.com/manuals/amzi7/libs/xml.htm|XML.pro]]. ==== EZY Prolog ==== Udało sie zainstalować EZY Prolog Suite. Jest to wersja darmowa tzw. EZY Prolog for students. Przetestowano program ezy_zml_laboratory.ezy. Program pozwala na wczytanie pliku xml i jego sparsowanie. ==== MINERVA ==== Minerva jest licencjonowanym produktem firmy IF Computer Japan. Jest możliwe posiadanie licencji ewaluacyjnej (wolnej od opłaty) ważnej na okres 2 miesięcy. Minerva może być nazwana jako Java Prolog ponieważ dostarcza funkcjonalności Prologu jako klasa Javy. ==== JIProlog ==== Po zainstalowaniu i uruchomieniu lub po uruchomieniu apletu na stronie parser zadziałał. Wersja tego prologu była bezpłatna, podczas działania wyświetlał sie tylko napis informujący użytkownika, że posiada wersje shareware unregistered. Zgodnie z przykładem udało sie otrzymać postać prologową po sparsowaniu pliku xml. Poszczególne kroki: * load_library('jipxxml.jar'). - ładowanie biblioteki do obsługi plików xml * load_library('jipxio.jar'). - ładowanie biblioteki do i/o dla plików * see('cd.xml'). - otworzenie pliku xml * xml_read_document(X) - przetworzenie dokumentu xml do postaci prologu Istnieje też predykat create_xml_file(X) który zawarty jest w przykładowym programie xml_sample.pl. Predykat ten tworzy plik xml na podstawie termu prologowego. Istnieje też predykat xml_write_document(Handle,Term). Poniżej przedstawiono wygenerowany plik w postaci prologowej: <code prolog> X = xml_document([[version = 1.0, encoding = UTF-8], xml_doctype(CD, [SYSTEM = cd.dtd], [])], xml_element(CD, [], [xml_element(TITLE, [], [xml_text(Empire Burlesque)]), xml_element(ARTIST, [], [xml_text(Bob Dylan)]), xml_element(COUNTRY, [], [xml_text(USA)]), xml_element(COMPANY, [], [xml_text(Columbia)]), xml_element(PRICE, [], [xml_text(10.90)]), xml_element(YEAR, [], [xml_text(1985)]), xml_element(TITLE, [], [xml_text(Hide your heart)]), xml_element(ARTIST, [], [xml_text(Bonnie Tylor)]), xml_element(COUNTRY, [], [xml_text(UK)]), xml_element(COMPANY, [], [xml_text(CBS Records)]), xml_element(PRICE, [], [xml_text(9.90)]), xml_element(YEAR, [], [xml_text(1988)]), xml_element(TITLE, [], [xml_text(Greatest Hits)]), xml_element(ARTIST, [], [xml_text(Dolly Parton)]), xml_element(COUNTRY, [], [xml_text(USA)]), xml_element(COMPANY, [], [xml_text(RCA)]), xml_element(PRICE, [], [xml_text(9.90)]), xml_element(YEAR, [], [xml_text(1982)]), xml_element(TITLE, [], [xml_text(Still got the blues)]), xml_element(ARTIST, [], [xml_text(Gary More)]), xml_element(COUNTRY, [], [xml_text(UK)]), xml_element(COMPANY, [], [xml_text(Virgin redords)]), xml_element(PRICE, [], [xml_text(10.20)]), xml_element(YEAR, [], [xml_text(1990)]) ])) </code> ==== YAP Prolog ==== Wersja YAP Prolog jest bezpłatna użyciu w środowiskach akademickich. Istnieje biblioteka posiadająca możliwości związane z plikami XML/HTML (parsowanie plików XML lub HTML) - [[http://www.clip.dia.fi.upm.es/Software/pillow/pillow.html|The PiLLoW Web Programming Library ]]. Wersje tej biblioteki są dostępne zarówno dla YAP Prolog jak i dla SWI Prolog oraz Ciao Prolog. Jeśli chodzi o predykaty związane z XML jest dostępny [[http://www.clip.dia.fi.upm.es/Software/pillow/pillow_doc_html/pillow_doc_3.html#SEC5|xml2terms/2]] Predykat ten wykorzystuje się na dwa sposoby: - translacja XML-term do kodu XML - translacja kodu XML do strukturalnego termu XML'owego ===== Porównanie prologowych postaci dokumentu XML ===== ===== Implementacja API w SWI-Prolog ===== ===== Przykład użycia API ===== ====== Projekt ====== Przebieg projektu znajduje się [[pl:miw:miw08_prolog_xml:projekt|tutaj]]. ====== Materiały ====== Wszelkie materiały dostępne: [[pl:miw:miw08_prolog_xml:materialy|tutaj]].
pl/miw/miw08_prolog_xml.1212681504.txt.gz
· ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry