===== Parsowanie prostych plików xml ===== ==== Plik 'cd.xml' ==== Empire Burlesque Bob Dylan USA Columbia 10.90 1985 Hide your heart Bonnie Tylor UK CBS Records 9.90 1988 Greatest Hits Dolly Parton USA RCA 9.90 1982 Still got the blues Gary More UK Virgin redords 10.20 1990 ==== Plik cd.dtd ==== ==== SWI-Prolog ==== * SGML/XML, interpret XML Namespaces, Validate an SGML/XML DOM-term Jeśli chodzi o SWI-Prolog udało sie zrobić następujące rzeczy: Ze strony [[http://www.swi-prolog.org/]] pobrano przykładowe użycie predykatów korzystających z biblioteki sgml2pl. Użyto predykatu xml2pro('cd.xml','cd.dtd',X) i pod X otrzymano postać prologową pliku cd.xml. W drugą stronę użyto predykatu pro2xml(postac_w_prologu,'plik.xml'). Poniżej przedstawiono postać w prologu wygenerowaną przez predykat xml2pro: cd([], [title([], 'Empire Burlesque'), artist([], 'Bob Dylan'), country([], 'USA'), company([], Columbia'), price([], '10.90'), year([], '1985'), title([], 'Hide your heart'), artist([], 'halo'), country([], 'Polska'), company([], 'EMI'), price([], '23.90'), year([], '1999')|...]) Podobnie działa predykat load_xml_file('cd.xml',T). PO jego użyciu otrzymano: T = [element('CD', [], [ element('TITLE', [], ['Empire Burlesque']), element('ARTIST', [], ['Bob Dylan']), element('COUNTRY', [], ['USA']), element('COMPANY', [], ['Columbia']), element('PRICE', [], ['10.90']), element('YEAR', [], [...]), element(..., ..., ...)|...])] ==== 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: 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")] ) ] ) ] ). ==== 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: 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)]) ])) ==== 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