Both sides previous revision
Poprzednia wersja
|
|
pl:miw:miw08_prolog_xml:parsowanie [2008/06/02 19:36] miw |
pl:miw:miw08_prolog_xml:parsowanie [2019/06/27 15:50] (aktualna) |
| ===== Parsowanie prostych plików xml ===== |
| |
| ==== Plik 'cd.xml' ==== |
| <code xml> |
| <!DOCTYPE CD SYSTEM "cd.dtd"> |
| <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> |
| |
| |
| |
| ==== Plik cd.dtd ==== |
| <code xml> |
| <!ELEMENT CD (TITLE, ARTIST, COUNTRY, COMPANY, PRICE, YEAR?)*> |
| <!ELEMENT TITLE (#PCDATA)> |
| <!ELEMENT ARTIST (#PCDATA)> |
| <!ELEMENT COUNTRY (#PCDATA)> |
| <!ELEMENT COMPANY (#PCDATA)> |
| <!ELEMENT PRICE (#PCDATA)> |
| <!ELEMENT YEAR (#PCDATA)> |
| </code> |
| |
| |
| |
| ==== 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: |
| <code prolog> 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')|...])</code> |
| Podobnie działa predykat load_xml_file('cd.xml',T). PO jego użyciu 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> |
| |
| |
| |
| ==== 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 |